Whamcloud - gitweb
ok, no, really, commit the qla2xxx driver.
authorzab <zab>
Thu, 3 Jul 2003 22:36:21 +0000 (22:36 +0000)
committerzab <zab>
Thu, 3 Jul 2003 22:36:21 +0000 (22:36 +0000)
lustre/kernel_patches/patches/qla2xxx-v8.00.00b1-2.5.73.patch
lustre/kernel_patches/pc/qla2xxx-v8.00.00b1-2.5.73.pc

index ca6cea2..88726a3 100644 (file)
@@ -1,6 +1,49 @@
+ drivers/scsi/Kconfig                |    2 
+ drivers/scsi/Makefile               |    1 
+ drivers/scsi/qla2xxx/Kconfig        |   37 
+ drivers/scsi/qla2xxx/Makefile       |   56 
+ drivers/scsi/qla2xxx/README.qla2x00 |  744 ++++
+ drivers/scsi/qla2xxx/exioct.h       |  947 +++++
+ drivers/scsi/qla2xxx/exioctln.h     |  255 +
+ drivers/scsi/qla2xxx/inioct.h       |  129 
+ drivers/scsi/qla2xxx/ql2100tp_fw.c  | 4866 ++++++++++++++++++++++++++
+ drivers/scsi/qla2xxx/ql2200ip_fw.c  | 5884 ++++++++++++++++++++++++++++++++
+ drivers/scsi/qla2xxx/ql2300tpx_fw.c | 6494 +++++++++++++++++++++++++++++++++++
+ drivers/scsi/qla2xxx/qla_cfg.c      | 2780 +++++++++++++++
+ drivers/scsi/qla2xxx/qla_cfg.h      |  181 
+ drivers/scsi/qla2xxx/qla_cfgln.c    |  726 +++
+ drivers/scsi/qla2xxx/qla_dbg.c      | 1000 +++++
+ drivers/scsi/qla2xxx/qla_dbg.h      |  138 
+ drivers/scsi/qla2xxx/qla_def.h      | 2484 +++++++++++++
+ drivers/scsi/qla2xxx/qla_fo.c       | 1681 +++++++++
+ drivers/scsi/qla2xxx/qla_fo.cfg     |   31 
+ drivers/scsi/qla2xxx/qla_fo.h       |   75 
+ drivers/scsi/qla2xxx/qla_gbl.h      |  395 ++
+ drivers/scsi/qla2xxx/qla_inioct.c   |  495 ++
+ drivers/scsi/qla2xxx/qla_init.c     | 5945 ++++++++++++++++++++++++++++++++
+ drivers/scsi/qla2xxx/qla_inline.h   |  375 ++
+ drivers/scsi/qla2xxx/qla_iocb.c     | 1276 ++++++
+ drivers/scsi/qla2xxx/qla_ip.c       | 1769 +++++++++
+ drivers/scsi/qla2xxx/qla_ip.h       |  420 ++
+ drivers/scsi/qla2xxx/qla_isr.c      | 1474 ++++++++
+ drivers/scsi/qla2xxx/qla_listops.h  |  397 ++
+ drivers/scsi/qla2xxx/qla_mbx.c      | 2884 +++++++++++++++
+ drivers/scsi/qla2xxx/qla_os.c       | 5879 ++++++++++++++++++++++++++++++++
+ drivers/scsi/qla2xxx/qla_os.h       |  156 
+ drivers/scsi/qla2xxx/qla_settings.h |   80 
+ drivers/scsi/qla2xxx/qla_sup.c      |  560 +++
+ drivers/scsi/qla2xxx/qla_vendor.c   |  193 +
+ drivers/scsi/qla2xxx/qla_version.h  |   31 
+ drivers/scsi/qla2xxx/qla_xioct.c    | 6589 ++++++++++++++++++++++++++++++++++++
+ drivers/scsi/qla2xxx/qlfo.h         |  413 ++
+ drivers/scsi/qla2xxx/qlfolimits.h   |   92 
+ drivers/scsi/qla2xxx/qlfoln.h       |   76 
+ drivers/scsi/qla2xxx/release.txt    |   22 
+ drivers/scsi/qla2xxx/revision.notes |  167 
+ 42 files changed, 58199 insertions(+)
 
---- linux-2.5.73/drivers/scsi/Makefile~qla2xxx-v8.00.00b1-2.5.73       2003-06-22 11:33:08.000000000 -0700
-+++ linux-2.5.73-n9560/drivers/scsi/Makefile   2003-07-01 16:29:54.000000000 -0700
+--- linux-2.5.73/drivers/scsi/Makefile~qla2xxx-v8.00.00b1-2.5.73       Sun Jun 22 11:33:08 2003
++++ linux-2.5.73-n9560/drivers/scsi/Makefile   Thu Jul  3 15:34:28 2003
 @@ -73,6 +73,7 @@ obj-$(CONFIG_SCSI_QLOGIC_FAS)        += qlogicf
  obj-$(CONFIG_SCSI_QLOGIC_ISP) += qlogicisp.o 
  obj-$(CONFIG_SCSI_QLOGIC_FC)  += qlogicfc.o 
@@ -9,8 +52,8 @@
  obj-$(CONFIG_SCSI_PAS16)      += pas16.o
  obj-$(CONFIG_SCSI_SEAGATE)    += seagate.o
  obj-$(CONFIG_SCSI_FD_8xx)     += seagate.o
---- linux-2.5.73/drivers/scsi/Kconfig~qla2xxx-v8.00.00b1-2.5.73        2003-06-22 11:33:16.000000000 -0700
-+++ linux-2.5.73-n9560/drivers/scsi/Kconfig    2003-07-01 16:29:54.000000000 -0700
+--- linux-2.5.73/drivers/scsi/Kconfig~qla2xxx-v8.00.00b1-2.5.73        Sun Jun 22 11:33:16 2003
++++ linux-2.5.73-n9560/drivers/scsi/Kconfig    Thu Jul  3 15:34:28 2003
 @@ -1283,6 +1283,8 @@ config SCSI_QLOGIC_1280
          The module will be called qla1280. If you want to compile it as
          a module, say M here and read <file:Documentation/modules.txt>.
  config SCSI_QLOGICPTI
        tristate "PTI Qlogic, ISP Driver"
        depends on SBUS && SCSI
+--- /dev/null  Thu Apr 11 07:25:15 2002
++++ linux-2.5.73-n9560/drivers/scsi/qla2xxx/Kconfig    Thu Jul  3 15:34:42 2003
+@@ -0,0 +1,37 @@
++config SCSI_QLA2XXX
++      bool "QLogic QLA2XXX FC-SCSI support (v8)"
++      ---help---
++      help here...
++
++config SCSI_QLA2XXX_QLA21XX
++      tristate "QLogic QLA21xx FC-SCSI support (v8)"
++      depends on SCSI_QLA2XXX
++      ---help---
++      help here...
++
++      If you want to compile the driver as a module ( = code which can be
++      inserted in and removed from the running kernel whenever you want),
++      say M here and read <file:Documentation/modules.txt>.  The module
++      will be called qla2100.
++
++config SCSI_QLA2XXX_QLA22XX
++      tristate "QLogic QLA22xx FC-SCSI support (v8)"
++      depends on SCSI_QLA2XXX
++      ---help---
++      help here...
++
++      If you want to compile the driver as a module ( = code which can be
++      inserted in and removed from the running kernel whenever you want),
++      say M here and read <file:Documentation/modules.txt>.  The module
++      will be called qla2200.
++
++config SCSI_QLA2XXX_QLA23XX
++      tristate "QLogic QLA23xx FC-SCSI support (v8)"
++      depends on SCSI_QLA2XXX
++      ---help---
++      help here...
++
++      If you want to compile the driver as a module ( = code which can be
++      inserted in and removed from the running kernel whenever you want),
++      say M here and read <file:Documentation/modules.txt>.  The module
++      will be called qla2300.
+--- /dev/null  Thu Apr 11 07:25:15 2002
++++ linux-2.5.73-n9560/drivers/scsi/qla2xxx/Makefile   Thu Jul  3 15:34:42 2003
+@@ -0,0 +1,56 @@
++# Kernel makefile for 8.x series QLogic Fibre Channel driver.
++#
++EXTRA_CFLAGS += -Idrivers/scsi -I$(obj) -DUNIQUE_FW_NAME
++
++ISPTYPES := qla2100 qla2200 qla2300
++ISPDIRS := $(foreach dir, $(ISPTYPES), $(addsuffix /, $(addprefix .,$(dir))))
++
++ISP2100_FW := ql2100tp_fw.o
++ISP2200_FW := ql2200ip_fw.o
++ISP2300_FW := ql2300tpx_fw.o #ql2322tpx_fw.o
++
++COMMON_SRCS := qla_os.c qla_init.c qla_mbx.c qla_iocb.c qla_isr.c qla_xioct.c qla_inioct.c \
++              qla_dbg.c qla_sup.c qla_fo.c qla_cfg.c qla_cfgln.c qla_vendor.c
++COMMON_OBJS := $(foreach file, $(COMMON_SRCS), $(patsubst %.c, %.o, $(file)))
++
++ISP2100_DIR_SRCS := $(foreach file, $(COMMON_SRCS), $(addprefix .qla2100/,$(file)))
++ISP2100_DIR_OBJS := $(foreach file, $(COMMON_OBJS), $(addprefix .qla2100/,$(file)))
++ISP2200_DIR_SRCS := $(foreach file, $(COMMON_SRCS), $(addprefix .qla2200/,$(file)))
++ISP2200_DIR_OBJS := $(foreach file, $(COMMON_OBJS), $(addprefix .qla2200/,$(file)))
++ISP2300_DIR_SRCS := $(foreach file, $(COMMON_SRCS), $(addprefix .qla2300/,$(file)))
++ISP2300_DIR_OBJS := $(foreach file, $(COMMON_OBJS), $(addprefix .qla2300/,$(file)))
++
++PREPALL := $(shell for dir in $(ISPDIRS) ; \
++      do \
++              if [ ! -d $(obj)/$${dir} ] ; then \
++                      mkdir $(obj)/$${dir} ; \
++              fi ; \
++              for link in $(foreach file, $(COMMON_OBJS), $(patsubst %.o, %.c, $(file))) ; \
++              do \
++                      if [ ! -h $(obj)/$${dir}$${link} ] ; then \
++                              ln -sf ../$${link} $(obj)/$${dir}$${link} ; \
++                      fi ; \
++              done \
++      done)
++
++obj-$(CONFIG_SCSI_QLA2XXX_QLA21XX) += qla2100.o
++obj-$(CONFIG_SCSI_QLA2XXX_QLA22XX) += qla2200.o
++obj-$(CONFIG_SCSI_QLA2XXX_QLA23XX) += qla2300.o
++
++$(obj)/qla2100.o: $(PREPALL)
++$(obj)/qla2100.o: ISPTYPE := qla21xx
++$(obj)/qla2100.o: EXTRA_CFLAGS += -D$(ISPTYPE)
++
++$(obj)/qla2200.o: $(PREPALL)
++$(obj)/qla2200.o: ISPTYPE := qla22xx
++$(obj)/qla2200.o: EXTRA_CFLAGS += -D$(ISPTYPE)
++
++$(obj)/qla2300.o: $(PREPALL)
++$(obj)/qla2300.o: ISPTYPE := qla23xx
++$(obj)/qla2300.o: EXTRA_CFLAGS += -D$(ISPTYPE) -DTPX -DEXTENDED_IDS 
++
++qla2100-objs := $(ISP2100_DIR_OBJS) $(ISP2100_FW) 
++qla2200-objs := $(ISP2200_DIR_OBJS) $(ISP2200_FW) 
++qla2300-objs := $(ISP2300_DIR_OBJS) $(ISP2300_FW) 
++
++clean-files := $(ISP2100_DIR_SRCS) $(ISP2200_DIR_SRCS) $(ISP2300_DIR_SRCS)
+--- /dev/null  Thu Apr 11 07:25:15 2002
++++ linux-2.5.73-n9560/drivers/scsi/qla2xxx/README.qla2x00     Thu Jul  3 15:34:42 2003
+@@ -0,0 +1,744 @@
++                 QLogic Fibre Channel Driver
++     for Red Hat Linux 7.2, 7.3, and Advanced Server 2.1
++             and Suse Linux 7.3, and Enterprise 7
++
++Products supported: QLA22XX, QLA23XX
++
++09/10/2002
++
++Contents
++--------
++
++1. OS Support
++
++2. Supported Features
++
++3. Release History
++
++4. Saving the Driver Source to Diskette
++
++5. Installing the Driver
++
++   5.1  Building the driver from the Source
++   5.1.1. Building a Uni-Processor (UP) version of the driver
++   5.1.2. Building a Symmetric Multi-Processor(SMP) version of the
++          Driver
++   5.2  Load the Driver Manually using INSMOD or MODPROBE
++   5.3  Making a RAMDISK Image to Load the Driver
++
++6. Driver Parameters
++
++   6.1  System Parameters
++   6.1.1  Multiple LUN Support
++   6.2  NVRAM Parameters
++   6.3  Driver Command Line Parameters
++
++7. Limitations
++
++8. Additional Notes
++
++   8.1 Proc Filesystem Support
++   8.2 Co-existence of QLogic 4.x and 6.x Linux Drivers
++   8.3 Failover Support 
++   8.3.1 How to enable the  Failover support in the Driver
++   8.3.2 Using SANsurfer with QLA2XXX Driver the First Time
++   8.3.3 Configuration Changes Made via SANsurfer
++   8.4 Persistent Binding     
++
++9. Diskette Content
++
++10. Contacting QLogic
++
++
++**********************************************************************
++
++
++1. OS Support 
++-------------
++
++This driver works with Red Hat Linux 7.2, 7.3, and Advanced Server 
++2.1 and Suse Linux 7.3 and Enterprise 7. Earlier or later versions 
++of Linux may be supported but were not tested at the time of this 
++release. Refer to the SUPPORTED_KERNEL_VERSION.txt file for a list
++of kernel versions tested with this release.
++
++
++**********************************************************************
++
++
++2. Supported Features
++---------------------
++
++* FCAL - direct attach loop
++* Point-to-point
++* Fabric support
++* Initiator mode only
++* Fault recovery on down loops
++* Persistent binding 
++* Extended LUN support up to 255 LUNs
++* FC tape support
++* IPFC support
++* Non Failover and Failover capability
++
++
++**********************************************************************
++
++
++3. Release History
++------------------
++
++Please refer to Release Notes (release.txt).
++
++
++**********************************************************************
++
++
++4. Saving the Driver Source to Diskette
++---------------------------------------
++
++1. Download the failover or non-failover qla2x00src-vx.yy-*.tgz file 
++   from QLogic's website.
++
++   * Failover compressed file has suffix "fo" while non failover 
++     does not.                
++
++2. If prompted "What would you like to do with this file?" choose 
++   "Save this file to disk."
++3. Insert a blank diskette and download to the diskette directly.
++
++
++**********************************************************************
++
++
++5. Installing the Driver 
++------------------------
++
++NOTE: Refer to the file BUILD_KERNEL.txt for instructions on how 
++      to build a custom kernel with the QLogic Driver embedded.
++
++5.1  Building a Driver from the Source Code 
++-------------------------------------------
++
++From the source code, you can build a qla2200.o or qla2300.o for
++your UP or SMP system, and load the driver manually or automatically
++using a RAMDISK image during system boot time.
++
++
++5.1.1 Building a Uni-Processor (UP) Version of the Driver
++---------------------------------------------------------
++
++1. Extract the kernel-headers and kernel-sources RPM files from the 
++   first RedHat CD:
++
++       # cd /mnt/cdrom/RedHat/RPMS
++       # rpm -iv kernel-headers*.rpm (not required for Red Hat 7.3)
++       # rpm -iv kernel-source*.rpm
++
++2. Using the diskette you created in Section 4, copy the
++   qla2x00src-vx.yy-*.tgz file to /qla2x00. Follow these steps from
++   the "/" (root) directory:
++
++       # mkdir qla2x00
++       # cd qla2x00
++       # mount /mnt/floppy
++       # cp /mnt/floppy/*.tgz . (the period at the end is required)
++       # tar -xvzf *.tgz
++       # cd qlogic
++       # ./drvsetup (this will extract the source files in to the 
++                     current directory)
++
++3. Build the Driver qla2200.o and qla2300.o from the source code by
++   typing:
++
++       # make all
++
++   For SuSE Distribution:
++      
++       # make all OSVER=linux
++
++4. To load the driver manually, see section 5.2. To make a RAMDISK
++   image to load the driver during system boot time, see section 5.3.
++
++
++5.1.2. Building a Symmetric Multi-Processor (SMP) Version of the Driver
++-----------------------------------------------------------------------
++
++1. Extract the kernel-headers and kernel-source RPM files from the 
++   first RedHat CD:
++
++       # cd /mnt/cdrom/RedHat/RPMS
++       # rpm -iv kernel-headers*.rpm (not required for Red Hat 7.3)
++       # rpm -iv kernel-source*.rpm
++
++2. Using the diskette you created in Section 4, copy the
++   qla2x00src-vx.yy-*.tgz file to /qla2x00. Follow these steps from
++   the "/" (root) directory:
++
++       # mkdir qla2x00
++       # cd qla2x00
++       # mount /mnt/floppy
++       # cp /mnt/floppy/*.tgz . (the period at the end is required)
++       # tar -xvzf *.tgz
++       # cd qlogic
++       # ./drvsetup (this will extract the source files in to the
++                     current directory)
++
++3. Build the Driver qla2200.o and qla2300.o from the source code by
++   typing:
++
++       # make all SMP=1
++
++   For SuSE Distribution:
++      
++       # make all SMP=1 OSVER=linux
++
++4. To load the driver manually, see section 5.2. To make a RAMDISK 
++   image to load the driver during system boot time, see section 5.3.
++
++
++5.2  Load the Driver Manually using INSMOD or MODPROBE
++------------------------------------------------------
++
++Before loading the driver manually, first build the driver binary from
++the driver source files as described in sections 5.1.1 and 5.1.2.
++
++- To load the driver directly from the local build directory, type
++  the following:
++
++       # insmod qla2200.o
++               or
++       # insmod qla2300.o        
++
++- To load the driver using modprobe:
++
++       1. Build the driver qla2200.o and qla2300.o from the source
++          code by typing:
++
++          # make all install
++
++        For SuSE Distribution:
++      
++                # make all OSVER=linux install
++
++       2. To ensure that the older driver binary included in the
++          original distribution does not interfere with the updated
++          version, please rename the old driver binary as follows:
++
++          # cd /lib/modules/<kernel_version>/kernel/drivers/addon/qla2200
++          # mv qla2200.o qla2200_rh.o
++          # mv qla2300.o qla2300_rh.o
++
++       3. Type the following to load the Driver:
++
++          # modprobe qla2200
++                  or
++          # modprobe qla2300
++
++
++5.3  Making a RAMDISK Image to Load the Driver
++----------------------------------------------
++
++1. Build the Driver binary files (see 5.1.1 and 5.1.2).
++
++2. Copy the files to:
++
++     /lib/modules/<kernel version>/kernel/drivers/scsi/
++
++
++NOTE:  To ensure that the older Driver binary included in the original
++       distribution does not interfere with the updated version, 
++       please rename the old Driver binary as follows:
++
++       # cd /lib/modules/<kernel_version>/kernel/drivers/addon/qla2200
++       # mv qla2200.o qla2200_rh.o
++       # mv qla2300.o qla2300_rh.o
++
++3. Add the following line to /etc/modules.conf.
++
++       alias scsi_hostadapter0 qla2200
++              or
++       alias scsi_hostadapter0 qla2300
++
++NOTE: Must add one entry for each HBA in the system. For example,
++      If two QLA2200 hbas are installed add the following:
++
++      alias scsi_hostadapter0 qla2200
++      alias scsi_hostadapter1 qla2200
++
++4. Type the following command:
++
++         # mkinitrd -f <ramdisk image file name> <kernel version>
++
++NOTE: This step will overwrite the original ramdisk image file if 
++      executed within the /boot directory. Specify a unique ramdisk
++      image name to preserve the original ramdisk image.
++
++       - Copy the file to /boot.
++
++   For SuSE Distribution:
++
++       - Type the following command:
++
++         # /sbin/mk_initrd
++
++       NOTE: By default, the RAMDISK images created are:
++
++         /boot/initrd
++         /boot/initrd.suse
++
++5. Configure the boot loader with the new RAMDISK image.  
++
++   For LILO:
++
++      Add "initrd=/boot/<ramdisk file name>" in 
++      /etc/lilo.conf under one of the kernel entries 
++      to use the RAMDISK image.
++  
++      Run "lilo" and reboot system. Select the kernel 
++      with the new RAMDISK image to come up.
++
++   For GRUB:
++
++      Add "initrd=/boot/<RAMDISK file name>" in 
++      /etc/grub.conf under one of the kernel entries 
++      to use the RAMDISK image.
++
++**********************************************************************
++
++
++6. Driver Parameters
++--------------------
++
++The Driver parameters are divided into System Parameters and NVRAM 
++Parameters sections.
++
++
++6.1  System Parameters
++----------------------
++
++6.1.1  Multiple LUN Support
++--------------------------
++
++Support for multiple LUNs can be configured in one of three ways. 
++Currently, the maximum number of LUNs that can be scanned for each
++device is 128.
++
++The kernel must be configured to have multiple LUN support enabled
++in order for non-zero LUNs to be configured and accessible.  Use
++"make menuconfig" (as described in step 6, section 5.1) to build a
++kernel which has the option under SCSI Support enabled to probe all
++LUNs on SCSI devices.
++
++
++NOTE:  If you have multiple adapters, set max_scsi_luns to the
++       largest number of LUNs supported by any one of these adapters.
++
++- To configure multiple LUN support during boot time, type the 
++following at the boot prompt:
++
++boot: linux max_scsi_luns=128
++
++- If the SCSI Mid-Layer is compiled as a module, add the following
++line to the /etc/modules.conf file to scan for multiple LUNs at
++each boot:
++
++options scsi_mod max_scsi_luns=128
++
++- If the SCSI Mid-Layer is not compiled as a module, the boot loader
++can be configured to scan for multiple LUNs each time the system
++boots.
++
++For LILO, perform the following steps:
++
++a) Add the following line to each of the kernel images listed in the
++   /etc/lilo.conf file:
++
++append="max_scsi_luns=128"
++
++b) Run "lilo" and reboot the system.
++
++For GRUB, perform the following steps:
++
++a) Append the max_scsi_luns parameters to each of the kernel images 
++listed in the /etc/grub.conf file. For example:
++
++kernel /vmlinux-2.4.7-10 ro root=/dev/hda2 max_scsi_luns=128
++
++b) Reboot the system.
++
++
++6.2  NVRAM Parameters
++---------------------
++
++The NVRAM features described below are hard-coded in the Driver. The 
++changes made for the particular NVRAM feature in the Fast!Util do not
++take effect unless otherwise noted.
++
++None.
++
++
++6.3  Driver Command Line Parameters
++-----------------------------------
++
++'verbose' and 'quiet' are the available command line options.
++
++ verbose - Verbose detail debug information
++
++ quiet   - Driver does not display:
++              Waiting for LIP to complete....
++              scsi%d: Topology - %s, Host Loop address 0x%x
++              scsi(%d): LIP occurred
++              scsi(%d): LIP reset occurred
++
++ Usage examples:
++
++           # insmod qla2200.o options = verbose
++           # insmod qla2300.o options = verbose
++           # insmod qla2200.o ql2xopts = quiet
++           # insmod qla2300.o ql2xopts = quiet
++
++
++**********************************************************************
++
++
++7. Limitations
++--------------
++
++      N/A
++ 
++
++**********************************************************************
++
++
++8. Additional Notes
++---------------------
++
++
++8.1  Proc Filesystem Support
++-----------------------------
++
++The /proc filesystem for the QLA2200 and QLA2300 driver can be found
++in the /proc/scsi/qla2200/ and /proc/scsi/qla2300/ directories. These 
++directories contain a file for each QLogic Fibre Channel adapter
++in the system. Each file will present information about the adapter
++and transfer statistics for each discovered LUN.
++
++
++8.2  Co-existence of QLogic 4.x and 6.x Linux Drivers
++-----------------------------------------------------
++
++The 4.x driver provides support for QLA2100, QLA2200, and QLA23xx.
++The 6.x driver supports the QLA2200 and QLA23xx only. To make the
++drivers "co-exist", perform the following:
++
++  Option 1.  4.x support for QLA2100
++             6.x support for QLA2200 and QLA23xx
++
++       o Remove QLA2200/QLA2300/QLA2312 support from the 4.x series
++           driver:
++
++       - Edit the qla2x00.c file
++
++       - Look for the following line:
++
++              {"QLA2300 ", QLA2300_DEVICE_ID,           MAX_BUSES,
++
++         OR
++
++              {"QLA2312 ", QLA2312_DEVICE_ID,           MAX_BUSES,
++
++       - Above the found line, add this line:
++
++               #if 0
++
++       - The resulting lines should read as:
++
++               #if 0
++               {"QLA2300 ", QLA2300_DEVICE_ID,           MAX_BUSES,
++
++         OR
++
++               #if 0
++               {"QLA2312 ", QLA2312_DEVICE_ID,           MAX_BUSES,
++
++       - Look for the following line:
++
++               {"QLA2100 ", QLA2100_DEVICE_ID,           MAX_BUSES,
++
++       - Above the found line, add this line:
++
++               #endif
++
++       - The resulting lines should read as:
++
++               #endif
++               {"QLA2100 ", QLA2100_DEVICE_ID,           MAX_BUSES,
++
++  Option 2.  4.x support for QLA2100 and QLA2200
++             6.x support for QLA23xx
++
++         o Remove QLA2300/QLA2312 support from the 4.x series driver:
++
++       - Edit the qla2x00.c file
++
++       - Look for the following line:
++
++              {"QLA2300 ", QLA2300_DEVICE_ID,           MAX_BUSES,
++
++         OR
++
++              {"QLA2312 ", QLA2312_DEVICE_ID,           MAX_BUSES,
++
++       - Above the found line, add this line:
++
++               #if 0
++
++       - The resulting lines should read as:
++
++               #if 0
++               {"QLA2300 ", QLA2300_DEVICE_ID,           MAX_BUSES,
++
++         OR
++
++               #if 0
++               {"QLA2312 ", QLA2312_DEVICE_ID,           MAX_BUSES,
++
++       - Look for the following line:
++
++               {"QLA2200 ", QLA2200_DEVICE_ID,           MAX_BUSES,
++
++       - Above the found line, add this line:
++
++               #endif
++
++       - The resulting lines should read as:
++
++               #endif
++               {"QLA2200 ", QLA2200_DEVICE_ID,           MAX_BUSES,
++
++
++8.3 Failover Support
++---------------------
++
++8.3.1 How to enable the  Failover support in the Driver
++-------------------------------------------------------
++
++Failover support can be enabled in the QLA2XXX driver by enabling the
++macro MPIO_SUPPORT in qla_settings.h file ie
++
++#define MPIO_SUPPORT                    1
++
++Note: The failover distribution package, qla2x00src-vx.yy.zz-fo.tgz, 
++has the above macro enabled by default.
++
++
++8.3.2 Using SANsurfer with QLA2XXX Driver the First Time
++________________________________________________________
++
++1. To work with SANsurfer, the driver should always be built
++   with MPIO_SUPPORT set to 1 in qla_settings.h.
++
++2. Add the following parameter in modules.conf file:
++
++   options qla2200 ConfigRequired=1 ql2xopts=
++             or
++   options qla2300 ConfigRequired=1 ql2xopts=
++
++3. Now you can load the driver and SANsurfer.
++
++
++8.3.3 Configuration Changes Made via SANsurfer
++--------------------------------------------
++
++1. LUN Masking
++
++   For the new LUN masking configuration to take effect, the
++   driver must be reloaded.  The following is an example of
++   the sequence of actions to take:
++
++   - Load the driver:
++
++     modprobe <driver>
++
++   - Load the qlremote agent.
++
++   - Start the GUI and connect it to the destination system.
++
++   - Make LUN masking changes.
++
++   - Disconnect the host from GUI and stop qlremote agent.
++
++   - Unload the driver:
++
++     modprobe -r <driver>
++
++   - Reload the driver:
++
++     modprobe <driver>
++
++   - Load qlremote agent again.
++
++   - Start the GUI and connect it to the destination system.
++
++   Now you should see the updated LUN masking configuration.
++
++Please note that when using modprobe to load the driver, the
++length of the option line specified in /etc/modules.conf file
++has a limit of 2K characters. Any longer option line will cause
++a string overflow error from modprobe.
++
++
++8.4 Persistent Binding
++______________________
++
++
++The Persistent Binding information consists of some adapter parameter
++entries along with some target entries. However, the Linux entries 
++have been shorten to save space on the command line. Currently, there
++is no limit on the size of the command line when using modprobe. But,
++if you embedded the driver in the kernel you are using lilo that has 
++a string size limitation.
++
++Persistent Binding  can be specified in two ways. Manually or using
++SANsurfer. We recommend using SANsurfer for ease of use. Reference 
++section 8.3.3 for additonal information about SANsurfer. The 
++following is the procedure to manually add persistent binding 
++commands: 
++
++The driver displays the current configuration when the displayConfig
++command line option is specified. The persistent binding 
++configuration is found in /var/log/messages file. It prints the 
++configuration information in the format required by the driver.
++The best way to extract configuration messages is to use grep and 
++direct the output to a file. You need to remove the Linux timestamp at
++the beginning of each message and combine them together on single line.
++For example
++        #insmod qla2200 displayConfig=1
++        #grep "scsi-qla" /var/log/messages > /tmp/info.cfg
++
++The format of the persistent binding commands is as follows: 
++
++Device descriptions
++
++scsi-qla<#>-adapter-port=<adapter port name value>;
++The designated by qla<#>, where the <#> is the adapter instance number.
++
++The parameter specifies the FC port name to be used for the adapter.
++where <adapter port name value> is the FC port name value in hexa-
++    decimal format.  If this entry is not specified in the conf file,
++    the default value is the adapter's port name as saved in the NVRAM.
++Example:
++scsi-qla00-adapter-port=210000e08b01158d\;
++
++host adapter instance 0 has a portname of 210000e08b01158d
++
++scsi-qla<#1>-tgt-<#2>-di-<#3>-node=<device FC name>;
++This parameter associates the specified <device FC name> with the
++SCSI target ID value specified by <#2> and a device id value specified
++by <#3>. where <device FC name> type is the FC node name of the 
++device, and <#2> is the SCSI target ID to be assigned to the device 
++and <#3> is the device unique id.
++Where
++   <#1>   Specifies the adapter instance number   
++   <#2>   Specifies the SCSI ID of Target
++   <#3>   Specifies the path/device id        
++
++scsi-qla<#1>-tgt-<#2>-di-<#3>-port=<device FC name>;
++This parameter associates the specified <device FC name> with the
++SCSI target ID value specified by <#2> and a device id value specified
++by <#3>. where <device FC name> type is the FC port 
++Where
++   <#1>   Specifies the adapter instance number   
++   <#2>   Specifies the SCSI ID of Target
++   <#3>   Specifies the path/device id        (always 0 for non-failover)
++
++name of the device, and <#2> is the SCSI target ID to be assigned to 
++the device and <#3> is the device unique id.
++
++scsi-qla<#1>-tgt-<#2>-di-<#3>-disabled=<256 bit mask>;
++This parameter associates the specified <256 bit mask> with the
++SCSI target ID value specified by <#2> and a device id value specified
++by <#3>. 
++
++Where
++   <#1>   Specifies the adapter instance number   
++   <#2>   Specifies the SCSI ID of Target
++   <#3>   Specifies the path/device id        
++
++<256 bit mask>
++msb                                                            lsb
++ 000000000000000000000000000000000000000000000000000000000000000F
++
++the mask above will make the first four luns, 3, 2, 1, and 0 of a 
++given Target disabled on that target/path.
++
++This mask specification is heavily type checked to be a sequence of
++64 hex digits.
++
++**********************************************************************
++
++
++9. Diskette Content 
++--------------------
++
++The qla2x00src-vx.yy.zz-*.tgz files can be extracted into the 
++following files:
++
++       listops.h
++       Makefile.kernel
++       Config.in
++       makefile
++       qla_settings.h
++       qla_debug.h
++       ql2100_fw.h
++       ql2200_fw.h
++       ql2300_fw.h
++       ql2200ip_fw.h
++       ql2300ip_fw.h
++       qla2100.c
++       qla2200.c
++       qla2300.c
++       qla2x00.c
++       qla2x00.h
++       qla2x00_ioctl.c
++       qla_vendor.c
++       qla_cfg.c
++       qla_cfgln.c
++       qla_fo.c
++       qla_fo.cfg 
++       qla_inioct.c
++       qla_ip.c
++       qla_mbx.c
++       qla_mbx.h
++       exioctln.h
++       exioct.h
++       inioct.h
++       qla_cfg.h
++       qla_fo.h
++       qla_gbl.h
++       qla_ip.h
++       qlfo.h
++       qlfolimits.h
++       qlfoln.h
++       qla_version.h
++       revision.notes - Revision history
++       release.txt - Release notes
++       README.qla2x00 - This file
++
++
++**********************************************************************
++
++
++10. Contacting QLogic 
++---------------------
++
++Please visit QLogic's website (www.qlogic.com). On this site you will
++find product information, our latest drivers, and links for technical
++assistance if needed.
++
++
++======================================================================
++
++
++    Copyright (c) 2003 QLogic Corporation. All rights reserved 
++    worldwide. 
+--- /dev/null  Thu Apr 11 07:25:15 2002
++++ linux-2.5.73-n9560/drivers/scsi/qla2xxx/exioct.h   Thu Jul  3 15:34:42 2003
+@@ -0,0 +1,947 @@
++/******************************************************************************
++ *                  QLOGIC LINUX SOFTWARE
++ *
++ * QLogic ISP2x00 device driver for Linux 2.5.x
++ * Copyright (C) 2003 Qlogic Corporation
++ * (www.qlogic.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, 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.
++ *
++ ******************************************************************************/
++
++/*
++ * File Name: exioct.h
++ *
++ * San/Device Management Ioctl Header
++ * File is created to adhere to Solaris requirement using 8-space tabs.
++ *
++ * !!!!! PLEASE DO NOT REMOVE THE TABS !!!!!
++ * !!!!! PLEASE NO SINGLE LINE COMMENTS: // !!!!!
++ * !!!!! PLEASE NO MORE THAN 80 CHARS PER LINE !!!!!
++ *
++ * Revision History:
++ *
++ * Rev. 0     March 1, 2000
++ * YPL        - Created.
++ *
++ * Rev. 1     March 2, 2000
++ * RLU        - Updated with latest definitions.  Added more comments.
++ *
++ * Rev. 2     May 16, 2000                
++ * SP - Updated definitions and changed structures (March 27, 2000)
++ * SP   - Addded structures 
++ *
++ * Rev. 3     June 1, 2000                 
++ * THL        - Made major changes to include all changes talked in our meeting.
++ *
++ * Rev. 4     June 5, 2000
++ * RLU        - Added new definitions/structures for SDM_GET_AEN and SDM_REG_AEN 
++ *      functions.
++ *    - Major definition/structure name changes as discussed in meetings.
++ *    - Deleted duplicated command code and structure definitions.
++ *
++ * Rev. 4.1   June 14, 2000
++ * WTR  - Moved Solaris specific defines to exioctso.h. This makes it
++ *      possible for application developers to include only exioct.h
++ *      in their Solaris application development.
++ *
++ * Rev. 4.2   June 15, 2000
++ * THL  - Changed UINT16 and UINT32 back to WORD and DWORD for NT; otherwise,
++ *      NT will get a compilation error for redefining UINT16 and UINT32.
++ *      Added RISC_CODE/FLASH_RAM macros.
++ *
++ * Rev. 4.3   June 22, 2000
++ * THL  - Changed SDM_FC_ADDR according to External Ioctls document.
++ *      Added SDM_DEF_TYPE macros.
++ *
++ * Rev. 4.4   June 22, 2000
++ * THL  - Moved NT specific defines to exioctnt.h.
++ *
++ * Rev. 4.5     August 15, 2000
++ * SP   - Rolled back some changes made by Todd R.
++ *      Kept new status code SDM_STATUS_NO_MEMORY
++ *      Port types fabric and tape device 
++ *
++ * Rev. 4.7     Sep 6, 2000
++ * YPL  - Replace SDM_ with EXT_, _ISP with _CHIP.
++ *      Add vendor specific statuses, device update, config defines.
++ *
++ * Rev. 5.0     Sep 13, 2000
++ * YPL  - Update version to 5, remove max defines, make port type bit.
++ *      Change HBA_PORT_PROPERTY to have bus/target/lun defined as UINT16
++ *
++ * Rev. 5.1     Sep 22, 2000
++ * THL  - Add destination address for specify scsi address or FC address.
++ *      Remove "not support" comment and add more macros.
++ *
++ * Rev. 5.2     Sep 27, 2000
++ * THL  - Add new macros and structure for add and swap target device.
++ *      Create new data structure for get port database.
++ * TLE  - Merge changes needed for FailOver
++ *
++ * Rev. 5.3     Sep 29, 2000
++ * THL  - Add access mode for NVRAM.
++ * 
++ * Rev. 5.4     Oct 03, 2000
++ * THL  - Add EXT_SC_GET_FC_STATISTICS.
++ *
++ * Rev. 5.5   Oct 18, 2000
++ * THL  - Remove duplicated EXT_DEF_ADDR_MODE_32 and EXT_DEF_ADDR_MODE_16.
++ *      Reformat new data structures and defines.
++ *
++ * Rev. 5.6   Oct 19, 2000
++ * RLU        - Changed file name from ExIoct.h to exioct.h.
++ *    - Added definition of EXT_RNID_DATA for API implementation.
++ *    - Reformat some lines to conform to the format agreed
++ *      upon in IOCTL meeting (and mentioned at beginning of
++ *      this file).
++ *
++ * Rev. 5.7 Oct 25, 2000
++ * BN   - Added LUN bitmask structure and macros
++ *
++ * Rev. 5.8 Oct 25, 2000
++ * BN   - Added EXT_CC_DRIVER_PROP define
++ * 
++ * Rev. 5.9 Oct 26, 2000
++ * BN   - Sync with UnixApi project
++ * 
++ * Rev. 5.10 Oct 30, 2000
++ * BN   - Remove not needed #define for EXT_CC_DRIVER_PROP
++ *    - Add EXT_ to IS_LUN_BIT_SET, SET_LUN_BIT, CLR_LUN_BIT
++ * 
++ * Rev. 5.11 Nov 1, 2000
++ * BN   - Increased [1] of EXT_DEVICEDATA to [EXT_MAX_TARGET]
++ * TLE  - Decreased [EXT_MAX_TARGET] of EXT_DEVICEDATA to [1]
++ * 
++ * Rev. 5.12  Nov 7, 2000
++ * RLU        - Deleted EXT_DEF_MAX_LUNS define and changed all references
++ *      to it to use EXT_MAX_LUN.
++ *    - Changed the revision numbers for the last 2 revisions down
++ *      to use 5.x.
++ * 
++ * Rev. 5.13  Nov 14, 2000
++ * WTR        - Fixed pointer referencing problem in the LUN_BIT_MASK macros.
++ *      Updated comment at bit mask definition.
++ *
++ * Rev. 5.14  Dec 6, 2000
++ * THL        - Added Local and LoopID to discovered port/target property.
++ * 
++ * Rev. 5.15  Dec 24, 2000
++ * YPL        - Enhance port connection modes and driver attrib
++ * 
++ * Rev. 5.16  Dec 27, 2000
++ * TLE  - Add BufferHandle member to _EXT_ASYNC_EVENT data structure for
++ *      SCTP support
++ * 
++ * Rev. 5.17  Jan 10, 2001
++ * YPL  - Add edtov, ratov & fabric name in port property
++ * 
++ * Rev. 5.18  Feb 28, 2001
++ * YPL  - Remove SCTP fields and add fabric parameter flags in port property
++ * 
++ * Rev. 5.19  Mar 08, 2001
++ * YPL  - Remove SCTP fields from hba port prop
++ * 
++ * Rev. 5.20  June 11, 2001
++ * YPL  - Change to reserved fields and add fabric name field in port property
++ * 
++ * Rev. 5.21  June 29, 2001
++ * YPL  - Merge in changes decided long time ago (use _DEF_ for defines) &
++ *      reserved some EXT_CC for legacy ioctls, plus add RNID dataformat
++ *      values definition
++ * 
++ * Rev. 5.21    Sep 18, 2001
++ * SP   - Added New return status codes
++ *
++ * Rev.       5.22    Oct 23, 2001
++ * SP - Change reserve fields to add fields to EXT_HBA_PORT
++ *      Added port speeds and FC4Types fields  and related definitions
++ *
++ * Rev.       5.23    Dec 04, 2001
++ * RL - Added port speed value definition.
++ *
++ * Rev. 5.24  Jan 20, 2002
++ * JJ - Added PCI device function bits field in EXT_CHIP structure.
++ *
++ * Rev. 5.25  Feb 04, 2002
++ * JJ - Added 16 bytes CDB support.  Also added SenseLength field
++ *      in SCSI_PASSTHRU structure.
++ *
++ * Rev. 5.26  Feb 12, 2002
++ * AV - Changed type size used in SCSI_PASSTHRU structure definitions
++ *      to re-enable gcc's automatic structure padding for backward
++ *      compatibility.
++ *
++ * Rev. 5.27  Mar 01, 2002
++ * RL - Added new SC value for SCSI3 command passthru.
++ *
++ * Rev. 5.28  Dec 09, 2002
++ * Sync up with NT version of exioct.h:
++ * TLE        - Modify EXT_RNID_REQ data structure for IBM SendRNID workaround
++ * YPL        - Add firmware state (online diagnostics)
++ * YPL        - Add ELS PS
++ * YPL        - Add els event, # of els buffers & size
++ */
++
++#ifndef       _EXIOCT_H
++#define       _EXIOCT_H
++
++/*
++ * NOTE: the following version defines must be updated each time the
++ *     changes made may affect the backward compatibility of the
++ *     input/output relations of the SDM IOCTL functions.
++ */
++#define       EXT_VERSION                                     5
++
++
++/*
++ * OS independent General definitions
++ */
++#define       EXT_DEF_SIGNATURE_SIZE                          8
++#define       EXT_DEF_WWN_NAME_SIZE                           8
++#define       EXT_DEF_WWP_NAME_SIZE                           8
++#define       EXT_DEF_SERIAL_NUM_SIZE                         4
++#define       EXT_DEF_PORTID_SIZE                             4
++#define       EXT_DEF_PORTID_SIZE_ACTUAL                      3
++#define       EXT_DEF_MAX_STR_SIZE                            128
++#define       EXT_DEF_SCSI_PASSTHRU_CDB_LENGTH                16
++
++#define       EXT_DEF_ADDR_MODE_32                            1
++#define       EXT_DEF_ADDR_MODE_64                            2
++
++/*
++ * ***********************************************************************
++ * X OS type definitions
++ * ***********************************************************************
++ */
++#ifdef _MSC_VER                                               /* NT */
++
++#pragma pack(1)
++#include "ExIoctNT.h"
++
++#elif defined(linux)                                  /* Linux */
++
++#include "exioctln.h"
++
++#elif defined(sun) || defined(__sun)                  /* Solaris */
++
++#include "exioctso.h"
++
++#endif
++
++/*
++ * ***********************************************************************
++ * OS dependent General configuration defines
++ * ***********************************************************************
++ */
++#define       EXT_DEF_MAX_HBA                 EXT_DEF_MAX_HBA_OS
++#define       EXT_DEF_MAX_BUS                 EXT_DEF_MAX_BUS_OS
++#define       EXT_DEF_MAX_TARGET              EXT_DEF_MAX_TARGET_OS
++#define       EXT_DEF_MAX_LUN                 EXT_DEF_MAX_LUN_OS
++
++/*
++ * ***********************************************************************
++ * Common header struct definitions for San/Device Mgmt
++ * ***********************************************************************
++ */
++typedef struct {
++      UINT64    Signature;                    /* 8 chars string */
++      UINT16    AddrMode;                     /* 2 */
++      UINT16    Version;                      /* 2 */
++      UINT16    SubCode;                      /* 2 */
++      UINT16    Instance;                     /* 2 */
++      UINT32    Status;                       /* 4 */
++      UINT32    DetailStatus;                 /* 4 */
++      UINT32    Reserved1;                    /* 4 */
++      UINT32    RequestLen;                   /* 4 */
++      UINT32    ResponseLen;                  /* 4 */
++      UINT64    RequestAdr;                   /* 8 */
++      UINT64    ResponseAdr;                  /* 8 */
++      UINT16    HbaSelect;                    /* 2 */
++      UINT16    VendorSpecificStatus[11];     /* 22 */
++      UINT64    VendorSpecificData;           /* 8 chars string */
++} EXT_IOCTL, *PEXT_IOCTL;                     /* 84 / 0x54 */
++
++/*
++ * Addressing mode used by the user application
++ */
++#define       EXT_ADDR_MODE                   EXT_ADDR_MODE_OS
++
++/*
++ * Status.  These macros are being used for setting Status field in
++ * EXT_IOCTL structure.
++ */
++#define       EXT_STATUS_OK                           0
++#define       EXT_STATUS_ERR                          1
++#define       EXT_STATUS_BUSY                         2
++#define       EXT_STATUS_PENDING                      3
++#define       EXT_STATUS_SUSPENDED                    4
++#define       EXT_STATUS_RETRY_PENDING                5
++#define       EXT_STATUS_INVALID_PARAM                6
++#define       EXT_STATUS_DATA_OVERRUN                 7
++#define       EXT_STATUS_DATA_UNDERRUN                8
++#define       EXT_STATUS_DEV_NOT_FOUND                9
++#define       EXT_STATUS_COPY_ERR                     10
++#define       EXT_STATUS_MAILBOX                      11
++#define       EXT_STATUS_UNSUPPORTED_SUBCODE          12
++#define       EXT_STATUS_UNSUPPORTED_VERSION          13
++#define       EXT_STATUS_MS_NO_RESPONSE               14
++#define       EXT_STATUS_SCSI_STATUS                  15
++#define       EXT_STATUS_BUFFER_TOO_SMALL             16
++#define       EXT_STATUS_NO_MEMORY                    17
++#define       EXT_STATUS_UNKNOWN                      18
++#define       EXT_STATUS_UNKNOWN_DSTATUS              19
++#define       EXT_STATUS_INVALID_REQUEST              20
++
++#define EXT_STATUS_DEVICE_NOT_READY           21
++#define EXT_STATUS_DEVICE_OFFLINE             22
++#define EXT_STATUS_HBA_NOT_READY              23
++#define EXT_STATUS_HBA_QUEUE_FULL             24
++
++/*
++ * Detail Status contains the SCSI bus status codes.
++ */
++
++#define       EXT_DSTATUS_GOOD                        0x00
++#define       EXT_DSTATUS_CHECK_CONDITION             0x02
++#define       EXT_DSTATUS_CONDITION_MET               0x04
++#define       EXT_DSTATUS_BUSY                        0x08
++#define       EXT_DSTATUS_INTERMEDIATE                0x10
++#define       EXT_DSTATUS_INTERMEDIATE_COND_MET       0x14
++#define       EXT_DSTATUS_RESERVATION_CONFLICT        0x18
++#define       EXT_DSTATUS_COMMAND_TERMINATED          0x22
++#define       EXT_DSTATUS_QUEUE_FULL                  0x28
++
++/*
++ * Detail Status contains the needed Response buffer space(bytes)
++ * when Status = EXT_STATUS_BUFFER_TOO_SMALL
++ */
++
++
++/*
++ * Detail Status contains one of the following codes
++ * when Status = EXT_STATUS_INVALID_PARAM or
++ *             = EXT_STATUS_DEV_NOT_FOUND
++ */
++#define EXT_DSTATUS_NOADNL_INFO                       0x00
++#define EXT_DSTATUS_HBA_INST                  0x01
++#define EXT_DSTATUS_TARGET                    0x02
++#define EXT_DSTATUS_LUN                               0x03
++#define EXT_DSTATUS_REQUEST_LEN                       0x04
++#define EXT_DSTATUS_PATH_INDEX                        0x05
++
++/*
++ * Currently supported DeviceControl / ioctl command codes
++ */
++#define       EXT_CC_QUERY                    EXT_CC_QUERY_OS
++#define       EXT_CC_SEND_FCCT_PASSTHRU       EXT_CC_SEND_FCCT_PASSTHRU_OS
++#define       EXT_CC_REG_AEN                  EXT_CC_REG_AEN_OS
++#define       EXT_CC_GET_AEN                  EXT_CC_GET_AEN_OS
++#define       EXT_CC_SEND_ELS_RNID            EXT_CC_SEND_ELS_RNID_OS
++#define       EXT_CC_SEND_SCSI_PASSTHRU       EXT_CC_SCSI_PASSTHRU_OS
++#define       EXT_CC_SEND_ELS_PASSTHRU        EXT_CC_SEND_ELS_PASSTHRU_OS
++
++/*
++ * HBA port operations
++ */
++#define       EXT_CC_GET_DATA                 EXT_CC_GET_DATA_OS
++#define       EXT_CC_SET_DATA                 EXT_CC_SET_DATA_OS
++
++
++/* Reserved command codes. */
++#define       EXT_CC_RESERVED0A               EXT_CC_RESERVED0A_OS    
++#define       EXT_CC_RESERVED0B               EXT_CC_RESERVED0B_OS    
++#define       EXT_CC_RESERVED0C               EXT_CC_RESERVED0C_OS    
++#define       EXT_CC_RESERVED0D               EXT_CC_RESERVED0D_OS    
++#define       EXT_CC_RESERVED0E               EXT_CC_RESERVED0E_OS    
++#define       EXT_CC_RESERVED0F               EXT_CC_RESERVED0F_OS    
++#define       EXT_CC_RESERVED0G               EXT_CC_RESERVED0G_OS    
++#define       EXT_CC_RESERVED0H               EXT_CC_RESERVED0H_OS    
++#define       EXT_CC_RESERVED0I               EXT_CC_RESERVED0I_OS
++#define       EXT_CC_RESERVED0J               EXT_CC_RESERVED0J_OS
++#define       EXT_CC_RESERVED0Z               EXT_CC_RESERVED0Z_OS
++
++
++/*
++ * ***********************************************************************
++ * EXT_IOCTL SubCode definition.
++ * These macros are being used for setting SubCode field in EXT_IOCTL
++ * structure.
++ * ***********************************************************************
++ */
++
++/*
++ * Query.
++ * Uses with EXT_QUERY as the ioctl code.
++ */
++#define       EXT_SC_QUERY_HBA_NODE           1
++#define       EXT_SC_QUERY_HBA_PORT           2
++#define       EXT_SC_QUERY_DISC_PORT          3
++#define       EXT_SC_QUERY_DISC_TGT           4
++#define       EXT_SC_QUERY_DISC_LUN           5       /* Currently Not Supported */
++#define       EXT_SC_QUERY_DRIVER             6
++#define       EXT_SC_QUERY_FW                 7
++#define       EXT_SC_QUERY_CHIP               8
++
++/*
++ * Sub codes for Get Data.
++ * Use in combination with EXT_GET_DATA as the ioctl code
++ */
++/* 1 - 99 Common */
++#define       EXT_SC_GET_SCSI_ADDR            1       /* Currently Not Supported */
++#define       EXT_SC_GET_ERR_DETECTIONS       2       /* Currently Not Supported */
++#define       EXT_SC_GET_STATISTICS           3
++#define       EXT_SC_GET_BUS_MODE             4       /* Currently Not Supported */
++#define       EXT_SC_GET_DR_DUMP_BUF          5       /* Currently Not Supported */
++#define       EXT_SC_GET_RISC_CODE            6       /* Currently Not Supported */
++#define       EXT_SC_GET_FLASH_RAM            7       /* for backward compatible */
++
++/* 100 - 199 FC_INTF_TYPE */
++#define       EXT_SC_GET_LINK_STATUS          101     /* Currently Not Supported */
++#define       EXT_SC_GET_LOOP_ID              102     /* Currently Not Supported */
++#define       EXT_SC_GET_LUN_BITMASK          103
++#define       EXT_SC_GET_PORT_DATABASE        104     /* Currently Not Supported */
++#define       EXT_SC_GET_PORT_DATABASE_MEM    105     /* Currently Not Supported */
++#define       EXT_SC_GET_PORT_SUMMARY         106
++#define       EXT_SC_GET_POSITION_MAP         107
++#define       EXT_SC_GET_RETRY_CNT            108     /* Currently Not Supported */
++#define       EXT_SC_GET_RNID                 109     
++#define       EXT_SC_GET_RTIN                 110     /* Currently Not Supported */
++#define       EXT_SC_GET_FC_LUN_BITMASK       111
++#define       EXT_SC_GET_FC_STATISTICS        112     /* for backward compatible */
++
++/* 200 - 299 SCSI_INTF_TYPE */
++#define       EXT_SC_GET_SEL_TIMEOUT          201     /* Currently Not Supported */
++
++
++/* 
++ * Sub codes for Set Data.
++ * Use in combination with EXT_SET_DATA as the ioctl code
++ */
++/* 1 - 99 Common */
++#define       EXT_SC_RST_STATISTICS           3
++#define       EXT_SC_RESERVED_BC7             7
++
++/* 100 - 199 FC_INTF_TYPE */
++#define       EXT_SC_SET_LUN_BITMASK          103
++#define       EXT_SC_SET_RNID                 109     
++#define       EXT_SC_SET_FC_LUN_BITMASK       111
++#define       EXT_SC_RESERVED_BC112   112
++#define       EXT_SC_RESERVED_BC113   113
++
++/* 200 - 299 SCSI_INTF_TYPE */
++
++/* SCSI passthrough */
++#define       EXT_SC_SEND_SCSI_PASSTHRU       0
++#define       EXT_SC_SEND_FC_SCSI_PASSTHRU    1
++#define       EXT_SC_SCSI3_PASSTHRU           2
++
++/* Read */
++
++/* Write */
++
++/* Reset */
++
++/* Request struct */
++
++
++/*
++ * Response struct
++ */
++typedef struct _EXT_HBA_NODE {
++      UINT8     WWNN         [EXT_DEF_WWN_NAME_SIZE]; /* 8 */
++      UINT8     Manufacturer [EXT_DEF_MAX_STR_SIZE];  /* 128; "QLOGIC" */
++      UINT8     Model        [EXT_DEF_MAX_STR_SIZE];  /* 128; "QLA2200" */
++      UINT8     SerialNum    [EXT_DEF_SERIAL_NUM_SIZE];/* 4;  123  */
++      UINT8     DriverVersion[EXT_DEF_MAX_STR_SIZE];  /* 128; "7.4.3" */
++      UINT8     FWVersion    [EXT_DEF_MAX_STR_SIZE];  /* 128; "2.1.6" */
++
++      /* The following field is currently not supported */
++      UINT8     OptRomVersion[EXT_DEF_MAX_STR_SIZE];  /* 128; "1.44" */
++
++      UINT16    PortCount;                            /* 2; 1 */
++      UINT16    InterfaceType;                        /* 2; FC/SCSI */
++
++      /* The following two fields are not yet supported */
++      UINT32    DriverAttr;                           /* 4 */
++      UINT32    FWAttr;                               /* 4 */
++
++      UINT32    Reserved[8];                          /* 32 */
++} EXT_HBA_NODE, *PEXT_HBA_NODE;                               /* 696 */
++
++/* HBA node query interface type */
++#define       EXT_DEF_FC_INTF_TYPE                    1
++#define       EXT_DEF_SCSI_INTF_TYPE                  2
++
++typedef struct _EXT_HBA_PORT {
++      UINT8     WWPN[EXT_DEF_WWN_NAME_SIZE];  /* 8 */
++      UINT8     Id  [EXT_DEF_PORTID_SIZE];    /* 4; 3 bytes valid Port Id. */
++      UINT16    Type;                         /* 2; Port Type */
++      UINT16    State;                        /* 2; Port State */
++      UINT16    Mode;                         /* 2 */
++      UINT16    DiscPortCount;                /* 2 */
++      UINT16    DiscPortNameType;             /* 2; USE_NODE_NAME or */
++                                              /* USE_PORT_NAME */
++      UINT16    DiscTargetCount;              /* 2 */
++      UINT16    Bus;                          /* 2 */
++      UINT16    Target;                       /* 2 */
++      UINT16    Lun;                          /* 2 */
++                                              /* 2 */
++      UINT8     PortSupportedFC4Types;
++      UINT8     PortActiveFC4Types;
++      UINT8     FabricName[EXT_DEF_WWN_NAME_SIZE];    /* 8 */
++
++                                              /* 2*/
++      UINT8     PortSupportedSpeed;
++      UINT8     PortSpeed;
++      UINT16    Unused;                       /* 2 */
++      UINT32    Reserved[3];                  /* 12 */
++} EXT_HBA_PORT, *PEXT_HBA_PORT;                       /* 56 */
++
++/* port type */
++#define       EXT_DEF_INITIATOR_DEV           1
++#define       EXT_DEF_TARGET_DEV              2
++#define       EXT_DEF_TAPE_DEV                4
++#define       EXT_DEF_FABRIC_DEV              8
++
++
++/* HBA port state */
++#define       EXT_DEF_HBA_OK                  0
++#define       EXT_DEF_HBA_SUSPENDED           1
++#define       EXT_DEF_HBA_LOOP_DOWN           2
++
++/* Connection mode */
++#define       EXT_DEF_UNKNOWN_MODE            0
++#define       EXT_DEF_P2P_MODE                1
++#define       EXT_DEF_LOOP_MODE               2
++#define       EXT_DEF_FL_MODE                 3
++#define       EXT_DEF_N_MODE                  4
++
++/* Valid name type for Disc. port/target */
++#define       EXT_DEF_USE_NODE_NAME           1
++#define       EXT_DEF_USE_PORT_NAME           2
++
++/* FC4 type values */
++#define EXT_DEF_FC4_TYPE_SCSI         0x1
++#define EXT_DEF_FC4_TYPE_IP           0x2
++#define EXT_DEF_FC4_TYPE_SCTP         0x4
++#define EXT_DEF_FC4_TYPE_VI           0x8
++
++/* Port Speed values */
++#define EXT_DEF_PORTSPEED_1GBIT               1
++#define EXT_DEF_PORTSPEED_2GBIT               2
++#define EXT_DEF_PORTSPEED_10GBIT      4
++
++typedef struct _EXT_DISC_PORT {
++      UINT8     WWNN[EXT_DEF_WWN_NAME_SIZE];  /* 8 */
++      UINT8     WWPN[EXT_DEF_WWN_NAME_SIZE];  /* 8 */
++      UINT8     Id  [EXT_DEF_PORTID_SIZE];
++                                      /* 4; last 3 bytes used. big endian */
++
++      /* The following fields currently are not supported */
++      UINT16    Type;                         /* 2; Port Type */
++      UINT16    Status;                       /* 2; Port Status */
++      UINT16    Bus;                          /* 2; n/a for Solaris */
++
++      UINT16    TargetId;                     /* 2 */
++      UINT8     Local;                        /* 1; Local or Remote */
++      UINT8     ReservedByte[1];              /* 1 */
++      
++      UINT16    LoopID;                       /* 2; Loop ID */
++      
++      UINT32    Reserved[7];                  /* 28 */
++} EXT_DISC_PORT, *PEXT_DISC_PORT;             /* 60 */
++
++typedef struct _EXT_DISC_TARGET {
++      UINT8     WWNN[EXT_DEF_WWN_NAME_SIZE];  /* 8 */
++      UINT8     WWPN[EXT_DEF_WWN_NAME_SIZE];  /* 8 */
++      UINT8     Id  [EXT_DEF_PORTID_SIZE];
++                                      /* 4; last 3 bytes used. big endian */
++
++      /* The following fields currently are not supported */
++      UINT16    Type;                         /* 2; Target Type */
++      UINT16    Status;                       /* 2; Target Status*/
++      UINT16    Bus;                          /* 2; n/a for Solaris */
++
++      UINT16    TargetId;                     /* 2 */
++
++      /* The following field is currently not supported */
++      UINT16    LunCount;                     /* 2; n/a for nt */
++
++      UINT8     Local;                        /* 1; Local or Remote */
++      UINT8     ReservedByte[1];              /* 1 */
++      
++      UINT16    LoopID;                       /* 2; Loop ID */
++      
++      UINT16    Reserved[13];                 /* 26 */
++} EXT_DISC_TARGET, *PEXT_DISC_TARGET;         /* 60 */
++
++/* The following command is not supported */
++typedef struct _EXT_DISC_LUN {                        /* n/a for nt */
++      UINT16    Id;                           /* 2 */
++      UINT16    State;                        /* 2 */
++      UINT16    IoCount;                      /* 2 */
++      UINT16    Reserved[15];                 /* 30 */
++} EXT_DISC_LUN, *PEXT_DISC_LUN;                       /* 36 */
++
++
++/* SCSI address */
++typedef struct _EXT_SCSI_ADDR {
++      UINT16    Bus;                          /* 2 */
++      UINT16    Target;                       /* 2 */
++      UINT16    Lun;                          /* 2 */
++      UINT16    Padding[5];                   /* 10 */
++} EXT_SCSI_ADDR, *PEXT_SCSI_ADDR;             /* 16 */
++
++
++/* Fibre Channel address */
++typedef struct _EXT_FC_ADDR {
++      union {
++              UINT8    WWNN[EXT_DEF_WWN_NAME_SIZE];   /* 8 */
++              UINT8    WWPN[EXT_DEF_WWN_NAME_SIZE];   /* 8 */
++              UINT8    Id[EXT_DEF_PORTID_SIZE];       /* 4 */
++      } FcAddr;
++      UINT16    Type;                                 /* 2 */
++      UINT16    Padding[2];                           /* 2 */
++} EXT_FC_ADDR, *PEXT_FC_ADDR;                         /* 24 */
++
++#define       EXT_DEF_TYPE_WWNN                   1
++#define       EXT_DEF_TYPE_WWPN                   2
++#define       EXT_DEF_TYPE_PORTID                 3
++#define       EXT_DEF_TYPE_FABRIC                 4
++
++
++/* Destination address */
++typedef struct _EXT_DEST_ADDR {
++      union {
++              UINT8    WWNN[EXT_DEF_WWN_NAME_SIZE];   /* 8 */
++              UINT8    WWPN[EXT_DEF_WWN_NAME_SIZE];   /* 8 */
++              UINT8    Id[EXT_DEF_PORTID_SIZE];       /* 4 */
++              struct {
++                      UINT16    Bus;                  /* 2 */
++                      UINT16    Target;               /* 2 */
++              } ScsiAddr;
++      } DestAddr;
++      UINT16    DestType;                             /* 2 */
++      UINT16    Lun;                                  /* 2 */
++      UINT16    Padding[2];                           /* 4 */
++} EXT_DEST_ADDR, *PEXT_DEST_ADDR;                     /* 16 */
++
++
++#define       EXT_DEF_DESTTYPE_WWNN                   1
++#define       EXT_DEF_DESTTYPE_WWPN                   2
++#define       EXT_DEF_DESTTYPE_PORTID                 3
++#define       EXT_DEF_DESTTYPE_FABRIC                 4
++#define       EXT_DEF_DESTTYPE_SCSI                   5
++
++/* Statistic */
++typedef struct _EXT_HBA_PORT_STAT {
++      UINT32    ControllerErrorCount;         /* 4 */
++      UINT32    DeviceErrorCount;             /* 4 */
++      UINT32    TotalIoCount;                 /* 4 */
++      UINT32    TotalMBytes;                  /* 4; MB of data processed */
++      UINT32    TotalLipResets;               /* 4; Total no. of LIP Reset */
++      UINT32    Reserved2;                    /* 4 */
++      UINT32    TotalLinkFailures;            /* 4 */
++      UINT32    TotalLossOfSync;              /* 4 */
++      UINT32    TotalLossOfSignals;           /* 4 */
++      UINT32    PrimitiveSeqProtocolErrorCount;/* 4 */
++      UINT32    InvalidTransmissionWordCount; /* 4 */
++      UINT32    InvalidCRCCount;              /* 4 */
++      UINT32    Reserved[16];                 /* 64 */
++} EXT_HBA_PORT_STAT, *PEXT_HBA_PORT_STAT;     /* 112 */
++
++
++/* Driver property */
++typedef struct _EXT_DRIVER {
++      UINT8     Version[EXT_DEF_MAX_STR_SIZE];/* 128 */
++      UINT16    NumOfBus;                     /* 2; Port Type */
++      UINT16    TargetsPerBus;                /* 2; Port Status */
++      UINT16    LunsPerTarget;                /* 2 */
++      UINT32    MaxTransferLen;               /* 4 */
++      UINT32    MaxDataSegments;              /* 4 */
++      UINT16    DmaBitAddresses;              /* 2 */
++      UINT16    IoMapType;                    /* 2 */
++      UINT32    Attrib;                       /* 4 */
++      UINT32    InternalFlags[4];             /* 16 */
++      UINT32    Reserved[8];                  /* 32 */
++} EXT_DRIVER, *PEXT_DRIVER;                   /* 198 */
++
++
++/* Firmware property */
++typedef struct _EXT_FW {
++      UINT8     Version[EXT_DEF_MAX_STR_SIZE];/* 128 */
++      UINT32    Attrib;                       /* 4 */
++      UINT16    Reserved[33];                 /* 66 */
++} EXT_FW, *PEXT_FW;                           /* 198 */
++
++
++/* ISP/Chip property */
++typedef struct _EXT_CHIP {
++      UINT16    VendorId;                     /* 2 */
++      UINT16    DeviceId;                     /* 2 */
++      UINT16    SubVendorId;                  /* 2 */
++      UINT16    SubSystemId;                  /* 2 */
++      UINT16    PciBusNumber;                 /* 2 */
++      UINT16    PciSlotNumber;                /* 2 */
++      UINT32    IoAddr;                       /* 4 */
++      UINT32    IoAddrLen;                    /* 4 */
++      UINT32    MemAddr;                      /* 4 */
++      UINT32    MemAddrLen;                   /* 4 */
++      UINT16    ChipType;                     /* 2 */
++      UINT16    InterruptLevel;               /* 2 */
++      UINT16    OutMbx[8];                    /* 16 */
++      UINT16    PciDevFunc;                   /* 2 */
++      UINT16    Reserved[15];                 /* 30 */
++} EXT_CHIP, *PEXT_CHIP;                               /* 80 */
++
++
++/* Request Buffer for RNID */
++typedef struct _EXT_RNID_REQ {
++      EXT_FC_ADDR Addr;                       /* 14 */
++      UINT8     DataFormat;                   /* 1 */
++      UINT8     Pad;                          /* 1 */
++      UINT8     OptWWN[EXT_DEF_WWN_NAME_SIZE];        /* 8 */
++      UINT8     OptPortId[EXT_DEF_PORTID_SIZE];       /* 4 */
++      UINT32    Reserved[12];                 /* 48 */
++      UINT8     Pad1[3];                      /* 3 */
++} EXT_RNID_REQ, *PEXT_RNID_REQ;                       /* 79 */
++
++#define EXT_DEF_RNID_DFORMAT_NONE             0
++#define EXT_DEF_RNID_DFORMAT_TOPO_DISC                0xDF
++
++/* Request Buffer for Set RNID */
++typedef struct _EXT_SET_RNID_REQ {
++      UINT8     IPVersion[2];
++      UINT8     UDPPortNumber[2];
++      UINT8     IPAddress[16];
++      UINT32    Reserved[16];
++} EXT_SET_RNID_REQ, *PEXT_SET_RNID_REQ;
++
++/* RNID definition and data struct */
++#define       SEND_RNID_RSP_SIZE  72
++
++typedef struct _RNID_DATA
++{
++      UINT8     WWN[16];                      /* 16 */
++      UINT32    UnitType;                     /* 4 */
++      UINT8     PortId[4];                    /* 4 */
++      UINT32    NumOfAttachedNodes;           /* 4 */
++      UINT8     IPVersion[2];                 /* 2 */
++      UINT8     UDPPortNumber[2];             /* 2 */
++      UINT8     IPAddress[16];                /* 16 */
++      UINT16    Reserved;                     /* 2 */
++      UINT16    TopoDiscFlags;                /* 2 */
++} EXT_RNID_DATA, *PEXT_RNID_DATA;             /* 52 */
++
++
++/* SCSI pass-through */
++typedef struct _EXT_SCSI_PASSTHRU {
++      EXT_SCSI_ADDR   TargetAddr;
++      UINT8           Direction;
++      UINT8           CdbLength;
++      UINT8           Cdb[EXT_DEF_SCSI_PASSTHRU_CDB_LENGTH];
++        UINT32          Reserved[14];
++        UINT16          Reserved2;
++        UINT16          SenseLength;
++      UINT8           SenseData[256];
++} EXT_SCSI_PASSTHRU, *PEXT_SCSI_PASSTHRU;
++
++/* FC SCSI pass-through */
++typedef struct _EXT_FC_SCSI_PASSTHRU {
++      EXT_DEST_ADDR   FCScsiAddr;
++      UINT8           Direction;
++      UINT8           CdbLength;
++      UINT8           Cdb[EXT_DEF_SCSI_PASSTHRU_CDB_LENGTH];
++        UINT32          Reserved[14];
++        UINT16          Reserved2;
++        UINT16          SenseLength;
++      UINT8           SenseData[256];
++} EXT_FC_SCSI_PASSTHRU, *PEXT_FC_SCSI_PASSTHRU;
++
++/* SCSI pass-through direction */
++#define       EXT_DEF_SCSI_PASSTHRU_DATA_IN           1
++#define       EXT_DEF_SCSI_PASSTHRU_DATA_OUT          2
++
++
++/* EXT_REG_AEN Request struct */
++typedef struct _EXT_REG_AEN {
++      UINT32    Enable;       /* 4; non-0 to enable, 0 to disable. */
++      UINT32    Reserved;     /* 4 */
++} EXT_REG_AEN, *PEXT_REG_AEN; /* 8 */
++
++/* EXT_GET_AEN Response struct */
++typedef struct _EXT_ASYNC_EVENT {
++      UINT32  AsyncEventCode;         /* 4 */
++      union {
++              struct {
++                      UINT8   RSCNInfo[EXT_DEF_PORTID_SIZE_ACTUAL];/* 3, BE */
++                      UINT8   AddrFormat;                     /* 1 */
++                      UINT32  Rsvd_1[2];                      /* 8 */
++              } RSCN;
++
++              UINT32  Reserved[3];    /* 12 */
++      } Payload;
++} EXT_ASYNC_EVENT, *PEXT_ASYNC_EVENT; /* 16 */
++
++
++/* Asynchronous Event Codes */
++#define       EXT_DEF_LIP_OCCURRED            0x8010
++#define       EXT_DEF_LINK_UP                 0x8011
++#define       EXT_DEF_LINK_DOWN               0x8012
++#define       EXT_DEF_LIP_RESET               0x8013
++#define       EXT_DEF_RSCN                    0x8015
++#define       EXT_DEF_DEVICE_UPDATE           0x8014
++#define       EXT_DEF_ELS                     0x8200
++
++/* Required # of entries in the queue buffer allocated. */
++#define       EXT_DEF_MAX_AEN_QUEUE           EXT_DEF_MAX_AEN_QUEUE_OS
++#define       EXT_DEF_MAX_ELS_BUFS            EXT_DEF_MAX_ELS_BUFS_OS
++#define       EXT_DEF_SIZE_ELS_BUF            EXT_DEF_SIZE_ELS_BUF_OS
++
++/* Device type to get for EXT_SC_GET_PORT_SUMMARY */
++#define       EXT_DEF_GET_KNOWN_DEVICE        0x1
++#define       EXT_DEF_GET_VISIBLE_DEVICE      0x2
++#define       EXT_DEF_GET_HIDDEN_DEVICE       0x4
++#define       EXT_DEF_GET_FABRIC_DEVICE       0x8
++#define       EXT_DEF_GET_LOOP_DEVICE         0x10
++
++/* Each entry in device database */
++typedef struct _EXT_DEVICEDATAENTRY
++{
++      UINT8           NodeWWN[8];     /* Node World Wide Name for device */
++      UINT8           PortWWN[8];     /* Port World Wide Name for device */
++      UINT8           PortID[3];      /* Current PortId for device */
++      UINT8           ControlFlags;   /* Control flag */
++      EXT_SCSI_ADDR   TargetAddress;  /* scsi address */
++      UINT32          DeviceFlags;    /* Flags for device */
++      UINT16          LoopID;         /* Loop ID */
++      UINT16          BaseLunNumber;  
++      UINT32          Reserved[32];
++} EXT_DEVICEDATAENTRY, *PEXT_DEVICEDATAENTRY;
++
++/* Device database information */
++typedef struct _EXT_DEVICEDATA
++{
++      UINT32  TotalDevices;          /* Set to total number of device. */
++      UINT32  ReturnListEntryCount;  /* Set to number of device entries */
++                                     /* returned in list. */
++
++      EXT_DEVICEDATAENTRY  EntryList[1]; /* Variable length */
++} EXT_DEVICEDATA, *PEXT_DEVICEDATA;
++
++
++/* Swap Target Device Data structure */
++typedef struct _EXT_SWAPTARGETDEVICE
++{
++      EXT_DEVICEDATAENTRY CurrentExistDevice;
++      EXT_DEVICEDATAENTRY NewDevice;
++} EXT_SWAPTARGETDEVICE, *PEXT_SWAPTARGETDEVICE;
++
++/* LUN BitMask structure definition, array of 8bit bytes,
++ * 1 bit per lun.  When bit == 1, the lun is masked.
++ * Most significant bit of mask[0] is lun 0.
++ * Least significant bit of mask[0] is lun 7.
++ */
++typedef struct _EXT_LUN_BIT_MASK {
++#if ((EXT_DEF_MAX_LUN & 0x7) == 0)
++      UINT8   mask[EXT_DEF_MAX_LUN >> 3];
++#else
++      UINT8   mask[(EXT_DEF_MAX_LUN + 8) >> 3 ];
++#endif
++} EXT_LUN_BIT_MASK, *PEXT_LUN_BIT_MASK;
++
++/*
++ * LUN mask bit manipulation macros
++ *
++ *   P = Pointer to an EXT_LUN_BIT_MASK union.
++ *   L = LUN number.
++ */
++#define EXT_IS_LUN_BIT_SET(P,L) \
++    (((P)->mask[L/8] & (0x80 >> (L%8)))?1:0)
++
++#define EXT_SET_LUN_BIT(P,L) \
++    ((P)->mask[L/8] |= (0x80 >> (L%8)))
++
++#define EXT_CLR_LUN_BIT(P,L) \
++    ((P)->mask[L/8] &= ~(0x80 >> (L%8)))
++
++#define       EXT_DEF_LUN_BITMASK_LIST_MIN_ENTRIES    1
++#define       EXT_DEF_LUN_BITMASK_LIST_MAX_ENTRIES    256
++
++#ifdef _WIN64
++#define       EXT_DEF_LUN_BITMASK_LIST_HEADER_SIZE    32
++#else
++#define       EXT_DEF_LUN_BITMASK_LIST_HEADER_SIZE \
++    offsetof(LUN_BITMASK_LIST_BUFFER, asBitmaskEntry)
++#endif
++
++#define       EXT_DEF_LUN_COUNT          2048
++#define       EXT_DEF_LUN_BITMASK_BYTES  (EXT_DEF_LUN_COUNT / 8)
++
++typedef struct _EXT_LUN_BITMASK_ENTRY
++{
++      UINT8   NodeName[EXT_DEF_WWN_NAME_SIZE];
++      UINT8   PortName[EXT_DEF_WWN_NAME_SIZE];
++
++      UINT32  Reserved2;
++      UINT32  Reserved3;
++      UINT32  Reserved4;
++      UINT32  Reserved5;     /* Pad to 32-byte header.*/
++
++      UINT8   Bitmask[EXT_DEF_LUN_BITMASK_BYTES];
++} EXT_LUN_BITMASK_ENTRY, *PEXT_LUN_BITMASK_ENTRY;
++
++/* Structure as it is stored in the config file.*/
++typedef struct _LUN_BITMASK_LIST
++{
++      UINT16  Version;       /* Should be LUN_BITMASK_REGISTRY_VERSION */
++      UINT16  EntryCount;    /* Count of variable entries following.*/
++      UINT32  Reserved1;
++      UINT32  Reserved2;
++      UINT32  Reserved3;
++      UINT32  Reserved4;
++      UINT32  Reserved5;
++      UINT32  Reserved6;
++      UINT32  Reserved7;     /* Pad to 32-byte header.*/
++
++      EXT_LUN_BITMASK_ENTRY BitmaskEntry[1]; /* Variable-length data.*/
++
++} EXT_LUN_BITMASK_LIST, *PEXT_LUN_BITMASK_LIST;
++
++
++#define       EXT_DEF_LUN_BITMASK_LIST_MIN_SIZE   \
++    (EXT_DEF_LUN_BITMASK_LIST_HEADER_SIZE + \
++    (sizeof(EXT_DEF_LUN_BITMASK_ENTRY) * EXT_DEF_LUN_BITMASK_LIST_MIN_ENTRIES))
++#define       EXT_DEF_LUN_BITMASK_LIST_MAX_SIZE   \
++    (EXT_DEF_LUN_BITMASK_LIST_HEADER_SIZE + \
++    (sizeof(EXT_DEF_LUN_BITMASK_ENTRY) * EXT_DEF_LUN_BITMASK_LIST_MAX_ENTRIES))
++
++/* Request Buffer for ELS PT*/
++#define EXT_DEF_WWPN_VALID  1
++#define EXT_DEF_WWNN_VALID  2
++#define EXT_DEF_PID_VALID   4
++typedef struct _EXT_ELS_PT_REQ {
++      UINT8     WWNN[EXT_DEF_WWN_NAME_SIZE];  /* 8 */
++      UINT8     WWPN[EXT_DEF_WWN_NAME_SIZE];  /* 8 */
++      UINT8     Id[EXT_DEF_PORTID_SIZE];      /* 4 */
++      UINT16    ValidMask;                    /* 2 */
++      UINT16    Lid;                          /* 2 */
++      UINT16    Rxid;                         /* 2 */
++      UINT16    AccRjt;                       /* 2 */
++      UINT32    Reserved;                     /* 4 */
++} EXT_ELS_PT_REQ, *PEXT_ELS_PT_REQ;           /* 32 */
++
++#ifdef _MSC_VER
++#pragma pack()
++#endif
++
++#endif /* _EXIOCT_H */
+--- /dev/null  Thu Apr 11 07:25:15 2002
++++ linux-2.5.73-n9560/drivers/scsi/qla2xxx/exioctln.h Thu Jul  3 15:34:42 2003
+@@ -0,0 +1,255 @@
++/*****************************************************************************
++*                  QLOGIC LINUX SOFTWARE
++*
++* QLogic ISP2x00 device driver for Linux 2.5.x
++* Copyright (C) 2003 QLogic Corporation
++* (www.qlogic.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, 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.
++****************************************************************************/
++
++/*
++ * File Name: exioctln.h
++
++   Rev 14    February 25, 2003        RL
++             - Added EXT_CC_DRIVER_SPECIFIC ioctl command to return
++             some driver specific data that can be used by API library
++             to determine how to maintain backward compatibility
++             of certain features.
++
++   Rev 13    January 31, 2003 RL
++             - Changed the value of EXT_DEF_USE_HBASELECT to avoid
++               conflicting with older implementation of FO API lib.
++
++   Rev 12    January 20, 2003 RL
++             - Added EXT_DEF_USE_HBASELECT definition for use by
++               the SETINSTANCE command.
++ 
++   Rev 11    December 10, 2002        RL
++             - Added EXT_CC_SEND_ELS_PASSTHRU_OS definition.
++ 
++   Rev 10    October 26, 2001 RL
++             - Corrected MAX_HBA, MAX_TARGET and MAX_LUN values to 255.
++ 
++   Rev 9     July 26, 2001    RL
++             - Added definition of signed types.
++ 
++   Rev 8     July 05, 2001    RL
++             - Redefined ioctl command values.
++ 
++   Rev 7     Nov 06, 2000   BN
++             - Added EXT_DEF_MAX_AEN_QUEUE_OS define
++             - Added define for handle_hba_t
++ 
++   Rev 6     Oct 25, 2000   BN
++             - Added EXT_CC_DRIVER_PROP_OS define
++ 
++   Rev 5     Oct 25, 2000   BN
++             - Redo the copyright header and add AEN details
++ 
++   Rev 4     Oct 23, 2000   BN
++             - Added definition for BOOLEAN
++ 
++   Rev 3     Oct 23, 2000   BN
++             - Added definitions for EXT_ADDR_MODE_OS
++               and also include of <linux/ioctl.h>
++ 
++   Rev 2     Oct 18, 2000   BN
++             - Enable API Exention support
++ 
++   Rev 1     Original version Sep 7, 2000   BN
++ 
++*/
++
++
++#ifndef _EXIOCT_LN_H_
++#define _EXIOCT_LN_H_
++
++#include <linux/ioctl.h>
++
++#ifdef APILIB
++#include <stdint.h>
++#endif
++
++
++#define       INT8    int8_t
++#define       INT16   int16_t
++#define       INT32   int32_t
++#define       UINT8   uint8_t
++#define       UINT16  uint16_t
++#define       UINT32  uint32_t
++#define       UINT64  void *
++#define BOOLEAN uint8_t
++
++typedef struct  track_instance {
++      int   handle;
++} track_instance_t;
++
++
++#if BITS_PER_LONG <= 32
++#define EXT_ADDR_MODE_OS  EXT_DEF_ADDR_MODE_32
++#else
++#define EXT_ADDR_MODE_OS  EXT_DEF_ADDR_MODE_64
++#endif
++
++
++#define QLMULTIPATH_MAGIC 'y'
++
++#define _QLBUILD   /* for exioct.h to enable include of qinsdmgt.h */
++
++
++
++#define       EXT_DEF_MAX_HBA_OS              255     /* 0 - 0xFE */
++#define       EXT_DEF_MAX_BUS_OS              1
++#define       EXT_DEF_MAX_TARGET_OS           255     /* 0 - 0xFE */
++#define       EXT_DEF_MAX_LUN_OS              255     /* 0 - 0xFE */
++
++#define EXT_DEF_MAX_AEN_QUEUE_OS        64
++
++#define EXT_DEF_FC_HEADER_LEN         24
++#define EXT_DEF_ELS_RJT_LENGTH                0x08    /* 8  */
++#define EXT_DEF_ELS_RPS_ACC_LENGTH    0x40    /* 64 */
++#define EXT_DEF_ELS_RLS_ACC_LENGTH    0x1C    /* 28 */
++
++#define EXT_DEF_USE_HBASELECT         0x02    /* bit 1: HbaSelect field now
++                                               * used to specify destination
++                                               * HBA of each command.
++                                               * SetInstance cmd is now
++                                               * issued only once during
++                                               * API initialization.
++                                               */
++
++
++/*****************/
++/* Command codes */
++/*****************/
++
++/*************************************************************/
++/* These are regular/external command codes, starting from 0 */
++/*************************************************************/
++#define EXT_CC_QUERY_OS                                       /* QUERY */     \
++    _IOWR(QLMULTIPATH_MAGIC, 0x00, sizeof(EXT_IOCTL))
++#define EXT_CC_SEND_FCCT_PASSTHRU_OS                  /* FCCT_PASSTHRU */ \
++    _IOWR(QLMULTIPATH_MAGIC, 0x01, sizeof(EXT_IOCTL))
++#define       EXT_CC_REG_AEN_OS                               /* REG_AEN */   \
++    _IOWR(QLMULTIPATH_MAGIC, 0x02, sizeof(EXT_IOCTL))
++#define       EXT_CC_GET_AEN_OS                               /* GET_AEN */   \
++    _IOWR(QLMULTIPATH_MAGIC, 0x03, sizeof(EXT_IOCTL))
++#define       EXT_CC_SEND_ELS_RNID_OS                         /* SEND_ELS_RNID */ \
++    _IOWR(QLMULTIPATH_MAGIC, 0x04, sizeof(EXT_IOCTL))
++#define       EXT_CC_SCSI_PASSTHRU_OS                         /* SCSI_PASSTHRU */ \
++    _IOWR(QLMULTIPATH_MAGIC, 0x05, sizeof(EXT_IOCTL))
++
++#define EXT_CC_GET_DATA_OS                            /* GET_DATA */  \
++    _IOWR(QLMULTIPATH_MAGIC, 0x06, sizeof(EXT_IOCTL))
++#define EXT_CC_SET_DATA_OS                            /* SET_DATA */  \
++    _IOWR(QLMULTIPATH_MAGIC, 0x07, sizeof(EXT_IOCTL))
++
++/*****************************************/
++/* following are internal command codes. */
++/*****************************************/
++#define EXT_CC_RESERVED0A_OS                                          \
++    _IOWR(QLMULTIPATH_MAGIC, 0x08, sizeof(EXT_IOCTL))
++#define EXT_CC_RESERVED0B_OS                                          \
++    _IOWR(QLMULTIPATH_MAGIC, 0x09, sizeof(EXT_IOCTL))
++
++#define EXT_CC_RESERVED0C_OS                                          \
++    _IOWR(QLMULTIPATH_MAGIC, 0x0a, sizeof(EXT_IOCTL))
++#define EXT_CC_RESERVED0D_OS                                          \
++    _IOWR(QLMULTIPATH_MAGIC, 0x0b, sizeof(EXT_IOCTL))
++
++#define EXT_CC_RESERVED0E_OS                                          \
++    _IOWR(QLMULTIPATH_MAGIC, 0x0c, sizeof(EXT_IOCTL))
++#define EXT_CC_RESERVED0F_OS                                          \
++    _IOWR(QLMULTIPATH_MAGIC, 0x0d, sizeof(EXT_IOCTL))
++
++#define EXT_CC_RESERVED0G_OS                                          \
++    _IOWR(QLMULTIPATH_MAGIC, 0x0e, sizeof(EXT_IOCTL))
++#define EXT_CC_RESERVED0H_OS                                          \
++    _IOWR(QLMULTIPATH_MAGIC, 0x0f, sizeof(EXT_IOCTL))
++
++#define EXT_CC_RESERVED0I_OS                                          \
++    _IOWR(QLMULTIPATH_MAGIC, 0x10, sizeof(EXT_IOCTL))
++#define EXT_CC_RESERVED0J_OS                                          \
++    _IOWR(QLMULTIPATH_MAGIC, 0x11, sizeof(EXT_IOCTL))
++
++#define EXT_CC_RESERVED0Z_OS                                          \
++    _IOWR(QLMULTIPATH_MAGIC, 0x21, sizeof(EXT_IOCTL))
++
++/********************************************************/
++/* These are additional regular/external command codes. */
++/********************************************************/
++#define EXT_CC_SEND_ELS_PASSTHRU_OS                                   \
++    _IOWR(QLMULTIPATH_MAGIC, 0x30, sizeof(EXT_IOCTL))
++
++
++/********************************************************/
++/* Failover ioctl command codes range from 0xc0 to 0xdf */
++/********************************************************/
++
++
++/*******************************************************************/
++/* These are Linux driver implementation specific commands. Values */
++/* start from highest possible value and in decreasing order.      */
++/*******************************************************************/
++
++#define EXT_CC_STARTIOCTL                             /* STARTIOCTL */ \
++    _IOWR(QLMULTIPATH_MAGIC, 0xff, sizeof(EXT_IOCTL))
++#define EXT_CC_SETINSTANCE                            /* SETINSTANCE */ \
++    _IOWR(QLMULTIPATH_MAGIC, 0xfe, sizeof(EXT_IOCTL))
++#define       EXT_CC_WWPN_TO_SCSIADDR                         /* WWPN_TO_SCSIADDR */ \
++    _IOWR(QLMULTIPATH_MAGIC, 0xfd, sizeof(EXT_IOCTL))
++#define       EXT_CC_DRIVER_SPECIFIC                          /* DRIVER_SPECIFIC */ \
++    _IOWR(QLMULTIPATH_MAGIC, 0xfc, sizeof(EXT_IOCTL))
++
++
++/*
++ * Response struct definition
++ */
++typedef struct _EXT_LN_DRV_VERSION {
++      UINT8   Major;
++      UINT8   Minor;
++      UINT8   Patch;
++      UINT8   Beta;
++      UINT8   Reserved[4];
++} EXT_LN_DRV_VERSION;                         /* 8 */
++
++typedef struct _EXT_LN_DRIVER_DATA {
++      EXT_LN_DRV_VERSION      DrvVer;         /* 8 */
++      UINT32    Reserved[14];                 /* 56 */
++} EXT_LN_DRIVER_DATA, *PEXT_LN_DRIVER_DATA;   /* 64 */
++
++
++
++
++
++
++/*
++ * Overrides for Emacs so that we almost 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: 2
++ * c-brace-imaginary-offset: 0
++ * c-brace-offset: -2
++ * c-argdecl-indent: 2
++ * c-label-offset: -2
++ * c-continued-statement-offset: 4
++ * c-continued-brace-offset: 0
++ * indent-tabs-mode: nil
++ * tab-width: 8
++ * End:
++ */
++
++#endif /* _EXIOCT_LN_H_ */
++
+--- /dev/null  Thu Apr 11 07:25:15 2002
++++ linux-2.5.73-n9560/drivers/scsi/qla2xxx/inioct.h   Thu Jul  3 15:34:42 2003
+@@ -0,0 +1,129 @@
++/******************************************************************************
++ *                  QLOGIC LINUX SOFTWARE
++ *
++ * QLogic ISP2x00 device driver for Linux 2.5.x
++ * Copyright (C) 2003 Qlogic Corporation
++ * (www.qlogic.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, 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.
++ *
++ ******************************************************************************/
++
++/*
++ * File Name: inioct.h
++ *
++ * San/Device Management Ioctl Header
++ * File is created to adhere to Solaris requirement using 8-space tabs.
++ *
++ * !!!!! PLEASE DO NOT REMOVE THE TABS !!!!!
++ * !!!!! PLEASE NO SINGLE LINE COMMENTS: // !!!!!
++ * !!!!! PLEASE NO MORE THAN 80 CHARS PER LINE !!!!!
++ *
++ *
++ * Revision History:
++ *
++ * Rev. 0     June 15, 2001
++ * YPL        - Created.
++ *
++ * Rev. 1     June 26, 2001
++ * YPL        - Change the loop back structure and delete cc that is not used.
++ *
++ * Rev. 2     June 29, 2001
++ * YPL        - Use new EXT_CC defines from exioct.h
++ *
++ * Rev. 3     July 12, 2001
++ * RL - Added definitions for loopback mbx command completion codes.
++ *
++ * Rev. 4     July 12, 2001
++ * RL - Added definitions for loopback mbx command completion codes.
++ *
++ * Rev. 5     October 9, 2002
++ * AV - Added definition for Read Option ROM IOCTL.
++ *
++ */
++
++#ifndef       _INIOCT_H
++#define       _INIOCT_H
++
++/*
++ * ***********************************************************************
++ * X OS type definitions
++ * ***********************************************************************
++ */
++#ifdef _MSC_VER                                               /* NT */
++#pragma pack(1)
++#endif
++
++/*
++ * ***********************************************************************
++ * INT_IOCTL SubCode definition.
++ * These macros are being used for setting SubCode field in EXT_IOCTL
++ * structure.
++ * ***********************************************************************
++ */
++
++/*
++ * Currently supported DeviceControl / ioctl command codes
++ */
++#define       INT_CC_GET_PORT_STAT_FC         EXT_CC_RESERVED0A_OS
++#define       INT_CC_LOOPBACK                 EXT_CC_RESERVED0B_OS
++#define       INT_CC_UPDATE_OPTION_ROM        EXT_CC_RESERVED0C_OS
++#define       INT_CC_ADD_TARGET_DEVICE        EXT_CC_RESERVED0D_OS
++#define       INT_CC_READ_NVRAM               EXT_CC_RESERVED0E_OS
++#define       INT_CC_UPDATE_NVRAM             EXT_CC_RESERVED0F_OS
++#define       INT_CC_SWAP_TARGET_DEVICE       EXT_CC_RESERVED0G_OS
++#define       INT_CC_READ_OPTION_ROM          EXT_CC_RESERVED0H_OS
++#define       INT_CC_LEGACY_LOOPBACK          EXT_CC_RESERVED0Z_OS
++
++
++
++/* NVRAM */
++#define       INT_SC_NVRAM_HARDWARE           0       /* Save */
++#define       INT_SC_NVRAM_DRIVER             1       /* Driver (Apply) */
++#define       INT_SC_NVRAM_ALL                2       /* NVRAM/Driver (Save+Apply) */
++
++/* Loopback */
++typedef struct _INT_LOOPBACK_REQ
++{
++        UINT16 Options;                               /* 2   */
++        UINT32 TransferCount;                 /* 4   */
++        UINT32 IterationCount;                        /* 4   */
++        UINT64 BufferAddress;                 /* 8  */
++        UINT32 BufferLength;                  /* 4  */
++        UINT16 Reserved[9];                   /* 18  */
++}
++INT_LOOPBACK_REQ, *PINT_LOOPBACK_REQ;         /* 408 */
++
++typedef struct _INT_LOOPBACK_RSP
++{
++        UINT64 BufferAddress;                 /* 8  */
++        UINT32 BufferLength;                  /* 4  */
++        UINT16 CompletionStatus;              /* 2   */
++        UINT16 CrcErrorCount;                 /* 2   */
++        UINT16 DisparityErrorCount;           /* 2   */
++        UINT16 FrameLengthErrorCount;         /* 2   */
++        UINT32 IterationCountLastError;               /* 4   */
++        UINT16 Reserved[8];                   /* 16  */
++}
++INT_LOOPBACK_RSP, *PINT_LOOPBACK_RSP;         /* 40  */
++
++/* definition for interpreting CompletionStatus values */
++#define       INT_DEF_LB_COMPLETE     0x4000
++#define       INT_DEF_LB_PARAM_ERR    0x4006
++#define       INT_DEF_LB_LOOP_DOWN    0x400b
++#define       INT_DEF_LB_CMD_ERROR    0x400c
++
++
++#ifdef _MSC_VER
++#pragma pack()
++#endif
++
++#endif /* _INIOCT_H */
+--- /dev/null  Thu Apr 11 07:25:15 2002
++++ linux-2.5.73-n9560/drivers/scsi/qla2xxx/ql2100tp_fw.c      Thu Jul  3 15:34:42 2003
+@@ -0,0 +1,4866 @@
++/******************************************************************************
++ *                  QLOGIC LINUX SOFTWARE
++ *
++ * QLogic ISP2x00 device driver for Linux 2.5.x
++ * Copyright (C) 2003 Qlogic Corporation
++ * (www.qlogic.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, 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.
++ *
++ *************************************************************************/
++
++/************************************************************************
++ *                                                                    *
++ *     --- ISP2100 Fabric Initiator/Target Firmware ---               *
++ *                   with expanded LUN addressing                       *
++ *                   and FcTape (FCP-2) support                         *
++ *                                                                    *
++ *                                                                    *
++ ************************************************************************/
++/*
++ *    Firmware Version 1.19.24 (14:02 Jul 16, 2002)
++ */
++
++#ifdef UNIQUE_FW_NAME
++unsigned short fw2100tp_version = 1*1024+19;
++#else
++unsigned short risc_code_version = 1*1024+19;
++#endif
++
++#ifdef UNIQUE_FW_NAME
++unsigned char fw2100tp_version_str[] = {1,19,24};
++#else
++unsigned char firmware_version[] = {1,19,24};
++#endif
++
++#ifdef UNIQUE_FW_NAME
++#define fw2100tp_VERSION_STRING "1.19.24"
++#else
++#define FW_VERSION_STRING "1.19.24"
++#endif
++
++#ifdef UNIQUE_FW_NAME
++unsigned short fw2100tp_addr01 = 0x1000 ;
++#else
++unsigned short risc_code_addr01 = 0x1000 ;
++#endif
++
++#ifdef UNIQUE_FW_NAME
++unsigned short fw2100tp_code01[] = { 
++#else
++unsigned short risc_code01[] = { 
++#endif
++      0x0078, 0x102d, 0x0000, 0x95f1, 0x0000, 0x0001, 0x0013, 0x0018,
++      0x0017, 0x2043, 0x4f50, 0x5952, 0x4947, 0x4854, 0x2032, 0x3030,
++      0x3120, 0x514c, 0x4f47, 0x4943, 0x2043, 0x4f52, 0x504f, 0x5241,
++      0x5449, 0x4f4e, 0x2049, 0x5350, 0x3231, 0x3030, 0x2046, 0x6972,
++      0x6d77, 0x6172, 0x6520, 0x2056, 0x6572, 0x7369, 0x6f6e, 0x2030,
++      0x312e, 0x3139, 0x2020, 0x2020, 0x2400, 0x2091, 0x2000, 0x20c1,
++      0x0021, 0x2039, 0xffff, 0x2019, 0xaaaa, 0x2760, 0x2069, 0x7fff,
++      0x20c1, 0x0020, 0x2c2c, 0x2d34, 0x2762, 0x236a, 0x2c24, 0x2d04,
++      0x266a, 0x2562, 0xa406, 0x00c0, 0x1052, 0x20c1, 0x0021, 0x2c2c,
++      0x2362, 0x2c04, 0x2562, 0xa306, 0x0040, 0x1052, 0x20c1, 0x0020,
++      0x2039, 0x8fff, 0x20a1, 0xad00, 0x2708, 0x810d, 0x810d, 0x810d,
++      0x810d, 0xa18c, 0x000f, 0x2001, 0x000a, 0xa112, 0xa00e, 0x21a8,
++      0x41a4, 0x3400, 0x8211, 0x00c0, 0x105f, 0x2708, 0x3400, 0xa102,
++      0x0040, 0x106f, 0x0048, 0x106f, 0x20a8, 0xa00e, 0x41a4, 0x20a1,
++      0xa5f1, 0x2009, 0x0000, 0x20a9, 0x070f, 0x41a4, 0x3400, 0x20c9,
++      0xaaff, 0x2059, 0x0000, 0x2b78, 0x7823, 0x0004, 0x2089, 0x25c7,
++      0x2051, 0xa600, 0x2a70, 0x7762, 0xa786, 0x8fff, 0x0040, 0x1092,
++      0x705f, 0xcd00, 0x705b, 0xccf1, 0x7067, 0x0200, 0x706b, 0x0200,
++      0x0078, 0x109a, 0x705b, 0xbd01, 0x7067, 0x0100, 0x706b, 0x0100,
++      0x705f, 0xbd00, 0x1078, 0x12df, 0x1078, 0x13ca, 0x1078, 0x1577,
++      0x1078, 0x1ce9, 0x1078, 0x42ec, 0x1078, 0x76bf, 0x1078, 0x1355,
++      0x1078, 0x2ac0, 0x1078, 0x4e93, 0x1078, 0x49a3, 0x1078, 0x594a,
++      0x1078, 0x2263, 0x1078, 0x5c43, 0x1078, 0x5485, 0x1078, 0x2162,
++      0x1078, 0x2240, 0x2091, 0x3009, 0x7823, 0x0000, 0x0090, 0x10cf,
++      0x7820, 0xa086, 0x0002, 0x00c0, 0x10cf, 0x7823, 0x4000, 0x0068,
++      0x10c7, 0x781b, 0x0001, 0x2091, 0x5000, 0x2091, 0x4080, 0x2a70,
++      0x7003, 0x0000, 0x2001, 0x017f, 0x2003, 0x0000, 0x2a70, 0x7000,
++      0xa08e, 0x0003, 0x00c0, 0x10ef, 0x1078, 0x365e, 0x1078, 0x2ae8,
++      0x1078, 0x4ee3, 0x1078, 0x4b66, 0x2009, 0x0100, 0x2104, 0xa082,
++      0x0002, 0x0048, 0x10f3, 0x1078, 0x5966, 0x0078, 0x10d6, 0x1079,
++      0x10f7, 0x0078, 0x10dc, 0x1078, 0x7197, 0x0078, 0x10eb, 0x1101,
++      0x1102, 0x11be, 0x10ff, 0x1246, 0x12dc, 0x12dd, 0x12de, 0x1078,
++      0x1332, 0x007c, 0x127e, 0x0f7e, 0x2091, 0x8000, 0x7000, 0xa086,
++      0x0001, 0x00c0, 0x1198, 0x1078, 0x3aec, 0x2079, 0x0100, 0x7844,
++      0xa005, 0x00c0, 0x1198, 0x2011, 0x41dc, 0x1078, 0x5a45, 0x1078,
++      0x1adf, 0x780f, 0x00ff, 0x7840, 0xa084, 0xfffb, 0x7842, 0x2011,
++      0x8010, 0x73c4, 0x1078, 0x361b, 0x2001, 0xffff, 0x1078, 0x5ae6,
++      0x723c, 0xc284, 0x723e, 0x2001, 0xa60c, 0x2014, 0xc2ac, 0x2202,
++      0x1078, 0x6f9f, 0x2011, 0x0004, 0x1078, 0x8d1b, 0x1078, 0x489e,
++      0x1078, 0x42d4, 0x0040, 0x1144, 0x7087, 0x0001, 0x70bf, 0x0000,
++      0x1078, 0x3c9e, 0x0078, 0x1198, 0x1078, 0x4967, 0x0040, 0x114d,
++      0x7a0c, 0xc2b4, 0x7a0e, 0x0078, 0x1159, 0x1078, 0x90a6, 0x70cc,
++      0xd09c, 0x00c0, 0x1159, 0x7098, 0xa005, 0x0040, 0x1159, 0x1078,
++      0x42b8, 0x70d7, 0x0000, 0x70d3, 0x0000, 0x72cc, 0x2079, 0xa652,
++      0x7804, 0xd0ac, 0x0040, 0x1165, 0xc295, 0x72ce, 0xa296, 0x0004,
++      0x0040, 0x1186, 0x2011, 0x0001, 0x1078, 0x8d1b, 0x7093, 0x0000,
++      0x7097, 0xffff, 0x7003, 0x0002, 0x0f7f, 0x1078, 0x2677, 0x2011,
++      0x0005, 0x1078, 0x70e0, 0x1078, 0x62d1, 0x0c7e, 0x2061, 0x0100,
++      0x60e3, 0x0008, 0x0c7f, 0x127f, 0x0078, 0x119a, 0x7093, 0x0000,
++      0x7097, 0xffff, 0x7003, 0x0002, 0x2011, 0x0005, 0x1078, 0x70e0,
++      0x1078, 0x62d1, 0x0c7e, 0x2061, 0x0100, 0x60e3, 0x0008, 0x0c7f,
++      0x0f7f, 0x127f, 0x007c, 0x0c7e, 0x20a9, 0x0082, 0x2009, 0x007e,
++      0x017e, 0x027e, 0x037e, 0x2110, 0x027e, 0x2019, 0x0029, 0x1078,
++      0x73d0, 0x027f, 0x1078, 0xa4f1, 0x037f, 0x027f, 0x017f, 0x1078,
++      0x298e, 0x8108, 0x00f0, 0x11a0, 0x0c7f, 0x706f, 0x0000, 0x7070,
++      0xa084, 0x00ff, 0x7072, 0x709b, 0x0000, 0x007c, 0x127e, 0x2091,
++      0x8000, 0x7000, 0xa086, 0x0002, 0x00c0, 0x1244, 0x7094, 0xa086,
++      0xffff, 0x0040, 0x11d1, 0x1078, 0x2677, 0x1078, 0x62d1, 0x0078,
++      0x1244, 0x70cc, 0xd09c, 0x0040, 0x11fd, 0xd084, 0x0040, 0x11fd,
++      0x0f7e, 0x2079, 0x0100, 0x790c, 0xc1b5, 0x790e, 0x0f7f, 0xd08c,
++      0x0040, 0x11fd, 0x70d0, 0xa086, 0xffff, 0x0040, 0x11f9, 0x1078,
++      0x27f7, 0x1078, 0x62d1, 0x70cc, 0xd094, 0x00c0, 0x1244, 0x2011,
++      0x0001, 0x2019, 0x0000, 0x1078, 0x282f, 0x1078, 0x62d1, 0x0078,
++      0x1244, 0x70d4, 0xa005, 0x00c0, 0x1244, 0x7090, 0xa005, 0x00c0,
++      0x1244, 0x1078, 0x4967, 0x00c0, 0x1244, 0x2001, 0xa653, 0x2004,
++      0xd0ac, 0x0040, 0x1227, 0x157e, 0x0c7e, 0x20a9, 0x007f, 0x2009,
++      0x0000, 0x017e, 0x1078, 0x45c4, 0x00c0, 0x121a, 0x6000, 0xd0ec,
++      0x00c0, 0x1222, 0x017f, 0x8108, 0x00f0, 0x1211, 0x0c7f, 0x157f,
++      0x0078, 0x1227, 0x017f, 0x0c7f, 0x157f, 0x0078, 0x1244, 0x7003,
++      0x0003, 0x7097, 0xffff, 0x2001, 0x0000, 0x1078, 0x24e8, 0x1078,
++      0x3699, 0x2001, 0xa8b2, 0x2004, 0xa086, 0x0005, 0x00c0, 0x123c,
++      0x2011, 0x0000, 0x1078, 0x70e0, 0x2011, 0x0000, 0x1078, 0x70ea,
++      0x1078, 0x62d1, 0x1078, 0x639b, 0x127f, 0x007c, 0x017e, 0x0f7e,
++      0x127e, 0x2091, 0x8000, 0x2079, 0x0100, 0x2009, 0x00f7, 0x1078,
++      0x42a1, 0x7940, 0xa18c, 0x0010, 0x7942, 0x7924, 0xd1b4, 0x0040,
++      0x125b, 0x7827, 0x0040, 0xd19c, 0x0040, 0x1260, 0x7827, 0x0008,
++      0x007e, 0x037e, 0x157e, 0xa006, 0x1078, 0x5ae6, 0x7900, 0xa18a,
++      0x0003, 0x0050, 0x1289, 0x7954, 0xd1ac, 0x00c0, 0x1289, 0x2009,
++      0x00f8, 0x1078, 0x42a1, 0x7843, 0x0090, 0x7843, 0x0010, 0x20a9,
++      0x09c4, 0x7820, 0xd09c, 0x00c0, 0x1281, 0x7824, 0xd0ac, 0x00c0,
++      0x12ca, 0x00f0, 0x1279, 0x2001, 0x0001, 0x1078, 0x24e8, 0x0078,
++      0x12d5, 0x7853, 0x0000, 0x782f, 0x0020, 0x20a9, 0x0050, 0x00e0,
++      0x128f, 0x2091, 0x6000, 0x00f0, 0x128f, 0x7853, 0x0400, 0x782f,
++      0x0000, 0x2009, 0x00f8, 0x1078, 0x42a1, 0x20a9, 0x000e, 0x0005,
++      0x00f0, 0x129f, 0x7853, 0x1400, 0x7843, 0x0090, 0x7843, 0x0010,
++      0x2019, 0x61a8, 0x7854, 0x0005, 0x0005, 0xd08c, 0x0040, 0x12b4,
++      0x7824, 0xd0ac, 0x00c0, 0x12ca, 0x8319, 0x00c0, 0x12aa, 0x2009,
++      0xa632, 0x2104, 0x8000, 0x200a, 0xa084, 0xfff0, 0x0040, 0x12c4,
++      0x200b, 0x0000, 0x1078, 0x2588, 0x2001, 0x0001, 0x1078, 0x24e8,
++      0x0078, 0x12d3, 0x2001, 0xa632, 0x2003, 0x0000, 0x7828, 0xc09d,
++      0x782a, 0x7827, 0x0048, 0x7853, 0x0400, 0x157f, 0x037f, 0x007f,
++      0x127f, 0x0f7f, 0x017f, 0x007c, 0x007c, 0x007c, 0x007c, 0x2a70,
++      0x2061, 0xa8ad, 0x2063, 0x0001, 0x6007, 0x0013, 0x600b, 0x0018,
++      0x600f, 0x0017, 0x2009, 0x0100, 0x2104, 0xa082, 0x0002, 0x0048,
++      0x12f5, 0x7053, 0xffff, 0x0078, 0x12f7, 0x7053, 0x0000, 0x7057,
++      0xffff, 0x706f, 0x0000, 0x7073, 0x0000, 0x1078, 0x90a6, 0x2061,
++      0xa88d, 0x6003, 0x0909, 0x6007, 0x0000, 0x600b, 0x8800, 0x600f,
++      0x0200, 0x6013, 0x00ff, 0x6017, 0x0003, 0x601b, 0x0000, 0x601f,
++      0x07d0, 0x2061, 0xa895, 0x6003, 0x8000, 0x6007, 0x0000, 0x600b,
++      0x0000, 0x600f, 0x0200, 0x6013, 0x00ff, 0x6017, 0x0000, 0x601b,
++      0x0001, 0x601f, 0x0000, 0x2061, 0xa8a5, 0x6003, 0x514c, 0x6007,
++      0x4f47, 0x600b, 0x4943, 0x600f, 0x2020, 0x2001, 0xa626, 0x2003,
++      0x0000, 0x007c, 0x2091, 0x8000, 0x0068, 0x1334, 0x007e, 0x017e,
++      0x2079, 0x0000, 0x7818, 0xd084, 0x00c0, 0x133a, 0x017f, 0x792e,
++      0x007f, 0x782a, 0x007f, 0x7826, 0x3900, 0x783a, 0x7823, 0x8002,
++      0x781b, 0x0001, 0x2091, 0x5000, 0x2091, 0x4080, 0x2079, 0xa600,
++      0x7803, 0x0005, 0x0078, 0x1352, 0x007c, 0x2071, 0xa600, 0x715c,
++      0x712e, 0x2021, 0x0001, 0xa190, 0x002d, 0xa298, 0x002d, 0x0048,
++      0x136b, 0x7060, 0xa302, 0x00c8, 0x136b, 0x220a, 0x2208, 0x2310,
++      0x8420, 0x0078, 0x135d, 0x200b, 0x0000, 0x74aa, 0x74ae, 0x007c,
++      0x0e7e, 0x127e, 0x2091, 0x8000, 0x2071, 0xa600, 0x70ac, 0xa0ea,
++      0x0010, 0x00c8, 0x137e, 0xa06e, 0x0078, 0x1388, 0x8001, 0x70ae,
++      0x702c, 0x2068, 0x2d04, 0x702e, 0x206b, 0x0000, 0x6807, 0x0000,
++      0x127f, 0x0e7f, 0x007c, 0x0e7e, 0x2071, 0xa600, 0x127e, 0x2091,
++      0x8000, 0x70ac, 0x8001, 0x00c8, 0x1398, 0xa06e, 0x0078, 0x13a1,
++      0x70ae, 0x702c, 0x2068, 0x2d04, 0x702e, 0x206b, 0x0000, 0x6807,
++      0x0000, 0x127f, 0x0e7f, 0x007c, 0x0e7e, 0x127e, 0x2091, 0x8000,
++      0x2071, 0xa600, 0x702c, 0x206a, 0x2d00, 0x702e, 0x70ac, 0x8000,
++      0x70ae, 0x127f, 0x0e7f, 0x007c, 0x8dff, 0x0040, 0x13c0, 0x6804,
++      0x6807, 0x0000, 0x007e, 0x1078, 0x13a4, 0x0d7f, 0x0078, 0x13b4,
++      0x007c, 0x0e7e, 0x2071, 0xa600, 0x70ac, 0xa08a, 0x0010, 0xa00d,
++      0x0e7f, 0x007c, 0x0e7e, 0x2071, 0xa8d6, 0x7007, 0x0000, 0x701b,
++      0x0000, 0x701f, 0x0000, 0x2071, 0x0000, 0x7010, 0xa085, 0x8004,
++      0x7012, 0x0e7f, 0x007c, 0x127e, 0x2091, 0x8000, 0x0e7e, 0x2270,
++      0x700b, 0x0000, 0x2071, 0xa8d6, 0x7018, 0xa088, 0xa8df, 0x220a,
++      0x8000, 0xa084, 0x0007, 0x701a, 0x7004, 0xa005, 0x00c0, 0x13f6,
++      0x0f7e, 0x2079, 0x0010, 0x1078, 0x1408, 0x0f7f, 0x0e7f, 0x127f,
++      0x007c, 0x0e7e, 0x2071, 0xa8d6, 0x7004, 0xa005, 0x00c0, 0x1406,
++      0x0f7e, 0x2079, 0x0010, 0x1078, 0x1408, 0x0f7f, 0x0e7f, 0x007c,
++      0x7000, 0x0079, 0x140b, 0x140f, 0x1479, 0x1496, 0x1496, 0x7018,
++      0x711c, 0xa106, 0x00c0, 0x1417, 0x7007, 0x0000, 0x007c, 0x0d7e,
++      0xa180, 0xa8df, 0x2004, 0x700a, 0x2068, 0x8108, 0xa18c, 0x0007,
++      0x711e, 0x7803, 0x0026, 0x6824, 0x7832, 0x6828, 0x7836, 0x682c,
++      0x783a, 0x6830, 0x783e, 0x6810, 0x700e, 0x680c, 0x7016, 0x6804,
++      0x0d7f, 0xd084, 0x0040, 0x1439, 0x7007, 0x0001, 0x1078, 0x143e,
++      0x007c, 0x7007, 0x0002, 0x1078, 0x1454, 0x007c, 0x017e, 0x027e,
++      0x710c, 0x2011, 0x0040, 0xa182, 0x0040, 0x00c8, 0x1449, 0x2110,
++      0xa006, 0x700e, 0x7212, 0x8203, 0x7822, 0x7803, 0x0020, 0x7803,
++      0x0041, 0x027f, 0x017f, 0x007c, 0x017e, 0x027e, 0x137e, 0x147e,
++      0x157e, 0x7014, 0x2098, 0x20a1, 0x0014, 0x7803, 0x0026, 0x710c,
++      0x2011, 0x0040, 0xa182, 0x0040, 0x00c8, 0x1468, 0x2110, 0xa006,
++      0x700e, 0x22a8, 0x53a6, 0x8203, 0x7822, 0x7803, 0x0020, 0x3300,
++      0x7016, 0x7803, 0x0001, 0x157f, 0x147f, 0x137f, 0x027f, 0x017f,
++      0x007c, 0x137e, 0x147e, 0x157e, 0x2099, 0xa6fa, 0x20a1, 0x0018,
++      0x20a9, 0x0008, 0x53a3, 0x7803, 0x0020, 0x127e, 0x2091, 0x8000,
++      0x7803, 0x0041, 0x7007, 0x0003, 0x7000, 0xc084, 0x7002, 0x700b,
++      0xa6f5, 0x127f, 0x157f, 0x147f, 0x137f, 0x007c, 0x137e, 0x147e,
++      0x157e, 0x2001, 0xa729, 0x209c, 0x20a1, 0x0014, 0x7803, 0x0026,
++      0x2001, 0xa72a, 0x20ac, 0x53a6, 0x2099, 0xa72b, 0x20a1, 0x0018,
++      0x20a9, 0x0008, 0x53a3, 0x7803, 0x0020, 0x127e, 0x2091, 0x8000,
++      0x7803, 0x0001, 0x7007, 0x0004, 0x7000, 0xc08c, 0x7002, 0x700b,
++      0xa726, 0x127f, 0x157f, 0x147f, 0x137f, 0x007c, 0x017e, 0x0e7e,
++      0x2071, 0xa8d6, 0x0f7e, 0x2079, 0x0010, 0x7904, 0x7803, 0x0002,
++      0xd1fc, 0x0040, 0x14d0, 0xa18c, 0x0700, 0x7004, 0x1079, 0x14d4,
++      0x0f7f, 0x0e7f, 0x017f, 0x007c, 0x1408, 0x14dc, 0x1509, 0x1531,
++      0x1564, 0x14da, 0x0078, 0x14da, 0xa18c, 0x0700, 0x00c0, 0x1502,
++      0x137e, 0x147e, 0x157e, 0x7014, 0x20a0, 0x2099, 0x0014, 0x7803,
++      0x0040, 0x7010, 0x20a8, 0x53a5, 0x3400, 0x7016, 0x157f, 0x147f,
++      0x137f, 0x700c, 0xa005, 0x0040, 0x151e, 0x1078, 0x143e, 0x007c,
++      0x7008, 0xa080, 0x0002, 0x2003, 0x0100, 0x7007, 0x0000, 0x1078,
++      0x1408, 0x007c, 0x7008, 0xa080, 0x0002, 0x2003, 0x0200, 0x0078,
++      0x14fd, 0xa18c, 0x0700, 0x00c0, 0x1514, 0x700c, 0xa005, 0x0040,
++      0x151e, 0x1078, 0x1454, 0x007c, 0x7008, 0xa080, 0x0002, 0x2003,
++      0x0200, 0x7007, 0x0000, 0x1078, 0x1408, 0x007c, 0x0d7e, 0x7008,
++      0x2068, 0x7830, 0x6826, 0x7834, 0x682a, 0x7838, 0x682e, 0x783c,
++      0x6832, 0x680b, 0x0100, 0x0d7f, 0x7007, 0x0000, 0x1078, 0x1408,
++      0x007c, 0xa18c, 0x0700, 0x00c0, 0x155e, 0x137e, 0x147e, 0x157e,
++      0x2001, 0xa6f8, 0x2004, 0xa080, 0x000d, 0x20a0, 0x2099, 0x0014,
++      0x7803, 0x0040, 0x20a9, 0x0020, 0x53a5, 0x2001, 0xa6fa, 0x2004,
++      0xd0bc, 0x0040, 0x1554, 0x2001, 0xa703, 0x2004, 0xa080, 0x000d,
++      0x20a0, 0x20a9, 0x0020, 0x53a5, 0x157f, 0x147f, 0x137f, 0x7007,
++      0x0000, 0x1078, 0x4f8c, 0x1078, 0x1408, 0x007c, 0x2011, 0x8003,
++      0x1078, 0x361b, 0x0078, 0x1562, 0xa18c, 0x0700, 0x00c0, 0x1571,
++      0x2001, 0xa728, 0x2003, 0x0100, 0x7007, 0x0000, 0x1078, 0x1408,
++      0x007c, 0x2011, 0x8004, 0x1078, 0x361b, 0x0078, 0x1575, 0x127e,
++      0x2091, 0x2100, 0x2079, 0x0030, 0x2071, 0xa8e7, 0x7803, 0x0004,
++      0x7003, 0x0000, 0x700f, 0xa8ed, 0x7013, 0xa8ed, 0x780f, 0x0076,
++      0x7803, 0x0004, 0x127f, 0x007c, 0x6934, 0xa184, 0x0007, 0x0079,
++      0x1591, 0x1599, 0x15df, 0x1599, 0x1599, 0x1599, 0x15c4, 0x15a8,
++      0x159d, 0xa085, 0x0001, 0x0078, 0x15f9, 0x684c, 0xd0bc, 0x0040,
++      0x1599, 0x6860, 0x682e, 0x685c, 0x682a, 0x6858, 0x0078, 0x15e7,
++      0xa18c, 0x00ff, 0xa186, 0x001e, 0x00c0, 0x1599, 0x684c, 0xd0bc,
++      0x0040, 0x1599, 0x6860, 0x682e, 0x685c, 0x682a, 0x6804, 0x681a,
++      0xa080, 0x000d, 0x2004, 0xa084, 0x000f, 0xa080, 0x206a, 0x2004,
++      0x6832, 0x6858, 0x0078, 0x15ef, 0xa18c, 0x00ff, 0xa186, 0x0015,
++      0x00c0, 0x1599, 0x684c, 0xd0ac, 0x0040, 0x1599, 0x6804, 0x681a,
++      0xa080, 0x000d, 0x2004, 0xa084, 0x000f, 0xa080, 0x206a, 0x2004,
++      0x6832, 0xa006, 0x682e, 0x682a, 0x6858, 0x0078, 0x15ef, 0x684c,
++      0xd0ac, 0x0040, 0x1599, 0xa006, 0x682e, 0x682a, 0x6858, 0xa18c,
++      0x000f, 0xa188, 0x206a, 0x210c, 0x6932, 0x2d08, 0x691a, 0x6826,
++      0x684c, 0xc0dd, 0x684e, 0xa006, 0x680a, 0x697c, 0x6912, 0x6980,
++      0x6916, 0x007c, 0x20e1, 0x0007, 0x20e1, 0x2000, 0x2001, 0x020a,
++      0x2004, 0x82ff, 0x0040, 0x161c, 0xa280, 0x0004, 0x0d7e, 0x206c,
++      0x684c, 0xd0dc, 0x00c0, 0x1618, 0x1078, 0x158c, 0x0040, 0x1618,
++      0x0d7f, 0xa280, 0x0000, 0x2003, 0x0002, 0xa016, 0x0078, 0x161c,
++      0x6808, 0x8000, 0x680a, 0x0d7f, 0x127e, 0x047e, 0x037e, 0x027e,
++      0x2091, 0x2100, 0x027f, 0x037f, 0x047f, 0x7000, 0xa005, 0x00c0,
++      0x1630, 0x7206, 0x2001, 0x1651, 0x007e, 0x2260, 0x0078, 0x17e0,
++      0x710c, 0x220a, 0x8108, 0x230a, 0x8108, 0x240a, 0x8108, 0xa182,
++      0xa908, 0x0048, 0x163d, 0x2009, 0xa8ed, 0x710e, 0x7010, 0xa102,
++      0xa082, 0x0009, 0x0040, 0x1648, 0xa080, 0x001b, 0x00c0, 0x164b,
++      0x2009, 0x0138, 0x200a, 0x7000, 0xa005, 0x00c0, 0x1651, 0x1078,
++      0x17c1, 0x127f, 0x007c, 0x127e, 0x027e, 0x037e, 0x0c7e, 0x007e,
++      0x2091, 0x2100, 0x007f, 0x047f, 0x037f, 0x027f, 0x0d7e, 0x0c7e,
++      0x2460, 0x6110, 0x2168, 0x6a62, 0x6b5e, 0xa005, 0x0040, 0x16dd,
++      0x6808, 0xa005, 0x0040, 0x174a, 0x7000, 0xa005, 0x00c0, 0x1672,
++      0x0078, 0x16d2, 0x700c, 0x7110, 0xa106, 0x00c0, 0x1753, 0x7004,
++      0xa406, 0x00c0, 0x16d2, 0x2001, 0x0005, 0x2004, 0xd08c, 0x0040,
++      0x168f, 0x047e, 0x1078, 0x1913, 0x047f, 0x2460, 0x6010, 0xa080,
++      0x0002, 0x2004, 0xa005, 0x0040, 0x174a, 0x0078, 0x166c, 0x2001,
++      0x0207, 0x2004, 0xd09c, 0x00c0, 0x167b, 0x7804, 0xa084, 0x6000,
++      0x0040, 0x16a0, 0xa086, 0x6000, 0x0040, 0x16a0, 0x0078, 0x167b,
++      0x7100, 0xa186, 0x0002, 0x00c0, 0x16c0, 0x0e7e, 0x2b68, 0x6818,
++      0x2060, 0x1078, 0x203f, 0x2804, 0xac70, 0x6034, 0xd09c, 0x00c0,
++      0x16b5, 0x7108, 0x720c, 0x0078, 0x16b7, 0x7110, 0x7214, 0x6810,
++      0xa100, 0x6812, 0x6814, 0xa201, 0x6816, 0x0e7f, 0x0078, 0x16c4,
++      0xa186, 0x0001, 0x00c0, 0x16cc, 0x7820, 0x6910, 0xa100, 0x6812,
++      0x7824, 0x6914, 0xa101, 0x6816, 0x7803, 0x0004, 0x7003, 0x0000,
++      0x7004, 0x2060, 0x6100, 0xa18e, 0x0004, 0x00c0, 0x1753, 0x2009,
++      0x0048, 0x1078, 0x775c, 0x0078, 0x1753, 0x6808, 0xa005, 0x0040,
++      0x174a, 0x7000, 0xa005, 0x00c0, 0x16e7, 0x0078, 0x174a, 0x700c,
++      0x7110, 0xa106, 0x00c0, 0x16f0, 0x7004, 0xa406, 0x00c0, 0x174a,
++      0x2001, 0x0005, 0x2004, 0xd08c, 0x0040, 0x1704, 0x047e, 0x1078,
++      0x1913, 0x047f, 0x2460, 0x6010, 0xa080, 0x0002, 0x2004, 0xa005,
++      0x0040, 0x174a, 0x0078, 0x16e1, 0x2001, 0x0207, 0x2004, 0xd09c,
++      0x00c0, 0x16f0, 0x2001, 0x0005, 0x2004, 0xd08c, 0x00c0, 0x16f6,
++      0x7804, 0xa084, 0x6000, 0x0040, 0x171b, 0xa086, 0x6000, 0x0040,
++      0x171b, 0x0078, 0x16f0, 0x7007, 0x0000, 0xa016, 0x2218, 0x7000,
++      0xa08e, 0x0001, 0x0040, 0x173c, 0xa08e, 0x0002, 0x00c0, 0x174a,
++      0x0c7e, 0x0e7e, 0x6818, 0x2060, 0x1078, 0x203f, 0x2804, 0xac70,
++      0x6034, 0xd09c, 0x00c0, 0x1738, 0x7308, 0x720c, 0x0078, 0x173a,
++      0x7310, 0x7214, 0x0e7f, 0x0c7f, 0x7820, 0xa318, 0x7824, 0xa211,
++      0x6810, 0xa300, 0x6812, 0x6814, 0xa201, 0x6816, 0x7803, 0x0004,
++      0x7003, 0x0000, 0x6100, 0xa18e, 0x0004, 0x00c0, 0x1753, 0x2009,
++      0x0048, 0x1078, 0x775c, 0x0c7f, 0x0d7f, 0x127f, 0x007c, 0x0f7e,
++      0x0e7e, 0x027e, 0x037e, 0x047e, 0x057e, 0x2071, 0xa8e7, 0x7000,
++      0xa086, 0x0000, 0x0040, 0x17ba, 0x7004, 0xac06, 0x00c0, 0x17ab,
++      0x2079, 0x0030, 0x7000, 0xa086, 0x0003, 0x0040, 0x17ab, 0x7804,
++      0xd0fc, 0x00c0, 0x17a7, 0x20e1, 0x6000, 0x2011, 0x0032, 0x2001,
++      0x0208, 0x200c, 0x2001, 0x0209, 0x2004, 0xa106, 0x00c0, 0x176f,
++      0x8211, 0x00c0, 0x1777, 0x7804, 0xd0fc, 0x00c0, 0x17a7, 0x1078,
++      0x1b22, 0x027e, 0x057e, 0x7803, 0x0004, 0x7804, 0xd0ac, 0x00c0,
++      0x178d, 0x7803, 0x0002, 0x7803, 0x0009, 0x7003, 0x0003, 0x7007,
++      0x0000, 0x057f, 0x027f, 0x2001, 0x015d, 0x2003, 0x0000, 0x2001,
++      0x0160, 0x2502, 0x2001, 0x0138, 0x2202, 0x0078, 0x17ab, 0x1078,
++      0x1913, 0x0078, 0x175f, 0x157e, 0x20a9, 0x0009, 0x2009, 0xa8ed,
++      0x2104, 0xac06, 0x00c0, 0x17b5, 0x200a, 0xa188, 0x0003, 0x00f0,
++      0x17b0, 0x157f, 0x057f, 0x047f, 0x037f, 0x027f, 0x0e7f, 0x0f7f,
++      0x007c, 0x700c, 0x7110, 0xa106, 0x00c0, 0x17c9, 0x7003, 0x0000,
++      0x007c, 0x2104, 0x7006, 0x2060, 0x8108, 0x211c, 0x8108, 0x2124,
++      0x8108, 0xa182, 0xa908, 0x0048, 0x17d7, 0x2009, 0xa8ed, 0x7112,
++      0x700c, 0xa106, 0x00c0, 0x17e0, 0x2001, 0x0138, 0x2003, 0x0008,
++      0x8cff, 0x00c0, 0x17e7, 0x1078, 0x1b4d, 0x0078, 0x1854, 0x6010,
++      0x2068, 0x2d58, 0x6828, 0xa406, 0x00c0, 0x17f2, 0x682c, 0xa306,
++      0x0040, 0x182f, 0x601c, 0xa086, 0x0008, 0x0040, 0x182f, 0x6024,
++      0xd0f4, 0x00c0, 0x181c, 0xd0d4, 0x0040, 0x1818, 0x6038, 0xa402,
++      0x6034, 0xa303, 0x0040, 0x1806, 0x00c8, 0x1818, 0x643a, 0x6336,
++      0x6c2a, 0x6b2e, 0x047e, 0x037e, 0x2400, 0x6c7c, 0xa402, 0x6812,
++      0x2300, 0x6b80, 0xa303, 0x6816, 0x037f, 0x047f, 0x0078, 0x181c,
++      0x1078, 0x9053, 0x0040, 0x17e3, 0x2001, 0xa674, 0x2004, 0xd0b4,
++      0x00c0, 0x182b, 0x6018, 0x2004, 0xd0bc, 0x00c0, 0x182b, 0x6817,
++      0x7fff, 0x6813, 0xffff, 0x1078, 0x208a, 0x00c0, 0x17e3, 0x0c7e,
++      0x7004, 0x2060, 0x6024, 0xc0d4, 0x6026, 0x0c7f, 0x684c, 0xd0f4,
++      0x0040, 0x1840, 0x6817, 0xffff, 0x6813, 0xffff, 0x0078, 0x17e3,
++      0x6824, 0x2050, 0x6818, 0x2060, 0x6830, 0x2040, 0x6034, 0xa0cc,
++      0x000f, 0x2009, 0x0011, 0x1078, 0x1855, 0x0040, 0x1853, 0x2009,
++      0x0001, 0x1078, 0x1855, 0x2d58, 0x007c, 0x8aff, 0x0040, 0x18ec,
++      0xa03e, 0x2730, 0x6850, 0xd0fc, 0x00c0, 0x1877, 0xd0f4, 0x00c0,
++      0x1887, 0x0d7e, 0x2804, 0xac68, 0x2900, 0x0079, 0x1867, 0x18ce,
++      0x188e, 0x188e, 0x18ce, 0x18ce, 0x18c6, 0x18ce, 0x188e, 0x18ce,
++      0x1894, 0x1894, 0x18ce, 0x18ce, 0x18ce, 0x18bd, 0x1894, 0xc0fc,
++      0x6852, 0x6b6c, 0x6a70, 0x6d1c, 0x6c20, 0x0d7e, 0xd99c, 0x0040,
++      0x18d1, 0x2804, 0xac68, 0x6f08, 0x6e0c, 0x0078, 0x18d1, 0xc0f4,
++      0x6852, 0x6b6c, 0x6a70, 0x0d7e, 0x0078, 0x18d8, 0x6b08, 0x6a0c,
++      0x6d00, 0x6c04, 0x0078, 0x18d1, 0x7b0c, 0xd3bc, 0x0040, 0x18b5,
++      0x7004, 0x0e7e, 0x2070, 0x701c, 0x0e7f, 0xa086, 0x0008, 0x00c0,
++      0x18b5, 0x7b08, 0xa39c, 0x0fff, 0x2d20, 0x0d7f, 0x0d7e, 0x6a14,
++      0x82ff, 0x00c0, 0x18b0, 0x6810, 0xa302, 0x0048, 0x18b0, 0x6b10,
++      0x2011, 0x0000, 0x2468, 0x0078, 0x18b7, 0x6b10, 0x6a14, 0x6d00,
++      0x6c04, 0x6f08, 0x6e0c, 0x0078, 0x18d1, 0x0d7f, 0x0d7e, 0x6834,
++      0xa084, 0x00ff, 0xa086, 0x001e, 0x00c0, 0x18ce, 0x0d7f, 0x1078,
++      0x2026, 0x00c0, 0x1855, 0xa00e, 0x0078, 0x18ec, 0x0d7f, 0x1078,
++      0x1332, 0x7b22, 0x7a26, 0x7d32, 0x7c36, 0x7f3a, 0x7e3e, 0x7902,
++      0x7000, 0x8000, 0x7002, 0x0d7f, 0x6828, 0xa300, 0x682a, 0x682c,
++      0xa201, 0x682e, 0x2300, 0x6b10, 0xa302, 0x6812, 0x2200, 0x6a14,
++      0xa203, 0x6816, 0x1078, 0x2026, 0x007c, 0x1078, 0x1332, 0x1078,
++      0x1c97, 0x7004, 0x2060, 0x0d7e, 0x6010, 0x2068, 0x7003, 0x0000,
++      0x1078, 0x1af4, 0x1078, 0x8d06, 0x0040, 0x190c, 0x6808, 0x8001,
++      0x680a, 0x697c, 0x6912, 0x6980, 0x6916, 0x682b, 0xffff, 0x682f,
++      0xffff, 0x6850, 0xc0bd, 0x6852, 0x0d7f, 0x1078, 0x8a01, 0x0078,
++      0x1adb, 0x1078, 0x1332, 0x127e, 0x2091, 0x2100, 0x007e, 0x017e,
++      0x2b68, 0x6818, 0x2060, 0x7904, 0x7803, 0x0002, 0xa184, 0x0700,
++      0x00c0, 0x18ef, 0xa184, 0x0003, 0xa086, 0x0003, 0x0040, 0x1911,
++      0x7000, 0x0079, 0x192b, 0x1933, 0x1935, 0x1a34, 0x1ab2, 0x1ac9,
++      0x1933, 0x1933, 0x1933, 0x1078, 0x1332, 0x8001, 0x7002, 0xa184,
++      0x0880, 0x00c0, 0x194a, 0x8aff, 0x0040, 0x19d4, 0x2009, 0x0001,
++      0x1078, 0x1855, 0x0040, 0x1adb, 0x2009, 0x0001, 0x1078, 0x1855,
++      0x0078, 0x1adb, 0x7803, 0x0004, 0x7003, 0x0000, 0xd1bc, 0x00c0,
++      0x19b2, 0x027e, 0x037e, 0x017e, 0x7808, 0xd0ec, 0x00c0, 0x1962,
++      0x7c20, 0x7d24, 0x7e30, 0x7f34, 0x7803, 0x0009, 0x7003, 0x0004,
++      0x0078, 0x1964, 0x1078, 0x1bd7, 0x017f, 0xd194, 0x0040, 0x196b,
++      0x8aff, 0x0040, 0x19a1, 0x6b28, 0x6a2c, 0x2400, 0x686e, 0xa31a,
++      0x2500, 0x6872, 0xa213, 0x6b2a, 0x6a2e, 0x0c7e, 0x7004, 0x2060,
++      0x6024, 0xd0f4, 0x00c0, 0x197e, 0x633a, 0x6236, 0x0c7f, 0x2400,
++      0x6910, 0xa100, 0x6812, 0x2500, 0x6914, 0xa101, 0x6816, 0x037f,
++      0x027f, 0x2600, 0x681e, 0x2700, 0x6822, 0x1078, 0x203f, 0x2a00,
++      0x6826, 0x2c00, 0x681a, 0x2800, 0x6832, 0x6850, 0xc0fd, 0x6852,
++      0x6808, 0x8001, 0x680a, 0x00c0, 0x19a7, 0x684c, 0xd0e4, 0x0040,
++      0x19a7, 0x7004, 0x2060, 0x2009, 0x0048, 0x1078, 0x775c, 0x7000,
++      0xa086, 0x0004, 0x0040, 0x1adb, 0x7003, 0x0000, 0x1078, 0x17c1,
++      0x0078, 0x1adb, 0x057e, 0x7d0c, 0xd5bc, 0x00c0, 0x19b9, 0x1078,
++      0xa57e, 0x057f, 0x1078, 0x1af4, 0x0f7e, 0x7004, 0x2078, 0x1078,
++      0x4963, 0x0040, 0x19c6, 0x7824, 0xc0f5, 0x7826, 0x0f7f, 0x682b,
++      0xffff, 0x682f, 0xffff, 0x6808, 0x8001, 0x680a, 0x697c, 0x6912,
++      0x6980, 0x6916, 0x0078, 0x1adb, 0x7004, 0x0c7e, 0x2060, 0x6024,
++      0x0c7f, 0xd0f4, 0x0040, 0x19e1, 0x6808, 0x8001, 0x680a, 0x0078,
++      0x19f5, 0x684c, 0xc0f5, 0x684e, 0x7814, 0xa005, 0x00c0, 0x19f9,
++      0x7003, 0x0000, 0x6808, 0x8001, 0x680a, 0x00c0, 0x19f5, 0x7004,
++      0x2060, 0x2009, 0x0048, 0x1078, 0x775c, 0x1078, 0x17c1, 0x0078,
++      0x1adb, 0x7814, 0x6910, 0xa102, 0x6812, 0x6914, 0xa183, 0x0000,
++      0x6816, 0x7814, 0x7908, 0xa18c, 0x0fff, 0xa192, 0x0841, 0x00c8,
++      0x18ef, 0xa188, 0x0007, 0x8114, 0x8214, 0x8214, 0xa10a, 0x8104,
++      0x8004, 0x8004, 0xa20a, 0x810b, 0x810b, 0x810b, 0x1078, 0x1b5e,
++      0x7803, 0x0004, 0x780f, 0xffff, 0x7803, 0x0001, 0x7804, 0xd0fc,
++      0x0040, 0x1a1e, 0x7803, 0x0002, 0x7803, 0x0004, 0x780f, 0x0076,
++      0x7004, 0x7007, 0x0000, 0x2060, 0x2009, 0x0048, 0x1078, 0x775c,
++      0x1078, 0x1b92, 0x0040, 0x19f5, 0x8001, 0x7002, 0xd194, 0x0040,
++      0x1a46, 0x7804, 0xd0fc, 0x00c0, 0x191b, 0x8aff, 0x0040, 0x1adb,
++      0x2009, 0x0001, 0x1078, 0x1855, 0x0078, 0x1adb, 0xa184, 0x0880,
++      0x00c0, 0x1a53, 0x8aff, 0x0040, 0x1adb, 0x2009, 0x0001, 0x1078,
++      0x1855, 0x0078, 0x1adb, 0x7803, 0x0004, 0x7003, 0x0000, 0xd1bc,
++      0x00c0, 0x1a93, 0x027e, 0x037e, 0x7808, 0xd0ec, 0x00c0, 0x1a66,
++      0x7803, 0x0009, 0x7003, 0x0004, 0x0078, 0x1a68, 0x1078, 0x1bd7,
++      0x6b28, 0x6a2c, 0x1078, 0x203f, 0x0d7e, 0x0f7e, 0x2d78, 0x2804,
++      0xac68, 0x6034, 0xd09c, 0x00c0, 0x1a83, 0x6808, 0x2008, 0xa31a,
++      0x680c, 0xa213, 0x7810, 0xa100, 0x7812, 0x690c, 0x7814, 0xa101,
++      0x7816, 0x0078, 0x1a8f, 0x6810, 0x2008, 0xa31a, 0x6814, 0xa213,
++      0x7810, 0xa100, 0x7812, 0x6914, 0x7814, 0xa101, 0x7816, 0x0f7f,
++      0x0d7f, 0x0078, 0x196d, 0x057e, 0x7d0c, 0x1078, 0xa57e, 0x057f,
++      0x1078, 0x1af4, 0x0f7e, 0x7004, 0x2078, 0x1078, 0x4963, 0x0040,
++      0x1aa4, 0x7824, 0xc0f5, 0x7826, 0x0f7f, 0x682b, 0xffff, 0x682f,
++      0xffff, 0x6808, 0x8001, 0x680a, 0x697c, 0x6912, 0x6980, 0x6916,
++      0x0078, 0x1adb, 0x7803, 0x0004, 0x7003, 0x0000, 0x7004, 0xa00d,
++      0x0040, 0x1ac5, 0x6808, 0x8001, 0x680a, 0x00c0, 0x1ac5, 0x7004,
++      0x2060, 0x2009, 0x0048, 0x1078, 0x775c, 0x1078, 0x17c1, 0x0078,
++      0x1adb, 0x7803, 0x0004, 0x7003, 0x0000, 0x7004, 0x2060, 0x6010,
++      0xa005, 0x0040, 0x1ac5, 0x2068, 0x6808, 0x8000, 0x680a, 0x6c28,
++      0x6b2c, 0x1078, 0x17e0, 0x017f, 0x007f, 0x127f, 0x007c, 0x127e,
++      0x2091, 0x2100, 0x7000, 0xa086, 0x0003, 0x00c0, 0x1af2, 0x700c,
++      0x7110, 0xa106, 0x0040, 0x1af2, 0x20e1, 0x9028, 0x700f, 0xa8ed,
++      0x7013, 0xa8ed, 0x127f, 0x007c, 0x0c7e, 0x1078, 0x1b22, 0x20e1,
++      0x9028, 0x700c, 0x7110, 0xa106, 0x0040, 0x1b19, 0x2104, 0xa005,
++      0x0040, 0x1b08, 0x2060, 0x6010, 0x2060, 0x6008, 0x8001, 0x600a,
++      0xa188, 0x0003, 0xa182, 0xa908, 0x0048, 0x1b10, 0x2009, 0xa8ed,
++      0x7112, 0x700c, 0xa106, 0x00c0, 0x1af9, 0x2011, 0x0008, 0x0078,
++      0x1af9, 0x2001, 0x015d, 0x2003, 0x0000, 0x2001, 0x0138, 0x2202,
++      0x0c7f, 0x007c, 0x2001, 0x0138, 0x2014, 0x2003, 0x0000, 0x2021,
++      0xb015, 0x2001, 0x0141, 0x201c, 0xd3dc, 0x00c0, 0x1b3f, 0x2001,
++      0x0109, 0x201c, 0xa39c, 0x0048, 0x00c0, 0x1b3f, 0x2001, 0x0111,
++      0x201c, 0x83ff, 0x00c0, 0x1b3f, 0x8421, 0x00c0, 0x1b29, 0x007c,
++      0x2011, 0x0201, 0x2009, 0x003c, 0x2204, 0xa005, 0x00c0, 0x1b4c,
++      0x8109, 0x00c0, 0x1b44, 0x007c, 0x007c, 0x1078, 0x1b40, 0x0040,
++      0x1b55, 0x780c, 0xd0a4, 0x0040, 0x1b5b, 0x1078, 0x1af4, 0xa085,
++      0x0001, 0x0078, 0x1b5d, 0x1078, 0x1b92, 0x007c, 0x0e7e, 0x2071,
++      0x0200, 0x7808, 0xa084, 0xf000, 0xa10d, 0x1078, 0x1b22, 0x2019,
++      0x5000, 0x8319, 0x0040, 0x1b7c, 0x2001, 0xa908, 0x2004, 0xa086,
++      0x0000, 0x0040, 0x1b7c, 0x2001, 0x0021, 0xd0fc, 0x0040, 0x1b69,
++      0x1078, 0x1eaa, 0x0078, 0x1b67, 0x20e1, 0x7000, 0x7324, 0x7420,
++      0x7028, 0x7028, 0x7426, 0x7037, 0x0001, 0x810f, 0x712e, 0x702f,
++      0x0100, 0x7037, 0x0008, 0x7326, 0x7422, 0x2001, 0x0138, 0x2202,
++      0x0e7f, 0x007c, 0x027e, 0x2001, 0x015d, 0x2001, 0x0000, 0x7908,
++      0xa18c, 0x0fff, 0xa182, 0x0ffd, 0x0048, 0x1ba0, 0x2009, 0x0000,
++      0xa190, 0x0007, 0xa294, 0x1ff8, 0x8214, 0x8214, 0x8214, 0x2001,
++      0x020a, 0x82ff, 0x0040, 0x1bb5, 0x20e1, 0x6000, 0x200c, 0x200c,
++      0x200c, 0x200c, 0x8211, 0x00c0, 0x1bae, 0x20e1, 0x7000, 0x200c,
++      0x200c, 0x7003, 0x0000, 0x20e1, 0x6000, 0x2001, 0x0208, 0x200c,
++      0x2001, 0x0209, 0x2004, 0xa106, 0x0040, 0x1bd4, 0x1078, 0x1b40,
++      0x0040, 0x1bd2, 0x7908, 0xd1ec, 0x00c0, 0x1bd4, 0x790c, 0xd1a4,
++      0x0040, 0x1b97, 0x1078, 0x1af4, 0xa006, 0x027f, 0x007c, 0x7c20,
++      0x7d24, 0x7e30, 0x7f34, 0x700c, 0x7110, 0xa106, 0x0040, 0x1c69,
++      0x7004, 0x017e, 0x210c, 0xa106, 0x017f, 0x0040, 0x1c69, 0x0d7e,
++      0x0c7e, 0x216c, 0x2d00, 0xa005, 0x0040, 0x1c67, 0x681c, 0xa086,
++      0x0008, 0x0040, 0x1c67, 0x6824, 0xd0d4, 0x00c0, 0x1c67, 0x6810,
++      0x2068, 0x6850, 0xd0fc, 0x0040, 0x1c29, 0x8108, 0x2104, 0x6b2c,
++      0xa306, 0x00c0, 0x1c67, 0x8108, 0x2104, 0x6a28, 0xa206, 0x00c0,
++      0x1c67, 0x6850, 0xc0fc, 0xc0f5, 0x6852, 0x686c, 0x7822, 0x6870,
++      0x7826, 0x681c, 0x7832, 0x6820, 0x7836, 0x6818, 0x2060, 0x6034,
++      0xd09c, 0x0040, 0x1c24, 0x6830, 0x2004, 0xac68, 0x6808, 0x783a,
++      0x680c, 0x783e, 0x0078, 0x1c65, 0xa006, 0x783a, 0x783e, 0x0078,
++      0x1c65, 0x8108, 0x2104, 0xa005, 0x00c0, 0x1c67, 0x6b2c, 0xa306,
++      0x00c0, 0x1c67, 0x8108, 0x2104, 0xa005, 0x00c0, 0x1c67, 0x6a28,
++      0xa206, 0x00c0, 0x1c67, 0x6850, 0xc0f5, 0x6852, 0x6830, 0x2004,
++      0x6918, 0xa160, 0xa180, 0x000d, 0x2004, 0xd09c, 0x00c0, 0x1c57,
++      0x6008, 0x7822, 0x686e, 0x600c, 0x7826, 0x6872, 0x6000, 0x7832,
++      0x6004, 0x7836, 0xa006, 0x783a, 0x783e, 0x0078, 0x1c65, 0x6010,
++      0x7822, 0x686e, 0x6014, 0x7826, 0x6872, 0x6000, 0x7832, 0x6004,
++      0x7836, 0x6008, 0x783a, 0x600c, 0x783e, 0x7803, 0x0011, 0x0c7f,
++      0x0d7f, 0x007c, 0x0f7e, 0x0e7e, 0x017e, 0x027e, 0x2071, 0xa8e7,
++      0x2079, 0x0030, 0x2011, 0x0050, 0x7000, 0xa086, 0x0000, 0x0040,
++      0x1c92, 0x8211, 0x0040, 0x1c90, 0x2001, 0x0005, 0x2004, 0xd08c,
++      0x0040, 0x1c79, 0x7904, 0xa18c, 0x0780, 0x017e, 0x1078, 0x1913,
++      0x017f, 0x81ff, 0x00c0, 0x1c90, 0x2011, 0x0050, 0x0078, 0x1c74,
++      0xa085, 0x0001, 0x027f, 0x017f, 0x0e7f, 0x0f7f, 0x007c, 0x7803,
++      0x0004, 0x2009, 0x0064, 0x7804, 0xd0ac, 0x0040, 0x1ce8, 0x8109,
++      0x00c0, 0x1c9b, 0x2009, 0x0100, 0x210c, 0xa18a, 0x0003, 0x1048,
++      0x1332, 0x1078, 0x1fca, 0x0e7e, 0x0f7e, 0x2071, 0xa8d6, 0x2079,
++      0x0010, 0x7004, 0xa086, 0x0000, 0x0040, 0x1ce0, 0x7800, 0x007e,
++      0x7820, 0x007e, 0x7830, 0x007e, 0x7834, 0x007e, 0x7838, 0x007e,
++      0x783c, 0x007e, 0x7803, 0x0004, 0x7823, 0x0000, 0x0005, 0x0005,
++      0x2079, 0x0030, 0x7804, 0xd0ac, 0x10c0, 0x1332, 0x2079, 0x0010,
++      0x007f, 0x783e, 0x007f, 0x783a, 0x007f, 0x7836, 0x007f, 0x7832,
++      0x007f, 0x7822, 0x007f, 0x7802, 0x0f7f, 0x0e7f, 0x0078, 0x1ce6,
++      0x0f7f, 0x0e7f, 0x7804, 0xd0ac, 0x10c0, 0x1332, 0x1078, 0x639b,
++      0x007c, 0x0e7e, 0x2071, 0xa908, 0x7003, 0x0000, 0x0e7f, 0x007c,
++      0x0d7e, 0xa280, 0x0004, 0x206c, 0x694c, 0xd1dc, 0x00c0, 0x1d6b,
++      0x6934, 0xa184, 0x0007, 0x0079, 0x1cfd, 0x1d05, 0x1d56, 0x1d05,
++      0x1d05, 0x1d05, 0x1d3b, 0x1d18, 0x1d07, 0x1078, 0x1332, 0x684c,
++      0xd0b4, 0x0040, 0x1e79, 0x6860, 0x682e, 0x6816, 0x685c, 0x682a,
++      0x6812, 0x687c, 0x680a, 0x6880, 0x680e, 0x6958, 0x0078, 0x1d5e,
++      0x6834, 0xa084, 0x00ff, 0xa086, 0x001e, 0x00c0, 0x1d05, 0x684c,
++      0xd0b4, 0x0040, 0x1e79, 0x6860, 0x682e, 0x6816, 0x685c, 0x682a,
++      0x6812, 0x687c, 0x680a, 0x6880, 0x680e, 0x6804, 0x681a, 0xa080,
++      0x000d, 0x2004, 0xa084, 0x000f, 0xa080, 0x206a, 0x2004, 0x6832,
++      0x6958, 0x0078, 0x1d67, 0xa18c, 0x00ff, 0xa186, 0x0015, 0x00c0,
++      0x1d6b, 0x684c, 0xd0b4, 0x0040, 0x1e79, 0x6804, 0x681a, 0xa080,
++      0x000d, 0x2004, 0xa084, 0x000f, 0xa080, 0x206a, 0x2004, 0x6832,
++      0x6958, 0xa006, 0x682e, 0x682a, 0x0078, 0x1d67, 0x684c, 0xd0b4,
++      0x0040, 0x18ed, 0x6958, 0xa006, 0x682e, 0x682a, 0x2d00, 0x681a,
++      0x6834, 0xa084, 0x000f, 0xa080, 0x206a, 0x2004, 0x6832, 0x6926,
++      0x684c, 0xc0dd, 0x684e, 0x0d7f, 0x007c, 0x0f7e, 0x2079, 0x0020,
++      0x7804, 0xd0fc, 0x10c0, 0x1eaa, 0x0e7e, 0x0d7e, 0x2071, 0xa908,
++      0x7000, 0xa005, 0x00c0, 0x1df0, 0x0c7e, 0x7206, 0xa280, 0x0004,
++      0x205c, 0x7004, 0x2068, 0x7803, 0x0004, 0x6818, 0x0d7e, 0x2068,
++      0x686c, 0x7812, 0x6890, 0x0f7e, 0x20e1, 0x9040, 0x2079, 0x0200,
++      0x781a, 0x2079, 0x0100, 0x8004, 0x78d6, 0x0f7f, 0x0d7f, 0x2b68,
++      0x6824, 0x2050, 0x6818, 0x2060, 0x6830, 0x2040, 0x6034, 0xa0cc,
++      0x000f, 0x6908, 0x2001, 0x04fd, 0x2004, 0xa086, 0x0007, 0x0040,
++      0x1db2, 0xa184, 0x0007, 0x0040, 0x1db2, 0x017e, 0x2009, 0x0008,
++      0xa102, 0x017f, 0xa108, 0x791a, 0x7116, 0x701e, 0x680c, 0xa081,
++      0x0000, 0x781e, 0x701a, 0xa006, 0x700e, 0x7012, 0x7004, 0x692c,
++      0x6814, 0xa106, 0x00c0, 0x1dc9, 0x6928, 0x6810, 0xa106, 0x0040,
++      0x1dd6, 0x037e, 0x047e, 0x6b14, 0x6c10, 0x1078, 0x208a, 0x047f,
++      0x037f, 0x0040, 0x1dd6, 0x0c7f, 0x0078, 0x1df0, 0x8aff, 0x00c0,
++      0x1dde, 0x0c7f, 0xa085, 0x0001, 0x0078, 0x1df0, 0x127e, 0x2091,
++      0x8000, 0x2079, 0x0020, 0x2009, 0x0001, 0x1078, 0x1df4, 0x0040,
++      0x1ded, 0x2009, 0x0001, 0x1078, 0x1df4, 0x127f, 0x0c7f, 0xa006,
++      0x0d7f, 0x0e7f, 0x0f7f, 0x007c, 0x077e, 0x067e, 0x057e, 0x047e,
++      0x037e, 0x027e, 0x8aff, 0x0040, 0x1e72, 0x700c, 0x7214, 0xa23a,
++      0x7010, 0x7218, 0xa203, 0x0048, 0x1e71, 0xa705, 0x0040, 0x1e71,
++      0xa03e, 0x2730, 0x6850, 0xd0fc, 0x00c0, 0x1e24, 0x0d7e, 0x2804,
++      0xac68, 0x2900, 0x0079, 0x1e14, 0x1e53, 0x1e34, 0x1e34, 0x1e53,
++      0x1e53, 0x1e4b, 0x1e53, 0x1e34, 0x1e53, 0x1e3a, 0x1e3a, 0x1e53,
++      0x1e53, 0x1e53, 0x1e42, 0x1e3a, 0xc0fc, 0x6852, 0x6b6c, 0x6a70,
++      0x6d1c, 0x6c20, 0xd99c, 0x0040, 0x1e57, 0x0d7e, 0x2804, 0xac68,
++      0x6f08, 0x6e0c, 0x0078, 0x1e56, 0x6b08, 0x6a0c, 0x6d00, 0x6c04,
++      0x0078, 0x1e56, 0x6b10, 0x6a14, 0x6d00, 0x6c04, 0x6f08, 0x6e0c,
++      0x0078, 0x1e56, 0x0d7f, 0x0d7e, 0x6834, 0xa084, 0x00ff, 0xa086,
++      0x001e, 0x00c0, 0x1e53, 0x0d7f, 0x1078, 0x2026, 0x00c0, 0x1dfa,
++      0xa00e, 0x0078, 0x1e72, 0x0d7f, 0x1078, 0x1332, 0x0d7f, 0x7b22,
++      0x7a26, 0x7d32, 0x7c36, 0x7f3a, 0x7e3e, 0x7902, 0x7000, 0x8000,
++      0x7002, 0x6828, 0xa300, 0x682a, 0x682c, 0xa201, 0x682e, 0x700c,
++      0xa300, 0x700e, 0x7010, 0xa201, 0x7012, 0x1078, 0x2026, 0x0078,
++      0x1e72, 0xa006, 0x027f, 0x037f, 0x047f, 0x057f, 0x067f, 0x077f,
++      0x007c, 0x1078, 0x1332, 0x027e, 0x2001, 0x0105, 0x2003, 0x0010,
++      0x20e1, 0x9040, 0x7803, 0x0004, 0x7003, 0x0000, 0x7004, 0x2060,
++      0x0d7e, 0x6010, 0x2068, 0x1078, 0x8d06, 0x0040, 0x1e92, 0x6850,
++      0xc0bd, 0x6852, 0x0d7f, 0x0c7e, 0x1078, 0x8a01, 0x0c7f, 0x2001,
++      0xa8c0, 0x2004, 0xac06, 0x00c0, 0x1ea7, 0x20e1, 0x9040, 0x1078,
++      0x738a, 0x2011, 0x0000, 0x1078, 0x70ea, 0x1078, 0x639b, 0x027f,
++      0x0078, 0x1f76, 0x127e, 0x2091, 0x2200, 0x007e, 0x017e, 0x0f7e,
++      0x0e7e, 0x0d7e, 0x0c7e, 0x2079, 0x0020, 0x2071, 0xa908, 0x2b68,
++      0x6818, 0x2060, 0x7904, 0x7803, 0x0002, 0xa184, 0x0700, 0x00c0,
++      0x1e7b, 0x7000, 0x0079, 0x1ec4, 0x1f76, 0x1ec8, 0x1f43, 0x1f74,
++      0x8001, 0x7002, 0xd19c, 0x00c0, 0x1edc, 0x8aff, 0x0040, 0x1efb,
++      0x2009, 0x0001, 0x1078, 0x1df4, 0x0040, 0x1f76, 0x2009, 0x0001,
++      0x1078, 0x1df4, 0x0078, 0x1f76, 0x7803, 0x0004, 0xd194, 0x0040,
++      0x1eec, 0x6850, 0xc0fc, 0x6852, 0x8aff, 0x00c0, 0x1ef1, 0x684c,
++      0xc0f5, 0x684e, 0x0078, 0x1ef1, 0x1078, 0x203f, 0x6850, 0xc0fd,
++      0x6852, 0x2a00, 0x6826, 0x2c00, 0x681a, 0x2800, 0x6832, 0x7003,
++      0x0000, 0x0078, 0x1f76, 0x711c, 0x81ff, 0x0040, 0x1f11, 0x7918,
++      0x7922, 0x7827, 0x0000, 0x7803, 0x0001, 0x7000, 0x8000, 0x7002,
++      0x700c, 0xa100, 0x700e, 0x7010, 0xa081, 0x0000, 0x7012, 0x0078,
++      0x1f76, 0x0f7e, 0x027e, 0x781c, 0x007e, 0x7818, 0x007e, 0x2079,
++      0x0100, 0x7a14, 0xa284, 0x0004, 0xa085, 0x0012, 0x7816, 0x037e,
++      0x2019, 0x1000, 0x8319, 0x1040, 0x1332, 0x7820, 0xd0bc, 0x00c0,
++      0x1f22, 0x037f, 0x79c8, 0x007f, 0xa102, 0x017f, 0x007e, 0x017e,
++      0x79c4, 0x007f, 0xa103, 0x78c6, 0x007f, 0x78ca, 0xa284, 0x0004,
++      0xa085, 0x0012, 0x7816, 0x027f, 0x0f7f, 0x7803, 0x0008, 0x7003,
++      0x0000, 0x0078, 0x1f76, 0x8001, 0x7002, 0xd194, 0x0040, 0x1f58,
++      0x7804, 0xd0fc, 0x00c0, 0x1eba, 0xd19c, 0x00c0, 0x1f72, 0x8aff,
++      0x0040, 0x1f76, 0x2009, 0x0001, 0x1078, 0x1df4, 0x0078, 0x1f76,
++      0x027e, 0x037e, 0x6b28, 0x6a2c, 0x1078, 0x203f, 0x0d7e, 0x2804,
++      0xac68, 0x6034, 0xd09c, 0x00c0, 0x1f6b, 0x6808, 0xa31a, 0x680c,
++      0xa213, 0x0078, 0x1f6f, 0x6810, 0xa31a, 0x6814, 0xa213, 0x0d7f,
++      0x0078, 0x1eec, 0x0078, 0x1eec, 0x1078, 0x1332, 0x0c7f, 0x0d7f,
++      0x0e7f, 0x0f7f, 0x017f, 0x007f, 0x127f, 0x007c, 0x0f7e, 0x0e7e,
++      0x2071, 0xa908, 0x7000, 0xa086, 0x0000, 0x0040, 0x1fc7, 0x2079,
++      0x0020, 0x017e, 0x2009, 0x0207, 0x210c, 0xd194, 0x0040, 0x1fa4,
++      0x2009, 0x020c, 0x210c, 0xa184, 0x0003, 0x0040, 0x1fa4, 0x1078,
++      0xa5d2, 0x2001, 0x0133, 0x2004, 0xa005, 0x1040, 0x1332, 0x20e1,
++      0x9040, 0x2001, 0x020c, 0x2102, 0x2009, 0x0206, 0x2104, 0x2009,
++      0x0203, 0x210c, 0xa106, 0x00c0, 0x1faf, 0x20e1, 0x9040, 0x7804,
++      0xd0fc, 0x0040, 0x1f8a, 0x1078, 0x1eaa, 0x7000, 0xa086, 0x0000,
++      0x00c0, 0x1f8a, 0x017f, 0x7803, 0x0004, 0x7804, 0xd0ac, 0x00c0,
++      0x1fbd, 0x20e1, 0x9040, 0x7803, 0x0002, 0x7003, 0x0000, 0x0e7f,
++      0x0f7f, 0x007c, 0x027e, 0x0c7e, 0x0d7e, 0x0e7e, 0x0f7e, 0x2071,
++      0xa908, 0x2079, 0x0020, 0x7000, 0xa086, 0x0000, 0x0040, 0x2003,
++      0x7004, 0x2060, 0x6010, 0x2068, 0x1078, 0x8d06, 0x0040, 0x1fed,
++      0x6850, 0xc0b5, 0x6852, 0x680c, 0x7a1c, 0xa206, 0x00c0, 0x1fed,
++      0x6808, 0x7a18, 0xa206, 0x0040, 0x2009, 0x2001, 0x0105, 0x2003,
++      0x0010, 0x20e1, 0x9040, 0x7803, 0x0004, 0x7003, 0x0000, 0x7004,
++      0x2060, 0x1078, 0x8a01, 0x20e1, 0x9040, 0x1078, 0x738a, 0x2011,
++      0x0000, 0x1078, 0x70ea, 0x0f7f, 0x0e7f, 0x0d7f, 0x0c7f, 0x027f,
++      0x007c, 0x6810, 0x6a14, 0xa205, 0x00c0, 0x1fed, 0x684c, 0xc0dc,
++      0x684e, 0x2c10, 0x1078, 0x1cf0, 0x2001, 0x0105, 0x2003, 0x0010,
++      0x20e1, 0x9040, 0x7803, 0x0004, 0x7003, 0x0000, 0x2069, 0xa8b1,
++      0x6833, 0x0000, 0x683f, 0x0000, 0x0078, 0x2003, 0x8840, 0x2804,
++      0xa005, 0x00c0, 0x203a, 0x6004, 0xa005, 0x0040, 0x203c, 0x681a,
++      0x2060, 0x6034, 0xa084, 0x000f, 0xa080, 0x206a, 0x2044, 0x88ff,
++      0x1040, 0x1332, 0x8a51, 0x007c, 0x2051, 0x0000, 0x007c, 0x8a50,
++      0x8841, 0x2804, 0xa005, 0x00c0, 0x2059, 0x2c00, 0xad06, 0x0040,
++      0x204e, 0x6000, 0xa005, 0x00c0, 0x204e, 0x2d00, 0x2060, 0x681a,
++      0x6034, 0xa084, 0x000f, 0xa080, 0x207a, 0x2044, 0x88ff, 0x1040,
++      0x1332, 0x007c, 0x0000, 0x0011, 0x0015, 0x0019, 0x001d, 0x0021,
++      0x0025, 0x0029, 0x0000, 0x000f, 0x0015, 0x001b, 0x0021, 0x0027,
++      0x0000, 0x0000, 0x0000, 0x205f, 0x205b, 0x0000, 0x0000, 0x2069,
++      0x0000, 0x205f, 0x0000, 0x2066, 0x2063, 0x0000, 0x0000, 0x0000,
++      0x2069, 0x2066, 0x0000, 0x2061, 0x2061, 0x0000, 0x0000, 0x2069,
++      0x0000, 0x2061, 0x0000, 0x2067, 0x2067, 0x0000, 0x0000, 0x0000,
++      0x2069, 0x2067, 0x0a7e, 0x097e, 0x087e, 0x6b2e, 0x6c2a, 0x6858,
++      0xa055, 0x0040, 0x212d, 0x2d60, 0x6034, 0xa0cc, 0x000f, 0xa9c0,
++      0x206a, 0xa986, 0x0007, 0x0040, 0x20a5, 0xa986, 0x000e, 0x0040,
++      0x20a5, 0xa986, 0x000f, 0x00c0, 0x20a9, 0x605c, 0xa422, 0x6060,
++      0xa31a, 0x2804, 0xa045, 0x00c0, 0x20b7, 0x0050, 0x20b1, 0x0078,
++      0x212d, 0x6004, 0xa065, 0x0040, 0x212d, 0x0078, 0x2094, 0x2804,
++      0xa005, 0x0040, 0x20d5, 0xac68, 0xd99c, 0x00c0, 0x20c5, 0x6808,
++      0xa422, 0x680c, 0xa31b, 0x0078, 0x20c9, 0x6810, 0xa422, 0x6814,
++      0xa31b, 0x0048, 0x20f4, 0x2300, 0xa405, 0x0040, 0x20db, 0x8a51,
++      0x0040, 0x212d, 0x8840, 0x0078, 0x20b7, 0x6004, 0xa065, 0x0040,
++      0x212d, 0x0078, 0x2094, 0x8a51, 0x0040, 0x212d, 0x8840, 0x2804,
++      0xa005, 0x00c0, 0x20ee, 0x6004, 0xa065, 0x0040, 0x212d, 0x6034,
++      0xa0cc, 0x000f, 0xa9c0, 0x206a, 0x2804, 0x2040, 0x2b68, 0x6850,
++      0xc0fc, 0x6852, 0x0078, 0x2121, 0x8422, 0x8420, 0x831a, 0xa399,
++      0x0000, 0x0d7e, 0x2b68, 0x6c6e, 0x6b72, 0x0d7f, 0xd99c, 0x00c0,
++      0x210f, 0x6908, 0x2400, 0xa122, 0x690c, 0x2300, 0xa11b, 0x1048,
++      0x1332, 0x6800, 0xa420, 0x6804, 0xa319, 0x0078, 0x211b, 0x6910,
++      0x2400, 0xa122, 0x6914, 0x2300, 0xa11b, 0x1048, 0x1332, 0x6800,
++      0xa420, 0x6804, 0xa319, 0x2b68, 0x6c1e, 0x6b22, 0x6850, 0xc0fd,
++      0x6852, 0x2c00, 0x681a, 0x2800, 0x6832, 0x2a00, 0x6826, 0x007f,
++      0x007f, 0x007f, 0xa006, 0x0078, 0x2132, 0x087f, 0x097f, 0x0a7f,
++      0xa085, 0x0001, 0x007c, 0x2001, 0x0005, 0x2004, 0xa084, 0x0007,
++      0x0079, 0x213a, 0x2142, 0x2143, 0x2146, 0x2149, 0x214e, 0x2151,
++      0x2156, 0x215b, 0x007c, 0x1078, 0x1eaa, 0x007c, 0x1078, 0x1913,
++      0x007c, 0x1078, 0x1913, 0x1078, 0x1eaa, 0x007c, 0x1078, 0x14be,
++      0x007c, 0x1078, 0x1eaa, 0x1078, 0x14be, 0x007c, 0x1078, 0x1913,
++      0x1078, 0x14be, 0x007c, 0x1078, 0x1913, 0x1078, 0x1eaa, 0x1078,
++      0x14be, 0x007c, 0x127e, 0x2091, 0x2300, 0x2079, 0x0200, 0x2071,
++      0xab80, 0x2069, 0xa600, 0x2009, 0x0004, 0x7912, 0x7817, 0x0004,
++      0x1078, 0x251f, 0x781b, 0x0002, 0x20e1, 0x8700, 0x127f, 0x007c,
++      0x127e, 0x2091, 0x2300, 0x781c, 0xa084, 0x0007, 0x0079, 0x2180,
++      0x21a4, 0x2188, 0x218c, 0x2190, 0x2196, 0x219a, 0x219e, 0x21a2,
++      0x1078, 0x548e, 0x0078, 0x21a4, 0x1078, 0x54da, 0x0078, 0x21a4,
++      0x1078, 0x548e, 0x1078, 0x54da, 0x0078, 0x21a4, 0x1078, 0x21a6,
++      0x0078, 0x21a4, 0x1078, 0x21a6, 0x0078, 0x21a4, 0x1078, 0x21a6,
++      0x0078, 0x21a4, 0x1078, 0x21a6, 0x127f, 0x007c, 0x007e, 0x017e,
++      0x027e, 0x1078, 0xa5d2, 0x7930, 0xa184, 0x0003, 0x0040, 0x21c9,
++      0x2001, 0xa8c0, 0x2004, 0xa005, 0x0040, 0x21c5, 0x2001, 0x0133,
++      0x2004, 0xa005, 0x1040, 0x1332, 0x0c7e, 0x2001, 0xa8c0, 0x2064,
++      0x1078, 0x8a01, 0x0c7f, 0x0078, 0x21f2, 0x20e1, 0x9040, 0x0078,
++      0x21f2, 0xa184, 0x0030, 0x0040, 0x21da, 0x6a00, 0xa286, 0x0003,
++      0x00c0, 0x21d4, 0x0078, 0x21d6, 0x1078, 0x4224, 0x20e1, 0x9010,
++      0x0078, 0x21f2, 0xa184, 0x00c0, 0x0040, 0x21ec, 0x0e7e, 0x037e,
++      0x047e, 0x057e, 0x2071, 0xa8e7, 0x1078, 0x1af4, 0x057f, 0x047f,
++      0x037f, 0x0e7f, 0x0078, 0x21f2, 0xa184, 0x0300, 0x0040, 0x21f2,
++      0x20e1, 0x9020, 0x7932, 0x027f, 0x017f, 0x007f, 0x007c, 0x017e,
++      0x0e7e, 0x0f7e, 0x2071, 0xa600, 0x7128, 0x2001, 0xa890, 0x2102,
++      0x2001, 0xa898, 0x2102, 0xa182, 0x0211, 0x00c8, 0x220b, 0x2009,
++      0x0008, 0x0078, 0x2235, 0xa182, 0x0259, 0x00c8, 0x2213, 0x2009,
++      0x0007, 0x0078, 0x2235, 0xa182, 0x02c1, 0x00c8, 0x221b, 0x2009,
++      0x0006, 0x0078, 0x2235, 0xa182, 0x0349, 0x00c8, 0x2223, 0x2009,
++      0x0005, 0x0078, 0x2235, 0xa182, 0x0421, 0x00c8, 0x222b, 0x2009,
++      0x0004, 0x0078, 0x2235, 0xa182, 0x0581, 0x00c8, 0x2233, 0x2009,
++      0x0003, 0x0078, 0x2235, 0x2009, 0x0002, 0x2079, 0x0200, 0x7912,
++      0x7817, 0x0004, 0x1078, 0x251f, 0x0f7f, 0x0e7f, 0x017f, 0x007c,
++      0x127e, 0x2091, 0x2200, 0x2061, 0x0100, 0x2071, 0xa600, 0x6024,
++      0x6026, 0x6053, 0x0030, 0x6033, 0x00ef, 0x60e7, 0x0000, 0x60eb,
++      0x00ef, 0x60e3, 0x0008, 0x604b, 0xf7f7, 0x6043, 0x0000, 0x602f,
++      0x0080, 0x602f, 0x0000, 0x6007, 0x0eaf, 0x600f, 0x00ff, 0x602b,
++      0x002f, 0x127f, 0x007c, 0x2001, 0xa630, 0x2003, 0x0000, 0x2001,
++      0xa62f, 0x2003, 0x0001, 0x007c, 0x127e, 0x2091, 0x2200, 0x007e,
++      0x017e, 0x027e, 0x6124, 0xa184, 0x002c, 0x00c0, 0x227b, 0xa184,
++      0x0007, 0x0079, 0x2281, 0xa195, 0x0004, 0xa284, 0x0007, 0x0079,
++      0x2281, 0x22ad, 0x2289, 0x228d, 0x2291, 0x2297, 0x229b, 0x22a1,
++      0x22a7, 0x1078, 0x5c56, 0x0078, 0x22ad, 0x1078, 0x5d45, 0x0078,
++      0x22ad, 0x1078, 0x5d45, 0x1078, 0x5c56, 0x0078, 0x22ad, 0x1078,
++      0x22b2, 0x0078, 0x22ad, 0x1078, 0x5c56, 0x1078, 0x22b2, 0x0078,
++      0x22ad, 0x1078, 0x5d45, 0x1078, 0x22b2, 0x0078, 0x22ad, 0x1078,
++      0x5d45, 0x1078, 0x5c56, 0x1078, 0x22b2, 0x027f, 0x017f, 0x007f,
++      0x127f, 0x007c, 0x6124, 0xd1ac, 0x0040, 0x23ac, 0x017e, 0x047e,
++      0x0c7e, 0x644c, 0xa486, 0xf0f0, 0x00c0, 0x22c5, 0x2061, 0x0100,
++      0x644a, 0x6043, 0x0090, 0x6043, 0x0010, 0x74c6, 0xa48c, 0xff00,
++      0x7034, 0xd084, 0x0040, 0x22dd, 0xa186, 0xf800, 0x00c0, 0x22dd,
++      0x703c, 0xd084, 0x00c0, 0x22dd, 0xc085, 0x703e, 0x037e, 0x2418,
++      0x2011, 0x8016, 0x1078, 0x361b, 0x037f, 0xa196, 0xff00, 0x0040,
++      0x231f, 0x6030, 0xa084, 0x00ff, 0x810f, 0xa116, 0x0040, 0x231f,
++      0x7130, 0xd184, 0x00c0, 0x231f, 0x2011, 0xa653, 0x2214, 0xd2ec,
++      0x0040, 0x22fa, 0xc18d, 0x7132, 0x2011, 0xa653, 0x2214, 0xd2ac,
++      0x00c0, 0x231f, 0x6240, 0xa294, 0x0010, 0x0040, 0x2306, 0x6248,
++      0xa294, 0xff00, 0xa296, 0xff00, 0x0040, 0x231f, 0x7030, 0xd08c,
++      0x0040, 0x2371, 0x7034, 0xd08c, 0x00c0, 0x2316, 0x2001, 0xa60c,
++      0x200c, 0xd1ac, 0x00c0, 0x2371, 0xc1ad, 0x2102, 0x037e, 0x73c4,
++      0x2011, 0x8013, 0x1078, 0x361b, 0x037f, 0x0078, 0x2371, 0x7034,
++      0xd08c, 0x00c0, 0x232b, 0x2001, 0xa60c, 0x200c, 0xd1ac, 0x00c0,
++      0x2371, 0xc1ad, 0x2102, 0x037e, 0x73c4, 0x2011, 0x8013, 0x1078,
++      0x361b, 0x037f, 0x7130, 0xc185, 0x7132, 0x2011, 0xa653, 0x220c,
++      0xd1a4, 0x0040, 0x2355, 0x017e, 0x2009, 0x0001, 0x2011, 0x0100,
++      0x1078, 0x5bf1, 0x2019, 0x000e, 0x1078, 0xa195, 0xa484, 0x00ff,
++      0xa080, 0x29c0, 0x200c, 0xa18c, 0xff00, 0x810f, 0x8127, 0xa006,
++      0x2009, 0x000e, 0x1078, 0xa21d, 0x017f, 0xd1ac, 0x00c0, 0x2362,
++      0x017e, 0x2009, 0x0000, 0x2019, 0x0004, 0x1078, 0x284f, 0x017f,
++      0x0078, 0x2371, 0x157e, 0x20a9, 0x007f, 0x2009, 0x0000, 0x1078,
++      0x45c4, 0x00c0, 0x236d, 0x1078, 0x42f8, 0x8108, 0x00f0, 0x2367,
++      0x157f, 0x0c7f, 0x047f, 0x0f7e, 0x2079, 0xa8c4, 0x783c, 0xa086,
++      0x0000, 0x0040, 0x2383, 0x6027, 0x0004, 0x783f, 0x0000, 0x2079,
++      0x0140, 0x7803, 0x0000, 0x0f7f, 0x2011, 0x0003, 0x1078, 0x70e0,
++      0x2011, 0x0002, 0x1078, 0x70ea, 0x1078, 0x6fc4, 0x037e, 0x2019,
++      0x0000, 0x1078, 0x7058, 0x037f, 0x60e3, 0x0000, 0x017f, 0x2001,
++      0xa600, 0x2014, 0xa296, 0x0004, 0x00c0, 0x23a4, 0xd19c, 0x00c0,
++      0x23ac, 0x6228, 0xc29d, 0x622a, 0x2003, 0x0001, 0x2001, 0xa622,
++      0x2003, 0x0000, 0x6027, 0x0020, 0xd194, 0x0040, 0x2490, 0x0f7e,
++      0x2079, 0xa8c4, 0x783c, 0xa086, 0x0001, 0x00c0, 0x23d0, 0x017e,
++      0x6027, 0x0004, 0x783f, 0x0000, 0x2079, 0x0140, 0x7803, 0x1000,
++      0x7803, 0x0000, 0x2079, 0xa8b1, 0x7807, 0x0000, 0x7833, 0x0000,
++      0x1078, 0x62d1, 0x1078, 0x639b, 0x017f, 0x0f7f, 0x0078, 0x2490,
++      0x0f7f, 0x017e, 0x3900, 0xa082, 0xa9e3, 0x00c8, 0x23db, 0x017e,
++      0x1078, 0x747a, 0x017f, 0x6220, 0xd2b4, 0x0040, 0x2446, 0x1078,
++      0x5acb, 0x1078, 0x6e0f, 0x6027, 0x0004, 0x0f7e, 0x2019, 0xa8ba,
++      0x2304, 0xa07d, 0x0040, 0x241c, 0x7804, 0xa086, 0x0032, 0x00c0,
++      0x241c, 0x0d7e, 0x0c7e, 0x0e7e, 0x2069, 0x0140, 0x618c, 0x6288,
++      0x7818, 0x608e, 0x7808, 0x608a, 0x6043, 0x0002, 0x2001, 0x0003,
++      0x8001, 0x00c0, 0x2400, 0x6043, 0x0000, 0x6803, 0x1000, 0x6803,
++      0x0000, 0x618e, 0x628a, 0x1078, 0x61cd, 0x1078, 0x62d1, 0x7810,
++      0x2070, 0x7037, 0x0103, 0x2f60, 0x1078, 0x772d, 0x0e7f, 0x0c7f,
++      0x0d7f, 0x0f7f, 0x017f, 0x007c, 0x0f7f, 0x0d7e, 0x2069, 0x0140,
++      0x6804, 0xa084, 0x4000, 0x0040, 0x2429, 0x6803, 0x1000, 0x6803,
++      0x0000, 0x0d7f, 0x0c7e, 0x2061, 0xa8b1, 0x6028, 0xa09a, 0x00c8,
++      0x00c8, 0x2439, 0x8000, 0x602a, 0x0c7f, 0x1078, 0x6e01, 0x0078,
++      0x248f, 0x2019, 0xa8ba, 0x2304, 0xa065, 0x0040, 0x2443, 0x2009,
++      0x0027, 0x1078, 0x775c, 0x0c7f, 0x0078, 0x248f, 0xd2bc, 0x0040,
++      0x248f, 0x1078, 0x5ad8, 0x6017, 0x0010, 0x6027, 0x0004, 0x0d7e,
++      0x2069, 0x0140, 0x6804, 0xa084, 0x4000, 0x0040, 0x245b, 0x6803,
++      0x1000, 0x6803, 0x0000, 0x0d7f, 0x0c7e, 0x2061, 0xa8b1, 0x6044,
++      0xa09a, 0x00c8, 0x00c8, 0x247e, 0x8000, 0x6046, 0x603c, 0x0c7f,
++      0xa005, 0x0040, 0x248f, 0x2009, 0x07d0, 0x1078, 0x5ad0, 0xa080,
++      0x0007, 0x2004, 0xa086, 0x0006, 0x00c0, 0x247a, 0x6017, 0x0012,
++      0x0078, 0x248f, 0x6017, 0x0016, 0x0078, 0x248f, 0x037e, 0x2019,
++      0x0001, 0x1078, 0x7058, 0x037f, 0x2019, 0xa8c0, 0x2304, 0xa065,
++      0x0040, 0x248e, 0x2009, 0x004f, 0x1078, 0x775c, 0x0c7f, 0x017f,
++      0xd19c, 0x0040, 0x24e4, 0x7034, 0xd0ac, 0x00c0, 0x24c1, 0x017e,
++      0x157e, 0x6027, 0x0008, 0x602f, 0x0020, 0x20a9, 0x000a, 0x00f0,
++      0x249f, 0x602f, 0x0000, 0x6150, 0xa185, 0x1400, 0x6052, 0x20a9,
++      0x0320, 0x00e0, 0x24a9, 0x2091, 0x6000, 0x6020, 0xd09c, 0x00c0,
++      0x24b8, 0x157f, 0x6152, 0x017f, 0x6027, 0x0008, 0x0078, 0x24e4,
++      0x1078, 0x2577, 0x00f0, 0x24a9, 0x157f, 0x6152, 0x017f, 0x6027,
++      0x0008, 0x017e, 0x6028, 0xc09c, 0x602a, 0x2011, 0x0003, 0x1078,
++      0x70e0, 0x2011, 0x0002, 0x1078, 0x70ea, 0x1078, 0x6fc4, 0x037e,
++      0x2019, 0x0000, 0x1078, 0x7058, 0x037f, 0x60e3, 0x0000, 0x1078,
++      0xa5ad, 0x1078, 0xa5cb, 0x2001, 0xa600, 0x2003, 0x0004, 0x6027,
++      0x0008, 0x1078, 0x1246, 0x017f, 0xa18c, 0xffd0, 0x6126, 0x007c,
++      0x007e, 0x017e, 0x027e, 0x0e7e, 0x0f7e, 0x127e, 0x2091, 0x8000,
++      0x2071, 0xa600, 0x71bc, 0x70be, 0xa116, 0x0040, 0x2518, 0x81ff,
++      0x0040, 0x2500, 0x2011, 0x8011, 0x1078, 0x361b, 0x0078, 0x2518,
++      0x2011, 0x8012, 0x1078, 0x361b, 0x2001, 0xa672, 0x2004, 0xd0fc,
++      0x00c0, 0x2518, 0x037e, 0x0c7e, 0x1078, 0x6f9f, 0x2061, 0x0100,
++      0x2019, 0x0028, 0x2009, 0x0000, 0x1078, 0x284f, 0x0c7f, 0x037f,
++      0x127f, 0x0f7f, 0x0e7f, 0x027f, 0x017f, 0x007f, 0x007c, 0x0c7e,
++      0x0f7e, 0x007e, 0x027e, 0x2061, 0x0100, 0xa190, 0x253b, 0x2204,
++      0x60f2, 0x2011, 0x2548, 0x6000, 0xa082, 0x0003, 0x00c8, 0x2534,
++      0x2001, 0x00ff, 0x0078, 0x2535, 0x2204, 0x60ee, 0x027f, 0x007f,
++      0x0f7f, 0x0c7f, 0x007c, 0x0840, 0x0840, 0x0840, 0x0580, 0x0420,
++      0x0348, 0x02c0, 0x0258, 0x0210, 0x01a8, 0x01a8, 0x01a8, 0x01a8,
++      0x0140, 0x00f8, 0x00d0, 0x00b0, 0x00a0, 0x2028, 0xa18c, 0x00ff,
++      0x2130, 0xa094, 0xff00, 0x00c0, 0x2558, 0x81ff, 0x0040, 0x255c,
++      0x1078, 0x5761, 0x0078, 0x2563, 0xa080, 0x29c0, 0x200c, 0xa18c,
++      0xff00, 0x810f, 0xa006, 0x007c, 0xa080, 0x29c0, 0x200c, 0xa18c,
++      0x00ff, 0x007c, 0x0c7e, 0x2061, 0xa600, 0x6030, 0x0040, 0x2573,
++      0xc09d, 0x0078, 0x2574, 0xc09c, 0x6032, 0x0c7f, 0x007c, 0x007e,
++      0x157e, 0x0f7e, 0x2079, 0x0100, 0x20a9, 0x000a, 0x7854, 0xd08c,
++      0x00c0, 0x2584, 0x00f0, 0x257e, 0x0f7f, 0x157f, 0x007f, 0x007c,
++      0x0c7e, 0x007e, 0x2061, 0x0100, 0x6030, 0x007e, 0x6048, 0x007e,
++      0x60e4, 0x007e, 0x60e8, 0x007e, 0x6050, 0x007e, 0x60f0, 0x007e,
++      0x60ec, 0x007e, 0x600c, 0x007e, 0x6004, 0x007e, 0x6028, 0x007e,
++      0x60e0, 0x007e, 0x602f, 0x0100, 0x602f, 0x0000, 0x0005, 0x0005,
++      0x0005, 0x0005, 0x602f, 0x0040, 0x602f, 0x0000, 0x007f, 0x60e2,
++      0x007f, 0x602a, 0x007f, 0x6006, 0x007f, 0x600e, 0x007f, 0x60ee,
++      0x007f, 0x60f2, 0x007f, 0x6052, 0x007f, 0x60ea, 0x007f, 0x60e6,
++      0x007f, 0x604a, 0x007f, 0x6032, 0x007f, 0x0c7f, 0x007c, 0x25e7,
++      0x25eb, 0x25ef, 0x25f5, 0x25fb, 0x2601, 0x2607, 0x260f, 0x2617,
++      0x261d, 0x2623, 0x262b, 0x2633, 0x263b, 0x2643, 0x264d, 0x2657,
++      0x2657, 0x2657, 0x2657, 0x2657, 0x2657, 0x2657, 0x2657, 0x2657,
++      0x2657, 0x2657, 0x2657, 0x2657, 0x2657, 0x2657, 0x2657, 0x107e,
++      0x007e, 0x0078, 0x2670, 0x107e, 0x007e, 0x0078, 0x2670, 0x107e,
++      0x007e, 0x1078, 0x226c, 0x0078, 0x2670, 0x107e, 0x007e, 0x1078,
++      0x226c, 0x0078, 0x2670, 0x107e, 0x007e, 0x1078, 0x2133, 0x0078,
++      0x2670, 0x107e, 0x007e, 0x1078, 0x2133, 0x0078, 0x2670, 0x107e,
++      0x007e, 0x1078, 0x226c, 0x1078, 0x2133, 0x0078, 0x2670, 0x107e,
++      0x007e, 0x1078, 0x226c, 0x1078, 0x2133, 0x0078, 0x2670, 0x107e,
++      0x007e, 0x1078, 0x2178, 0x0078, 0x2670, 0x107e, 0x007e, 0x1078,
++      0x2178, 0x0078, 0x2670, 0x107e, 0x007e, 0x1078, 0x226c, 0x1078,
++      0x2178, 0x0078, 0x2670, 0x107e, 0x007e, 0x1078, 0x226c, 0x1078,
++      0x2178, 0x0078, 0x2670, 0x107e, 0x007e, 0x1078, 0x2133, 0x1078,
++      0x2178, 0x0078, 0x2670, 0x107e, 0x007e, 0x1078, 0x2133, 0x1078,
++      0x2178, 0x0078, 0x2670, 0x107e, 0x007e, 0x1078, 0x226c, 0x1078,
++      0x2133, 0x1078, 0x2178, 0x0078, 0x2670, 0x107e, 0x007e, 0x1078,
++      0x226c, 0x1078, 0x2133, 0x1078, 0x2178, 0x0078, 0x2670, 0x0005,
++      0x0078, 0x2657, 0xb084, 0x003c, 0x8004, 0x8004, 0x0079, 0x2660,
++      0x2670, 0x25ed, 0x25f1, 0x25f7, 0x25fd, 0x2603, 0x2609, 0x2611,
++      0x2619, 0x261f, 0x2625, 0x262d, 0x2635, 0x263d, 0x2645, 0x264f,
++      0x0008, 0x265a, 0x007f, 0x107f, 0x2091, 0x8001, 0x007c, 0x0c7e,
++      0x027e, 0x047e, 0x2021, 0x0000, 0x1078, 0x4967, 0x00c0, 0x2772,
++      0x70cc, 0xd09c, 0x0040, 0x268e, 0xd084, 0x00c0, 0x268e, 0xd0bc,
++      0x00c0, 0x2772, 0x1078, 0x2776, 0x0078, 0x2772, 0xd0cc, 0x00c0,
++      0x2772, 0xd094, 0x0040, 0x2698, 0x7097, 0xffff, 0x0078, 0x2772,
++      0x2001, 0x010c, 0x203c, 0x7284, 0xd284, 0x0040, 0x2701, 0xd28c,
++      0x00c0, 0x2701, 0x037e, 0x7394, 0xa38e, 0xffff, 0x0040, 0x26ab,
++      0x83ff, 0x00c0, 0x26ad, 0x2019, 0x0001, 0x8314, 0xa2e0, 0xacc0,
++      0x2c04, 0xa38c, 0x0001, 0x0040, 0x26ba, 0xa084, 0xff00, 0x8007,
++      0x0078, 0x26bc, 0xa084, 0x00ff, 0xa70e, 0x0040, 0x26f6, 0xa08e,
++      0x0000, 0x0040, 0x26f6, 0xa08e, 0x00ff, 0x00c0, 0x26d3, 0x7230,
++      0xd284, 0x00c0, 0x26fc, 0x7284, 0xc28d, 0x7286, 0x7097, 0xffff,
++      0x037f, 0x0078, 0x2701, 0x2009, 0x0000, 0x1078, 0x254d, 0x1078,
++      0x455c, 0x00c0, 0x26f9, 0x6004, 0xa084, 0x00ff, 0xa086, 0x0006,
++      0x00c0, 0x26f0, 0x7030, 0xd08c, 0x0040, 0x26ea, 0x6000, 0xd0bc,
++      0x0040, 0x26f0, 0x1078, 0x278c, 0x0040, 0x26f9, 0x0078, 0x26f6,
++      0x1078, 0x28c4, 0x1078, 0x27b9, 0x0040, 0x26f9, 0x8318, 0x0078,
++      0x26ad, 0x7396, 0x0078, 0x26fe, 0x7097, 0xffff, 0x037f, 0x0078,
++      0x2772, 0xa780, 0x29c0, 0x203c, 0xa7bc, 0xff00, 0x873f, 0x2041,
++      0x007e, 0x7094, 0xa096, 0xffff, 0x00c0, 0x2713, 0x2009, 0x0000,
++      0x28a8, 0x0078, 0x271f, 0xa812, 0x0048, 0x271b, 0x2008, 0xa802,
++      0x20a8, 0x0078, 0x271f, 0x7097, 0xffff, 0x0078, 0x2772, 0x2700,
++      0x157e, 0x017e, 0xa106, 0x0040, 0x2766, 0xc484, 0x1078, 0x45c4,
++      0x0040, 0x2730, 0x1078, 0x455c, 0x00c0, 0x276f, 0x0078, 0x2731,
++      0xc485, 0x6004, 0xa084, 0x00ff, 0xa086, 0x0006, 0x00c0, 0x2740,
++      0x7030, 0xd08c, 0x0040, 0x275e, 0x6000, 0xd0bc, 0x00c0, 0x275e,
++      0x7284, 0xd28c, 0x0040, 0x2756, 0x6004, 0xa084, 0x00ff, 0xa082,
++      0x0006, 0x0048, 0x2766, 0xd484, 0x00c0, 0x2752, 0x1078, 0x457f,
++      0x0078, 0x2754, 0x1078, 0x298e, 0x0078, 0x2766, 0x1078, 0x28c4,
++      0x1078, 0x27b9, 0x0040, 0x276f, 0x0078, 0x2766, 0x1078, 0x2959,
++      0x0040, 0x2766, 0x1078, 0x278c, 0x0040, 0x276f, 0x017f, 0x8108,
++      0x157f, 0x00f0, 0x271f, 0x7097, 0xffff, 0x0078, 0x2772, 0x017f,
++      0x157f, 0x7196, 0x047f, 0x027f, 0x0c7f, 0x007c, 0x0c7e, 0x017e,
++      0x7097, 0x0001, 0x2009, 0x007e, 0x1078, 0x455c, 0x00c0, 0x2789,
++      0x1078, 0x28c4, 0x1078, 0x27b9, 0x0040, 0x2789, 0x70cc, 0xc0bd,
++      0x70ce, 0x017f, 0x0c7f, 0x007c, 0x017e, 0x077e, 0x0d7e, 0x0c7e,
++      0x2c68, 0x2001, 0xa657, 0x2004, 0xa084, 0x00ff, 0x6842, 0x1078,
++      0x76c7, 0x0040, 0x27b4, 0x2d00, 0x601a, 0x601f, 0x0001, 0x2001,
++      0x0000, 0x1078, 0x44ee, 0x2001, 0x0000, 0x1078, 0x4502, 0x127e,
++      0x2091, 0x8000, 0x7090, 0x8000, 0x7092, 0x127f, 0x2009, 0x0004,
++      0x1078, 0x775c, 0xa085, 0x0001, 0x0c7f, 0x0d7f, 0x077f, 0x017f,
++      0x007c, 0x017e, 0x077e, 0x0d7e, 0x0c7e, 0x2c68, 0x2001, 0xa657,
++      0x2004, 0xa084, 0x00ff, 0x6842, 0x1078, 0x9187, 0x0040, 0x27f2,
++      0x2d00, 0x601a, 0x6800, 0xc0c4, 0x6802, 0x68a0, 0xa086, 0x007e,
++      0x0040, 0x27db, 0x6804, 0xa084, 0x00ff, 0xa086, 0x0006, 0x00c0,
++      0x27db, 0x1078, 0x2880, 0x601f, 0x0001, 0x2001, 0x0000, 0x1078,
++      0x44ee, 0x2001, 0x0002, 0x1078, 0x4502, 0x127e, 0x2091, 0x8000,
++      0x7090, 0x8000, 0x7092, 0x127f, 0x2009, 0x0002, 0x1078, 0x775c,
++      0xa085, 0x0001, 0x0c7f, 0x0d7f, 0x077f, 0x017f, 0x007c, 0x0c7e,
++      0x027e, 0x2009, 0x0080, 0x1078, 0x455c, 0x00c0, 0x2805, 0x1078,
++      0x2808, 0x0040, 0x2805, 0x70d3, 0xffff, 0x027f, 0x0c7f, 0x007c,
++      0x017e, 0x077e, 0x0d7e, 0x0c7e, 0x2c68, 0x1078, 0x76c7, 0x0040,
++      0x282a, 0x2d00, 0x601a, 0x601f, 0x0001, 0x2001, 0x0000, 0x1078,
++      0x44ee, 0x2001, 0x0002, 0x1078, 0x4502, 0x127e, 0x2091, 0x8000,
++      0x70d4, 0x8000, 0x70d6, 0x127f, 0x2009, 0x0002, 0x1078, 0x775c,
++      0xa085, 0x0001, 0x0c7f, 0x0d7f, 0x077f, 0x017f, 0x007c, 0x0c7e,
++      0x0d7e, 0x127e, 0x2091, 0x8000, 0x2009, 0x007f, 0x1078, 0x455c,
++      0x00c0, 0x284b, 0x2c68, 0x1078, 0x76c7, 0x0040, 0x284b, 0x2d00,
++      0x601a, 0x6312, 0x601f, 0x0001, 0x620a, 0x2009, 0x0022, 0x1078,
++      0x775c, 0xa085, 0x0001, 0x127f, 0x0d7f, 0x0c7f, 0x007c, 0x0e7e,
++      0x0c7e, 0x067e, 0x037e, 0x027e, 0x1078, 0x5f0e, 0x1078, 0x5eae,
++      0x1078, 0x8068, 0x2130, 0x81ff, 0x0040, 0x2864, 0x20a9, 0x007e,
++      0x2009, 0x0000, 0x0078, 0x2868, 0x20a9, 0x007f, 0x2009, 0x0000,
++      0x017e, 0x1078, 0x45c4, 0x00c0, 0x2871, 0x1078, 0x47e9, 0x1078,
++      0x42f8, 0x017f, 0x8108, 0x00f0, 0x2868, 0x86ff, 0x00c0, 0x287a,
++      0x1078, 0x119b, 0x027f, 0x037f, 0x067f, 0x0c7f, 0x0e7f, 0x007c,
++      0x0e7e, 0x0c7e, 0x037e, 0x027e, 0x017e, 0x6218, 0x2270, 0x72a0,
++      0x027e, 0x2019, 0x0029, 0x1078, 0x5f01, 0x077e, 0x2039, 0x0000,
++      0x1078, 0x5e0a, 0x2c08, 0x1078, 0x9f8b, 0x077f, 0x017f, 0x2e60,
++      0x1078, 0x47e9, 0x6210, 0x6314, 0x1078, 0x42f8, 0x6212, 0x6316,
++      0x017f, 0x027f, 0x037f, 0x0c7f, 0x0e7f, 0x007c, 0x0e7e, 0x007e,
++      0x6018, 0xa080, 0x0028, 0x2004, 0xd0bc, 0x00c0, 0x28ba, 0x2071,
++      0xa600, 0x7090, 0xa005, 0x0040, 0x28b7, 0x8001, 0x7092, 0x007f,
++      0x0e7f, 0x007c, 0x2071, 0xa600, 0x70d4, 0xa005, 0x0040, 0x28b7,
++      0x8001, 0x70d6, 0x0078, 0x28b7, 0x6000, 0xc08c, 0x6002, 0x007c,
++      0x0f7e, 0x0e7e, 0x0c7e, 0x037e, 0x027e, 0x017e, 0x157e, 0x2178,
++      0x81ff, 0x00c0, 0x28d7, 0x20a9, 0x0001, 0x0078, 0x28f2, 0x2001,
++      0xa653, 0x2004, 0xd0c4, 0x0040, 0x28ee, 0xd0a4, 0x0040, 0x28ee,
++      0x047e, 0x6018, 0xa080, 0x0028, 0x2024, 0xa4a4, 0x00ff, 0x8427,
++      0xa006, 0x2009, 0x002d, 0x1078, 0xa21d, 0x047f, 0x20a9, 0x00ff,
++      0x2011, 0x0000, 0x027e, 0xa28e, 0x007e, 0x0040, 0x2936, 0xa28e,
++      0x007f, 0x0040, 0x2936, 0xa28e, 0x0080, 0x0040, 0x2936, 0xa288,
++      0xa735, 0x210c, 0x81ff, 0x0040, 0x2936, 0x8fff, 0x1040, 0x2942,
++      0x0c7e, 0x2160, 0x2001, 0x0001, 0x1078, 0x4972, 0x0c7f, 0x2019,
++      0x0029, 0x1078, 0x5f01, 0x077e, 0x2039, 0x0000, 0x1078, 0x5e0a,
++      0x0c7e, 0x027e, 0x2160, 0x6204, 0xa294, 0x00ff, 0xa286, 0x0006,
++      0x00c0, 0x2926, 0x6007, 0x0404, 0x0078, 0x292b, 0x2001, 0x0004,
++      0x8007, 0xa215, 0x6206, 0x027f, 0x0c7f, 0x017e, 0x2c08, 0x1078,
++      0x9f8b, 0x017f, 0x077f, 0x2160, 0x1078, 0x47e9, 0x027f, 0x8210,
++      0x00f0, 0x28f2, 0x157f, 0x017f, 0x027f, 0x037f, 0x0c7f, 0x0e7f,
++      0x0f7f, 0x007c, 0x047e, 0x027e, 0x017e, 0x2001, 0xa653, 0x2004,
++      0xd0c4, 0x0040, 0x2955, 0xd0a4, 0x0040, 0x2955, 0xa006, 0x2220,
++      0x8427, 0x2009, 0x0029, 0x1078, 0xa21d, 0x017f, 0x027f, 0x047f,
++      0x007c, 0x017e, 0x027e, 0x037e, 0x0c7e, 0x7284, 0x82ff, 0x0040,
++      0x2987, 0xa290, 0xa653, 0x2214, 0xd2ac, 0x00c0, 0x2987, 0x2100,
++      0x1078, 0x2564, 0x81ff, 0x0040, 0x2989, 0x2019, 0x0001, 0x8314,
++      0xa2e0, 0xacc0, 0x2c04, 0xd384, 0x0040, 0x297b, 0xa084, 0xff00,
++      0x8007, 0x0078, 0x297d, 0xa084, 0x00ff, 0xa116, 0x0040, 0x2989,
++      0xa096, 0x00ff, 0x0040, 0x2987, 0x8318, 0x0078, 0x296f, 0xa085,
++      0x0001, 0x0c7f, 0x037f, 0x027f, 0x017f, 0x007c, 0x017e, 0x0c7e,
++      0x127e, 0x2091, 0x8000, 0x017e, 0x027e, 0x037e, 0x2110, 0x027e,
++      0x2019, 0x0029, 0x1078, 0x73d0, 0x027f, 0x1078, 0xa4f1, 0x037f,
++      0x027f, 0x017f, 0xa180, 0xa735, 0x2004, 0xa065, 0x0040, 0x29b7,
++      0x017e, 0x0c7e, 0x1078, 0x9187, 0x017f, 0x1040, 0x1332, 0x611a,
++      0x1078, 0x2880, 0x1078, 0x772d, 0x017f, 0x1078, 0x457f, 0x127f,
++      0x0c7f, 0x017f, 0x007c, 0x2001, 0xa633, 0x2004, 0xd0cc, 0x007c,
++      0x7eef, 0x7de8, 0x7ce4, 0x80e2, 0x7be1, 0x80e0, 0x80dc, 0x80da,
++      0x7ad9, 0x80d6, 0x80d5, 0x80d4, 0x80d3, 0x80d2, 0x80d1, 0x79ce,
++      0x78cd, 0x80cc, 0x80cb, 0x80ca, 0x80c9, 0x80c7, 0x80c6, 0x77c5,
++      0x76c3, 0x80bc, 0x80ba, 0x75b9, 0x80b6, 0x74b5, 0x73b4, 0x72b3,
++      0x80b2, 0x80b1, 0x80ae, 0x71ad, 0x80ac, 0x70ab, 0x6faa, 0x6ea9,
++      0x80a7, 0x6da6, 0x6ca5, 0x6ba3, 0x6a9f, 0x699e, 0x689d, 0x809b,
++      0x8098, 0x6797, 0x6690, 0x658f, 0x6488, 0x6384, 0x6282, 0x8081,
++      0x8080, 0x617c, 0x607a, 0x8079, 0x5f76, 0x8075, 0x8074, 0x8073,
++      0x8072, 0x8071, 0x806e, 0x5e6d, 0x806c, 0x5d6b, 0x5c6a, 0x5b69,
++      0x8067, 0x5a66, 0x5965, 0x5863, 0x575c, 0x565a, 0x5559, 0x8056,
++      0x8055, 0x5454, 0x5353, 0x5252, 0x5151, 0x504e, 0x4f4d, 0x804c,
++      0x804b, 0x4e4a, 0x4d49, 0x8047, 0x4c46, 0x8045, 0x8043, 0x803c,
++      0x803a, 0x8039, 0x8036, 0x4b35, 0x8034, 0x4a33, 0x4932, 0x4831,
++      0x802e, 0x472d, 0x462c, 0x452b, 0x442a, 0x4329, 0x4227, 0x8026,
++      0x8025, 0x4123, 0x401f, 0x3f1e, 0x3e1d, 0x3d1b, 0x3c18, 0x8017,
++      0x8010, 0x3b0f, 0x3a08, 0x8004, 0x3902, 0x8001, 0x8000, 0x8000,
++      0x3800, 0x3700, 0x3600, 0x8000, 0x3500, 0x8000, 0x8000, 0x8000,
++      0x3400, 0x8000, 0x8000, 0x8000, 0x8000, 0x8000, 0x8000, 0x3300,
++      0x3200, 0x8000, 0x8000, 0x8000, 0x8000, 0x8000, 0x8000, 0x3100,
++      0x3000, 0x8000, 0x8000, 0x2f00, 0x8000, 0x2e00, 0x2d00, 0x2c00,
++      0x8000, 0x8000, 0x8000, 0x2b00, 0x8000, 0x2a00, 0x2900, 0x2800,
++      0x8000, 0x2700, 0x2600, 0x2500, 0x2400, 0x2300, 0x2200, 0x8000,
++      0x8000, 0x2100, 0x2000, 0x1f00, 0x1e00, 0x1d00, 0x1c00, 0x8000,
++      0x8000, 0x1b00, 0x1a00, 0x8000, 0x1900, 0x8000, 0x8000, 0x8000,
++      0x8000, 0x8000, 0x8000, 0x1800, 0x8000, 0x1700, 0x1600, 0x1500,
++      0x8000, 0x1400, 0x1300, 0x1200, 0x1100, 0x1000, 0x0f00, 0x8000,
++      0x8000, 0x0e00, 0x0d00, 0x0c00, 0x0b00, 0x0a00, 0x0900, 0x8000,
++      0x8000, 0x0800, 0x0700, 0x8000, 0x0600, 0x8000, 0x8000, 0x8000,
++      0x0500, 0x0400, 0x0300, 0x8000, 0x0200, 0x8000, 0x8000, 0x8000,
++      0x0100, 0x8000, 0x8000, 0x8000, 0x8000, 0x8000, 0x8000, 0x0000,
++      0x8000, 0x8000, 0x8000, 0x8000, 0x8000, 0x8000, 0x8000, 0x8000,
++      0x8000, 0x8000, 0x8000, 0x8000, 0x8000, 0x8000, 0x8000, 0x8000,
++      0x2071, 0xa682, 0x7003, 0x0002, 0xa006, 0x7012, 0x7016, 0x703a,
++      0x703e, 0x7033, 0xa692, 0x7037, 0xa692, 0x7007, 0x0001, 0x2061,
++      0xa6d2, 0x6003, 0x0002, 0x007c, 0x0090, 0x2ae7, 0x0068, 0x2ae7,
++      0x2071, 0xa682, 0x2b78, 0x7818, 0xd084, 0x00c0, 0x2ae7, 0x2a60,
++      0x7820, 0xa08e, 0x0069, 0x00c0, 0x2bd7, 0x0079, 0x2b6b, 0x007c,
++      0x2071, 0xa682, 0x7004, 0x0079, 0x2aed, 0x2af1, 0x2af2, 0x2afc,
++      0x2b0e, 0x007c, 0x0090, 0x2afb, 0x0068, 0x2afb, 0x2b78, 0x7818,
++      0xd084, 0x0040, 0x2b1a, 0x007c, 0x2b78, 0x2061, 0xa6d2, 0x6008,
++      0xa08e, 0x0100, 0x0040, 0x2b09, 0xa086, 0x0200, 0x0040, 0x2bcf,
++      0x007c, 0x7014, 0x2068, 0x2a60, 0x7018, 0x007a, 0x7010, 0x2068,
++      0x6834, 0xa086, 0x0103, 0x0040, 0x2b16, 0x007c, 0x2a60, 0x2b78,
++      0x7018, 0x007a, 0x2a60, 0x7820, 0xa08a, 0x0040, 0x00c8, 0x2b23,
++      0x61bc, 0x0079, 0x2b2b, 0x2100, 0xa08a, 0x003f, 0x00c8, 0x2bcb,
++      0x61bc, 0x0079, 0x2b6b, 0x2bad, 0x2bdf, 0x2be7, 0x2beb, 0x2bf3,
++      0x2bf9, 0x2bfd, 0x2c09, 0x2c0d, 0x2c17, 0x2c1b, 0x2bcb, 0x2bcb,
++      0x2bcb, 0x2c1f, 0x2bcb, 0x2c2f, 0x2c46, 0x2c5d, 0x2cdd, 0x2ce2,
++      0x2d0f, 0x2d69, 0x2d7a, 0x2d98, 0x2dd9, 0x2de3, 0x2df0, 0x2e03,
++      0x2e22, 0x2e2b, 0x2e68, 0x2e6e, 0x2bcb, 0x2e8a, 0x2bcb, 0x2bcb,
++      0x2bcb, 0x2bcb, 0x2bcb, 0x2e91, 0x2e9b, 0x2bcb, 0x2bcb, 0x2bcb,
++      0x2bcb, 0x2bcb, 0x2bcb, 0x2bcb, 0x2bcb, 0x2ea3, 0x2bcb, 0x2bcb,
++      0x2bcb, 0x2bcb, 0x2bcb, 0x2eb5, 0x2ece, 0x2bcb, 0x2bcb, 0x2bcb,
++      0x2bcb, 0x2bcb, 0x2bcb, 0x2ee0, 0x2f37, 0x2f95, 0x2fa9, 0x2bcb,
++      0x2bcb, 0x2bcb, 0x398e, 0x2bcb, 0x2bcb, 0x2bcb, 0x2bcb, 0x2bcb,
++      0x2bcb, 0x2bcb, 0x2bcb, 0x2c17, 0x2c1b, 0x2fc0, 0x2bcb, 0x2fcd,
++      0x3a26, 0x3a83, 0x2bcb, 0x2bcb, 0x2bcb, 0x2bcb, 0x2bcb, 0x2bcb,
++      0x2bcb, 0x2bcb, 0x2bcb, 0x301a, 0x314f, 0x316b, 0x3177, 0x31da,
++      0x3233, 0x323e, 0x327d, 0x328c, 0x329b, 0x329e, 0x2fd1, 0x32c2,
++      0x331e, 0x332b, 0x343c, 0x356f, 0x3599, 0x36a6, 0x2bcb, 0x36b6,
++      0x36f0, 0x37bf, 0x2bcb, 0x2bcb, 0x2bcb, 0x2bcb, 0x3827, 0x3843,
++      0x38bd, 0x3977, 0x713c, 0x0078, 0x2bad, 0x2021, 0x4000, 0x1078,
++      0x35f5, 0x127e, 0x2091, 0x8000, 0x0068, 0x2bba, 0x7818, 0xd084,
++      0x0040, 0x2bbd, 0x127f, 0x0078, 0x2bb1, 0x7c22, 0x7926, 0x7a2a,
++      0x7b2e, 0x781b, 0x0001, 0x2091, 0x4080, 0x7007, 0x0001, 0x2091,
++      0x5000, 0x127f, 0x007c, 0x2021, 0x4001, 0x0078, 0x2baf, 0x2021,
++      0x4002, 0x0078, 0x2baf, 0x2021, 0x4003, 0x0078, 0x2baf, 0x2021,
++      0x4005, 0x0078, 0x2baf, 0x2021, 0x4006, 0x0078, 0x2baf, 0xa02e,
++      0x2520, 0x7b28, 0x7a2c, 0x7824, 0x7930, 0x0078, 0x3604, 0x7823,
++      0x0004, 0x7824, 0x007a, 0xa02e, 0x2520, 0x7b28, 0x7a2c, 0x7824,
++      0x7930, 0x0078, 0x3608, 0x7924, 0x7828, 0x2114, 0x200a, 0x0078,
++      0x2bad, 0x7924, 0x2114, 0x0078, 0x2bad, 0x2099, 0x0009, 0x20a1,
++      0x0009, 0x20a9, 0x0007, 0x53a3, 0x7924, 0x7a28, 0x7b2c, 0x0078,
++      0x2bad, 0x7824, 0x2060, 0x0078, 0x2c21, 0x2009, 0x0001, 0x2011,
++      0x0013, 0x2019, 0x0018, 0x783b, 0x0017, 0x0078, 0x2bad, 0x7d38,
++      0x7c3c, 0x0078, 0x2be1, 0x7d38, 0x7c3c, 0x0078, 0x2bed, 0x2061,
++      0x1000, 0x610c, 0xa006, 0x2c14, 0xa200, 0x8c60, 0x8109, 0x00c0,
++      0x2c23, 0x2010, 0xa005, 0x0040, 0x2bad, 0x0078, 0x2bd3, 0x2069,
++      0xa652, 0x7824, 0x7930, 0xa11a, 0x00c8, 0x2bdb, 0x8019, 0x0040,
++      0x2bdb, 0x684a, 0x6942, 0x782c, 0x6852, 0x7828, 0x6856, 0xa006,
++      0x685a, 0x685e, 0x1078, 0x4eae, 0x0078, 0x2bad, 0x2069, 0xa652,
++      0x7824, 0x7934, 0xa11a, 0x00c8, 0x2bdb, 0x8019, 0x0040, 0x2bdb,
++      0x684e, 0x6946, 0x782c, 0x6862, 0x7828, 0x6866, 0xa006, 0x686a,
++      0x686e, 0x1078, 0x4a3e, 0x0078, 0x2bad, 0xa02e, 0x2520, 0x81ff,
++      0x00c0, 0x2bd7, 0x7924, 0x7b28, 0x7a2c, 0x20a9, 0x0005, 0x20a1,
++      0xa689, 0x41a1, 0x1078, 0x35ba, 0x0040, 0x2bd7, 0x2009, 0x0020,
++      0x1078, 0x3604, 0x701b, 0x2c75, 0x007c, 0x6834, 0x2008, 0xa084,
++      0x00ff, 0xa096, 0x0011, 0x0040, 0x2c85, 0xa096, 0x0019, 0x0040,
++      0x2c85, 0xa096, 0x0015, 0x00c0, 0x2bd7, 0x810f, 0xa18c, 0x00ff,
++      0x0040, 0x2bd7, 0x710e, 0x700c, 0x8001, 0x0040, 0x2cb6, 0x700e,
++      0x1078, 0x35ba, 0x0040, 0x2bd7, 0x2009, 0x0020, 0x2061, 0xa6d2,
++      0x6224, 0x6328, 0x642c, 0x6530, 0xa290, 0x0040, 0xa399, 0x0000,
++      0xa4a1, 0x0000, 0xa5a9, 0x0000, 0x1078, 0x3604, 0x701b, 0x2ca9,
++      0x007c, 0x6834, 0xa084, 0x00ff, 0xa096, 0x0002, 0x0040, 0x2cb4,
++      0xa096, 0x000a, 0x00c0, 0x2bd7, 0x0078, 0x2c8b, 0x7010, 0x2068,
++      0x6838, 0xc0fd, 0x683a, 0x1078, 0x4431, 0x00c0, 0x2cc4, 0x7007,
++      0x0003, 0x701b, 0x2cc6, 0x007c, 0x1078, 0x4b51, 0x127e, 0x2091,
++      0x8000, 0x20a9, 0x0005, 0x2099, 0xa689, 0x530a, 0x2100, 0xa210,
++      0xa399, 0x0000, 0xa4a1, 0x0000, 0xa5a9, 0x0000, 0xad80, 0x000d,
++      0x2009, 0x0020, 0x127f, 0x0078, 0x3608, 0x61a4, 0x7824, 0x60a6,
++      0x0078, 0x2bad, 0x2091, 0x8000, 0x7823, 0x4000, 0x7827, 0x4953,
++      0x782b, 0x5020, 0x782f, 0x2020, 0x2009, 0x017f, 0x2104, 0x7832,
++      0x3f00, 0x7836, 0x2061, 0x0100, 0x6200, 0x2061, 0x0200, 0x603c,
++      0x8007, 0xa205, 0x783a, 0x2009, 0x04fd, 0x2104, 0x783e, 0x781b,
++      0x0001, 0x2091, 0x5000, 0x2091, 0x4080, 0x2071, 0x0010, 0x20c1,
++      0x00f0, 0xa08a, 0x0003, 0x00c8, 0x0427, 0x0078, 0x0423, 0x81ff,
++      0x00c0, 0x2bd7, 0x7924, 0x810f, 0xa18c, 0x00ff, 0x1078, 0x45c4,
++      0x00c0, 0x2bdb, 0x7e38, 0xa684, 0x3fff, 0xa082, 0x4000, 0x0048,
++      0x2d23, 0x0078, 0x2bdb, 0x7c28, 0x7d2c, 0x1078, 0x47a4, 0xd28c,
++      0x00c0, 0x2d2e, 0x1078, 0x4736, 0x0078, 0x2d30, 0x1078, 0x4772,
++      0x00c0, 0x2d5a, 0x2061, 0xad00, 0x127e, 0x2091, 0x8000, 0x6000,
++      0xa086, 0x0000, 0x0040, 0x2d48, 0x6010, 0xa06d, 0x0040, 0x2d48,
++      0x683c, 0xa406, 0x00c0, 0x2d48, 0x6840, 0xa506, 0x0040, 0x2d53,
++      0x127f, 0xace0, 0x0010, 0x2001, 0xa616, 0x2004, 0xac02, 0x00c8,
++      0x2bd7, 0x0078, 0x2d34, 0x1078, 0x8a01, 0x127f, 0x0040, 0x2bd7,
++      0x0078, 0x2bad, 0xa00e, 0x2001, 0x0005, 0x1078, 0x4b51, 0x127e,
++      0x2091, 0x8000, 0x1078, 0x8f85, 0x1078, 0x4a73, 0x127f, 0x0078,
++      0x2bad, 0x81ff, 0x00c0, 0x2bd7, 0x1078, 0x35d2, 0x0040, 0x2bdb,
++      0x1078, 0x4673, 0x0040, 0x2bd7, 0x1078, 0x47b2, 0x0040, 0x2bd7,
++      0x0078, 0x2bad, 0x81ff, 0x00c0, 0x2bd7, 0x1078, 0x35e4, 0x0040,
++      0x2bdb, 0x1078, 0x482f, 0x0040, 0x2bd7, 0x2019, 0x0005, 0x1078,
++      0x47d3, 0x0040, 0x2bd7, 0x7828, 0xa08a, 0x1000, 0x00c8, 0x2bdb,
++      0x8003, 0x800b, 0x810b, 0xa108, 0x1078, 0x5a52, 0x0078, 0x2bad,
++      0x127e, 0x2091, 0x8000, 0x81ff, 0x0040, 0x2da2, 0x2009, 0x0001,
++      0x0078, 0x2dd3, 0x2029, 0x00ff, 0x6450, 0x2400, 0xa506, 0x0040,
++      0x2dcd, 0x2508, 0x1078, 0x45c4, 0x00c0, 0x2dcd, 0x1078, 0x482f,
++      0x00c0, 0x2db8, 0x2009, 0x0002, 0x62ac, 0x2518, 0x0078, 0x2dd3,
++      0x2019, 0x0004, 0x1078, 0x47d3, 0x00c0, 0x2dc2, 0x2009, 0x0006,
++      0x0078, 0x2dd3, 0x7824, 0xa08a, 0x1000, 0x00c8, 0x2dd6, 0x8003,
++      0x800b, 0x810b, 0xa108, 0x1078, 0x5a52, 0x8529, 0x00c8, 0x2da5,
++      0x127f, 0x0078, 0x2bad, 0x127f, 0x0078, 0x2bd7, 0x127f, 0x0078,
++      0x2bdb, 0x1078, 0x35d2, 0x0040, 0x2bdb, 0x1078, 0x46e7, 0x1078,
++      0x47a4, 0x0078, 0x2bad, 0x81ff, 0x00c0, 0x2bd7, 0x1078, 0x35d2,
++      0x0040, 0x2bdb, 0x1078, 0x46d6, 0x1078, 0x47a4, 0x0078, 0x2bad,
++      0x81ff, 0x00c0, 0x2bd7, 0x1078, 0x35d2, 0x0040, 0x2bdb, 0x1078,
++      0x4775, 0x0040, 0x2bd7, 0x1078, 0x4484, 0x1078, 0x472f, 0x1078,
++      0x47a4, 0x0078, 0x2bad, 0x1078, 0x35d2, 0x0040, 0x2bdb, 0x1078,
++      0x4673, 0x0040, 0x2bd7, 0x62a0, 0x2019, 0x0005, 0x0c7e, 0x1078,
++      0x47e9, 0x0c7f, 0x1078, 0x5f01, 0x077e, 0x2039, 0x0000, 0x1078,
++      0x5e0a, 0x2009, 0x0000, 0x1078, 0x9f8b, 0x077f, 0x1078, 0x47a4,
++      0x0078, 0x2bad, 0x1078, 0x35d2, 0x0040, 0x2bdb, 0x1078, 0x47a4,
++      0x2208, 0x0078, 0x2bad, 0x157e, 0x0d7e, 0x0e7e, 0x2069, 0xa714,
++      0x6810, 0x6914, 0xa10a, 0x00c8, 0x2e37, 0x2009, 0x0000, 0x6816,
++      0x2011, 0x0000, 0x2019, 0x0000, 0x20a9, 0x00ff, 0x2069, 0xa735,
++      0x2d04, 0xa075, 0x0040, 0x2e4c, 0x704c, 0x1078, 0x2e56, 0xa210,
++      0x7080, 0x1078, 0x2e56, 0xa318, 0x8d68, 0x00f0, 0x2e40, 0x2300,
++      0xa218, 0x0e7f, 0x0d7f, 0x157f, 0x0078, 0x2bad, 0x0f7e, 0x017e,
++      0xa07d, 0x0040, 0x2e65, 0x2001, 0x0000, 0x8000, 0x2f0c, 0x81ff,
++      0x0040, 0x2e65, 0x2178, 0x0078, 0x2e5d, 0x017f, 0x0f7f, 0x007c,
++      0x2069, 0xa714, 0x6910, 0x62a8, 0x0078, 0x2bad, 0x81ff, 0x00c0,
++      0x2bd7, 0x6150, 0xa190, 0x29c0, 0x2214, 0xa294, 0x00ff, 0x6070,
++      0xa084, 0xff00, 0xa215, 0x636c, 0x67cc, 0xd79c, 0x0040, 0x2e84,
++      0x2031, 0x0001, 0x0078, 0x2e86, 0x2031, 0x0000, 0x7e3a, 0x7f3e,
++      0x0078, 0x2bad, 0x6140, 0x6244, 0x2019, 0xa8a2, 0x231c, 0x0078,
++      0x2bad, 0x127e, 0x2091, 0x8000, 0x6134, 0x6338, 0xa006, 0x2010,
++      0x127f, 0x0078, 0x2bad, 0x1078, 0x35e4, 0x0040, 0x2bdb, 0x6244,
++      0x6338, 0x0078, 0x2bad, 0x6140, 0x6244, 0x7824, 0x6042, 0x7b28,
++      0x6346, 0x2069, 0xa652, 0x831f, 0xa305, 0x6816, 0x782c, 0x2069,
++      0xa8a2, 0x2d1c, 0x206a, 0x0078, 0x2bad, 0x017e, 0x127e, 0x2091,
++      0x8000, 0x7824, 0x6036, 0xd094, 0x0040, 0x2ec8, 0x7828, 0xa085,
++      0x0001, 0x2009, 0xa8ab, 0x200a, 0x2001, 0xffff, 0x1078, 0x5ae6,
++      0x782c, 0x603a, 0x127f, 0x017f, 0x0078, 0x2bad, 0x1078, 0x35e4,
++      0x0040, 0x2bdb, 0x7828, 0xa00d, 0x0040, 0x2bdb, 0x782c, 0xa005,
++      0x0040, 0x2bdb, 0x6244, 0x6146, 0x6338, 0x603a, 0x0078, 0x2bad,
++      0x2001, 0xa600, 0x2004, 0xa086, 0x0003, 0x00c0, 0x2bd7, 0x0c7e,
++      0x2061, 0x0100, 0x7924, 0x810f, 0xa18c, 0x00ff, 0xa196, 0x00ff,
++      0x00c0, 0x2ef7, 0x6030, 0xa085, 0xff00, 0x0078, 0x2f06, 0xa182,
++      0x007f, 0x00c8, 0x2f30, 0xa188, 0x29c0, 0x210c, 0xa18c, 0x00ff,
++      0x6030, 0xa116, 0x0040, 0x2f30, 0x810f, 0xa105, 0x127e, 0x2091,
++      0x8000, 0x007e, 0x1078, 0x76c7, 0x007f, 0x0040, 0x2f2c, 0x601a,
++      0x600b, 0xbc09, 0x601f, 0x0001, 0x1078, 0x35ba, 0x0040, 0x2f33,
++      0x6837, 0x0000, 0x7007, 0x0003, 0x6833, 0x0000, 0x6838, 0xc0fd,
++      0x683a, 0x701b, 0x2f8e, 0x2d00, 0x6012, 0x2009, 0x0032, 0x1078,
++      0x775c, 0x127f, 0x0c7f, 0x007c, 0x127f, 0x0c7f, 0x0078, 0x2bd7,
++      0x0c7f, 0x0078, 0x2bdb, 0x1078, 0x772d, 0x0078, 0x2f2c, 0x2001,
++      0xa600, 0x2004, 0xa086, 0x0003, 0x00c0, 0x2bd7, 0x0c7e, 0x2061,
++      0x0100, 0x7924, 0x810f, 0xa18c, 0x00ff, 0xa196, 0x00ff, 0x00c0,
++      0x2f4e, 0x6030, 0xa085, 0xff00, 0x0078, 0x2f5d, 0xa182, 0x007f,
++      0x00c8, 0x2f87, 0xa188, 0x29c0, 0x210c, 0xa18c, 0x00ff, 0x6030,
++      0xa116, 0x0040, 0x2f87, 0x810f, 0xa105, 0x127e, 0x2091, 0x8000,
++      0x007e, 0x1078, 0x76c7, 0x007f, 0x0040, 0x2f83, 0x601a, 0x600b,
++      0xbc05, 0x601f, 0x0001, 0x1078, 0x35ba, 0x0040, 0x2f8a, 0x6837,
++      0x0000, 0x7007, 0x0003, 0x6833, 0x0000, 0x6838, 0xc0fd, 0x683a,
++      0x701b, 0x2f8e, 0x2d00, 0x6012, 0x2009, 0x0032, 0x1078, 0x775c,
++      0x127f, 0x0c7f, 0x007c, 0x127f, 0x0c7f, 0x0078, 0x2bd7, 0x0c7f,
++      0x0078, 0x2bdb, 0x1078, 0x772d, 0x0078, 0x2f83, 0x6830, 0xa086,
++      0x0100, 0x0040, 0x2bd7, 0x0078, 0x2bad, 0x2061, 0xa933, 0x127e,
++      0x2091, 0x8000, 0x6000, 0xd084, 0x0040, 0x2fa6, 0x6104, 0x6208,
++      0x2019, 0xa612, 0x231c, 0x127f, 0x0078, 0x2bad, 0x127f, 0x0078,
++      0x2bdb, 0x81ff, 0x00c0, 0x2bd7, 0x127e, 0x2091, 0x8000, 0x6248,
++      0x6064, 0xa202, 0x0048, 0x2fbd, 0xa085, 0x0001, 0x1078, 0x256a,
++      0x1078, 0x3c9e, 0x127f, 0x0078, 0x2bad, 0x127f, 0x0078, 0x2bdb,
++      0x127e, 0x2091, 0x8000, 0x20a9, 0x0012, 0x2001, 0xa640, 0x20a0,
++      0xa006, 0x40a4, 0x127f, 0x0078, 0x2bad, 0x7d38, 0x7c3c, 0x0078,
++      0x2c5f, 0x7824, 0xa09c, 0x00ff, 0xa39a, 0x0003, 0x00c8, 0x2bd7,
++      0x6250, 0xa084, 0xff00, 0x8007, 0xa206, 0x00c0, 0x2fe9, 0x2001,
++      0xa640, 0x2009, 0x000c, 0x7a2c, 0x7b28, 0x7c3c, 0x7d38, 0x0078,
++      0x3608, 0x81ff, 0x00c0, 0x2bd7, 0x1078, 0x35e4, 0x0040, 0x2bdb,
++      0x6004, 0xa084, 0x00ff, 0xa086, 0x0006, 0x00c0, 0x2bd7, 0x0c7e,
++      0x1078, 0x35ba, 0x0c7f, 0x0040, 0x2bd7, 0x6837, 0x0000, 0x6838,
++      0xc0fd, 0x683a, 0x1078, 0x8e4a, 0x0040, 0x2bd7, 0x7007, 0x0003,
++      0x701b, 0x300b, 0x007c, 0x6830, 0xa086, 0x0100, 0x0040, 0x2bd7,
++      0xad80, 0x000e, 0x2009, 0x000c, 0x7a2c, 0x7b28, 0x7c3c, 0x7d38,
++      0x0078, 0x3608, 0x1078, 0x35ba, 0x0040, 0x2bd7, 0x1078, 0x42dd,
++      0x2009, 0x001c, 0x7a2c, 0x7b28, 0x7c3c, 0x7d38, 0x1078, 0x3604,
++      0x701b, 0x302b, 0x007c, 0xade8, 0x000d, 0x6800, 0xa005, 0x0040,
++      0x2bdb, 0x6804, 0xd0ac, 0x0040, 0x3038, 0xd0a4, 0x0040, 0x2bdb,
++      0xd094, 0x0040, 0x3043, 0x0c7e, 0x2061, 0x0100, 0x6104, 0xa18c,
++      0xffdf, 0x6106, 0x0c7f, 0xd08c, 0x0040, 0x304e, 0x0c7e, 0x2061,
++      0x0100, 0x6104, 0xa18d, 0x0010, 0x6106, 0x0c7f, 0x2009, 0x0100,
++      0x210c, 0xa18a, 0x0002, 0x0048, 0x3063, 0xd084, 0x0040, 0x3063,
++      0x6a28, 0xa28a, 0x007f, 0x00c8, 0x2bdb, 0xa288, 0x29c0, 0x210c,
++      0xa18c, 0x00ff, 0x6156, 0xd0dc, 0x0040, 0x306c, 0x6828, 0xa08a,
++      0x007f, 0x00c8, 0x2bdb, 0x6052, 0x6808, 0xa08a, 0x0100, 0x0048,
++      0x2bdb, 0xa08a, 0x0841, 0x00c8, 0x2bdb, 0xa084, 0x0007, 0x00c0,
++      0x2bdb, 0x680c, 0xa005, 0x0040, 0x2bdb, 0x6810, 0xa005, 0x0040,
++      0x2bdb, 0x6848, 0x6940, 0xa10a, 0x00c8, 0x2bdb, 0x8001, 0x0040,
++      0x2bdb, 0x684c, 0x6944, 0xa10a, 0x00c8, 0x2bdb, 0x8001, 0x0040,
++      0x2bdb, 0x6804, 0xd0fc, 0x0040, 0x30c2, 0x1078, 0x35ba, 0x0040,
++      0x2bd7, 0x2009, 0x0014, 0x7a2c, 0x7b28, 0x7c3c, 0x7d38, 0xa290,
++      0x0038, 0xa399, 0x0000, 0x1078, 0x3604, 0x701b, 0x30a8, 0x007c,
++      0xade8, 0x000d, 0x20a9, 0x0014, 0x2d98, 0x2069, 0xa66e, 0x2da0,
++      0x53a3, 0x7010, 0xa0e8, 0x000d, 0x2001, 0xa672, 0x200c, 0xd1e4,
++      0x0040, 0x30c2, 0x0c7e, 0x2061, 0x0100, 0x6004, 0xa085, 0x0b00,
++      0x6006, 0x0c7f, 0x20a9, 0x001c, 0x2d98, 0x2069, 0xa652, 0x2da0,
++      0x53a3, 0x6814, 0xa08c, 0x00ff, 0x6142, 0x8007, 0xa084, 0x00ff,
++      0x6046, 0x1078, 0x4eae, 0x1078, 0x49ce, 0x1078, 0x4a3e, 0x6000,
++      0xa086, 0x0000, 0x00c0, 0x314d, 0x6808, 0x602a, 0x1078, 0x21f7,
++      0x6818, 0x691c, 0x6a20, 0x6b24, 0x8007, 0x810f, 0x8217, 0x831f,
++      0x6016, 0x611a, 0x621e, 0x6322, 0x6c04, 0xd4f4, 0x0040, 0x30fa,
++      0x6830, 0x6934, 0x6a38, 0x6b3c, 0x8007, 0x810f, 0x8217, 0x831f,
++      0x0078, 0x30fc, 0xa084, 0xf0ff, 0x6006, 0x610a, 0x620e, 0x6312,
++      0x1078, 0x5b19, 0x6904, 0xd1fc, 0x0040, 0x312f, 0x0c7e, 0x2009,
++      0x0000, 0x20a9, 0x0001, 0x6b70, 0xd384, 0x0040, 0x312c, 0x0078,
++      0x3116, 0x839d, 0x00c8, 0x312c, 0x3508, 0x8109, 0x1078, 0x5480,
++      0x6878, 0x6016, 0x6874, 0x2008, 0xa084, 0xff00, 0x8007, 0x600a,
++      0xa184, 0x00ff, 0x6006, 0x8108, 0x00c0, 0x312a, 0x6003, 0x0003,
++      0x0078, 0x312c, 0x6003, 0x0001, 0x00f0, 0x3111, 0x0c7f, 0x0c7e,
++      0x2061, 0x0100, 0x602f, 0x0040, 0x602f, 0x0000, 0x0c7f, 0x1078,
++      0x3819, 0x0040, 0x313d, 0x1078, 0x256a, 0x60c0, 0xa005, 0x0040,
++      0x3149, 0x6003, 0x0001, 0x2091, 0x301d, 0x1078, 0x4224, 0x0078,
++      0x314d, 0x6003, 0x0004, 0x2091, 0x301d, 0x0078, 0x2bad, 0x6000,
++      0xa086, 0x0000, 0x0040, 0x2bd7, 0x2069, 0xa652, 0x7830, 0x6842,
++      0x7834, 0x6846, 0x6804, 0xd0fc, 0x0040, 0x3162, 0x2009, 0x0030,
++      0x0078, 0x3164, 0x2009, 0x001c, 0x2d00, 0x7a2c, 0x7b28, 0x7c3c,
++      0x7d38, 0x0078, 0x3608, 0xa006, 0x1078, 0x256a, 0x81ff, 0x00c0,
++      0x2bd7, 0x1078, 0x42dd, 0x1078, 0x4224, 0x0078, 0x2bad, 0x81ff,
++      0x00c0, 0x2bd7, 0x6184, 0x81ff, 0x0040, 0x3191, 0x703f, 0x0000,
++      0x2001, 0xacc0, 0x2009, 0x0040, 0x7a2c, 0x7b28, 0x7c3c, 0x7d38,
++      0x127e, 0x2091, 0x8000, 0x1078, 0x3608, 0x701b, 0x2baa, 0x127f,
++      0x007c, 0x703f, 0x0001, 0x0d7e, 0x2069, 0xacc0, 0x20a9, 0x0040,
++      0x20a1, 0xacc0, 0x2019, 0xffff, 0x43a4, 0x6550, 0xa588, 0x29c0,
++      0x210c, 0xa18c, 0x00ff, 0x216a, 0xa00e, 0x2011, 0x0002, 0x2100,
++      0xa506, 0x0040, 0x31c3, 0x1078, 0x45c4, 0x00c0, 0x31c3, 0x6014,
++      0x821c, 0x0048, 0x31bb, 0xa398, 0xacc0, 0xa085, 0xff00, 0x8007,
++      0x201a, 0x0078, 0x31c2, 0xa398, 0xacc0, 0x2324, 0xa4a4, 0xff00,
++      0xa405, 0x201a, 0x8210, 0x8108, 0xa182, 0x0080, 0x00c8, 0x31ca,
++      0x0078, 0x31a7, 0x8201, 0x8007, 0x2d0c, 0xa105, 0x206a, 0x0d7f,
++      0x20a9, 0x0040, 0x20a1, 0xacc0, 0x2099, 0xacc0, 0x1078, 0x4281,
++      0x0078, 0x3180, 0x1078, 0x35e4, 0x0040, 0x2bdb, 0x0c7e, 0x1078,
++      0x35ba, 0x0c7f, 0x00c0, 0x31e8, 0x2009, 0x0002, 0x0078, 0x2bd7,
++      0x2001, 0xa653, 0x2004, 0xd0b4, 0x0040, 0x320f, 0x6000, 0xd08c,
++      0x00c0, 0x320f, 0x6004, 0xa084, 0x00ff, 0xa086, 0x0006, 0x00c0,
++      0x320f, 0x6837, 0x0000, 0x6838, 0xc0fd, 0x683a, 0x1078, 0x8e9e,
++      0x00c0, 0x3206, 0x2009, 0x0003, 0x0078, 0x2bd7, 0x7007, 0x0003,
++      0x701b, 0x320b, 0x007c, 0x1078, 0x35e4, 0x0040, 0x2bdb, 0x20a9,
++      0x002b, 0x2c98, 0xade8, 0x0002, 0x2da0, 0x53a3, 0x20a9, 0x0004,
++      0xac80, 0x0006, 0x2098, 0xad80, 0x0006, 0x20a0, 0x1078, 0x4281,
++      0x20a9, 0x0004, 0xac80, 0x000a, 0x2098, 0xad80, 0x000a, 0x20a0,
++      0x1078, 0x4281, 0x2d00, 0x2009, 0x002b, 0x7a2c, 0x7b28, 0x7c3c,
++      0x7d38, 0x0078, 0x3608, 0x81ff, 0x00c0, 0x2bd7, 0x1078, 0x35d2,
++      0x0040, 0x2bdb, 0x1078, 0x47bd, 0x0078, 0x2bad, 0x81ff, 0x00c0,
++      0x2bd7, 0x7828, 0xa08a, 0x1000, 0x00c8, 0x2bdb, 0x1078, 0x35e4,
++      0x0040, 0x2bdb, 0x1078, 0x482f, 0x0040, 0x2bd7, 0x2019, 0x0004,
++      0x1078, 0x47d3, 0x7924, 0x810f, 0x7a28, 0x1078, 0x3259, 0x0078,
++      0x2bad, 0xa186, 0x00ff, 0x0040, 0x3261, 0x1078, 0x3271, 0x0078,
++      0x3270, 0x2029, 0x007e, 0x2061, 0xa600, 0x6450, 0x2400, 0xa506,
++      0x0040, 0x326d, 0x2508, 0x1078, 0x3271, 0x8529, 0x00c8, 0x3266,
++      0x007c, 0x1078, 0x45c4, 0x00c0, 0x327c, 0x2200, 0x8003, 0x800b,
++      0x810b, 0xa108, 0x1078, 0x5a52, 0x007c, 0x81ff, 0x00c0, 0x2bd7,
++      0x1078, 0x35d2, 0x0040, 0x2bdb, 0x1078, 0x4673, 0x0040, 0x2bd7,
++      0x1078, 0x47c8, 0x0078, 0x2bad, 0x81ff, 0x00c0, 0x2bd7, 0x1078,
++      0x35d2, 0x0040, 0x2bdb, 0x1078, 0x4673, 0x0040, 0x2bd7, 0x1078,
++      0x47b2, 0x0078, 0x2bad, 0x6100, 0x0078, 0x2bad, 0x1078, 0x35e4,
++      0x0040, 0x2bdb, 0x2001, 0xa600, 0x2004, 0xa086, 0x0003, 0x00c0,
++      0x2bd7, 0x0d7e, 0xace8, 0x000a, 0x7924, 0xd184, 0x0040, 0x32b2,
++      0xace8, 0x0006, 0x680c, 0x8007, 0x783e, 0x6808, 0x8007, 0x783a,
++      0x6b04, 0x831f, 0x6a00, 0x8217, 0x0d7f, 0x6100, 0xa18c, 0x0200,
++      0x0078, 0x2bad, 0xa006, 0x1078, 0x256a, 0x7824, 0xa084, 0x00ff,
++      0xa086, 0x00ff, 0x0040, 0x32cf, 0x81ff, 0x00c0, 0x2bd7, 0x1078,
++      0x42dd, 0x7828, 0xa08a, 0x1000, 0x00c8, 0x2bdb, 0x7924, 0xa18c,
++      0xff00, 0x810f, 0xa186, 0x00ff, 0x0040, 0x32e5, 0xa182, 0x007f,
++      0x00c8, 0x2bdb, 0x2100, 0x1078, 0x2564, 0x027e, 0x0c7e, 0x127e,
++      0x2091, 0x8000, 0x2061, 0xa8c4, 0x601b, 0x0000, 0x601f, 0x0000,
++      0x2011, 0x0003, 0x1078, 0x70e0, 0x2011, 0x0002, 0x1078, 0x70ea,
++      0x1078, 0x6fc4, 0x037e, 0x2019, 0x0000, 0x1078, 0x7058, 0x037f,
++      0x2061, 0x0100, 0x6030, 0xa084, 0x00ff, 0x810f, 0xa105, 0x604a,
++      0x6043, 0x0090, 0x6043, 0x0010, 0x2009, 0x002d, 0x2011, 0x4259,
++      0x1078, 0x5add, 0x7924, 0xa18c, 0xff00, 0x810f, 0x7a28, 0x1078,
++      0x3259, 0x127f, 0x0c7f, 0x027f, 0x0078, 0x2bad, 0x7924, 0xa18c,
++      0xff00, 0x810f, 0x0c7e, 0x1078, 0x455c, 0x2c08, 0x0c7f, 0x00c0,
++      0x2bdb, 0x0078, 0x2bad, 0x81ff, 0x0040, 0x3332, 0x2009, 0x0001,
++      0x0078, 0x2bd7, 0x60cc, 0xd09c, 0x00c0, 0x333a, 0x2009, 0x0005,
++      0x0078, 0x2bd7, 0x1078, 0x35ba, 0x00c0, 0x3342, 0x2009, 0x0002,
++      0x0078, 0x2bd7, 0x7924, 0x7a2c, 0x7b28, 0x7c3c, 0x7d38, 0x1078,
++      0x3604, 0x701b, 0x334c, 0x007c, 0x2009, 0x0080, 0x1078, 0x45c4,
++      0x00c0, 0x3359, 0x6004, 0xa084, 0x00ff, 0xa086, 0x0006, 0x0040,
++      0x335d, 0x2021, 0x400a, 0x0078, 0x2baf, 0x0d7e, 0xade8, 0x000d,
++      0x6900, 0x6a08, 0x6b0c, 0x6c10, 0x6d14, 0x6e18, 0x6820, 0xa0be,
++      0x0100, 0x0040, 0x33d0, 0xa0be, 0x0112, 0x0040, 0x33d0, 0xa0be,
++      0x0113, 0x0040, 0x33d0, 0xa0be, 0x0114, 0x0040, 0x33d0, 0xa0be,
++      0x0117, 0x0040, 0x33d0, 0xa0be, 0x011a, 0x0040, 0x33d0, 0xa0be,
++      0x0121, 0x0040, 0x33c6, 0xa0be, 0x0131, 0x0040, 0x33c6, 0xa0be,
++      0x0171, 0x0040, 0x33d0, 0xa0be, 0x0173, 0x0040, 0x33d0, 0xa0be,
++      0x01a1, 0x00c0, 0x3398, 0x6830, 0x8007, 0x6832, 0x0078, 0x33d6,
++      0xa0be, 0x0212, 0x0040, 0x33cc, 0xa0be, 0x0213, 0x0040, 0x33cc,
++      0xa0be, 0x0214, 0x0040, 0x33be, 0xa0be, 0x0217, 0x0040, 0x33b8,
++      0xa0be, 0x021a, 0x00c0, 0x33b1, 0x6838, 0x8007, 0x683a, 0x0078,
++      0x33d0, 0xa0be, 0x0300, 0x0040, 0x33d0, 0x0d7f, 0x0078, 0x2bdb,
++      0xad80, 0x0010, 0x20a9, 0x0007, 0x1078, 0x3418, 0xad80, 0x000e,
++      0x20a9, 0x0001, 0x1078, 0x3418, 0x0078, 0x33d0, 0xad80, 0x000c,
++      0x1078, 0x3426, 0x0078, 0x33d6, 0xad80, 0x000e, 0x1078, 0x3426,
++      0xad80, 0x000c, 0x20a9, 0x0001, 0x1078, 0x3418, 0x0c7e, 0x1078,
++      0x35ba, 0x0040, 0x3409, 0x6838, 0xc0fd, 0x683a, 0x6837, 0x0119,
++      0x6853, 0x0000, 0x684f, 0x0020, 0x685b, 0x0001, 0x810b, 0x697e,
++      0x6883, 0x0000, 0x6a86, 0x6b8a, 0x6c8e, 0x6d92, 0x6996, 0x689b,
++      0x0000, 0x0c7f, 0x0d7f, 0x6837, 0x0000, 0x6838, 0xc0fd, 0x683a,
++      0x6823, 0x0000, 0x6804, 0x2068, 0x1078, 0x8e66, 0x00c0, 0x3404,
++      0x2009, 0x0003, 0x0078, 0x2bd7, 0x7007, 0x0003, 0x701b, 0x340f,
++      0x007c, 0x0c7f, 0x0d7f, 0x2009, 0x0002, 0x0078, 0x2bd7, 0x6820,
++      0xa086, 0x8001, 0x00c0, 0x2bad, 0x2009, 0x0004, 0x0078, 0x2bd7,
++      0x017e, 0x2008, 0x2044, 0x8000, 0x204c, 0x8000, 0x290a, 0x8108,
++      0x280a, 0x8108, 0x00f0, 0x341a, 0x017f, 0x007c, 0x017e, 0x0a7e,
++      0x0b7e, 0x2008, 0x2044, 0x8000, 0x204c, 0x8000, 0x2054, 0x8000,
++      0x205c, 0x2b0a, 0x8108, 0x2a0a, 0x8108, 0x290a, 0x8108, 0x280a,
++      0x0b7f, 0x0a7f, 0x017f, 0x007c, 0x81ff, 0x0040, 0x3443, 0x2009,
++      0x0001, 0x0078, 0x2bd7, 0x60cc, 0xd09c, 0x00c0, 0x344b, 0x2009,
++      0x0005, 0x0078, 0x2bd7, 0x7924, 0x2140, 0xa18c, 0xff00, 0x810f,
++      0xa182, 0x0080, 0x0048, 0x2bdb, 0xa182, 0x00ff, 0x00c8, 0x2bdb,
++      0x7a2c, 0x7b28, 0x606c, 0xa306, 0x00c0, 0x3466, 0x6070, 0xa24e,
++      0x0040, 0x2bdb, 0xa9cc, 0xff00, 0x0040, 0x2bdb, 0x0c7e, 0x1078,
++      0x350f, 0x2c68, 0x0c7f, 0x0040, 0x349e, 0xa0c6, 0x4000, 0x00c0,
++      0x3484, 0x0c7e, 0x007e, 0x2d60, 0x2009, 0x0000, 0x1078, 0x489b,
++      0x00c0, 0x347b, 0xc185, 0x6000, 0xd0bc, 0x0040, 0x3480, 0xc18d,
++      0x007f, 0x0c7f, 0x0078, 0x349b, 0xa0c6, 0x4007, 0x00c0, 0x348b,
++      0x2408, 0x0078, 0x349b, 0xa0c6, 0x4008, 0x00c0, 0x3493, 0x2708,
++      0x2610, 0x0078, 0x349b, 0xa0c6, 0x4009, 0x00c0, 0x3499, 0x0078,
++      0x349b, 0x2001, 0x4006, 0x2020, 0x0078, 0x2baf, 0x2d00, 0x7022,
++      0x017e, 0x0b7e, 0x0c7e, 0x0e7e, 0x2c70, 0x1078, 0x76c7, 0x0040,
++      0x34e4, 0x2d00, 0x601a, 0x2001, 0xa657, 0x2004, 0xa084, 0x00ff,
++      0x6842, 0x2e58, 0x0e7f, 0x0e7e, 0x0c7e, 0x1078, 0x35ba, 0x0c7f,
++      0x2b70, 0x00c0, 0x34c5, 0x1078, 0x772d, 0x0e7f, 0x0c7f, 0x0b7f,
++      0x017f, 0x2009, 0x0002, 0x0078, 0x2bd7, 0x6837, 0x0000, 0x2d00,
++      0x6012, 0x6833, 0x0000, 0x6838, 0xc0fd, 0x683a, 0x127e, 0x2091,
++      0x8000, 0x1078, 0x2880, 0x127f, 0x601f, 0x0001, 0x2001, 0x0000,
++      0x1078, 0x44ee, 0x2001, 0x0002, 0x1078, 0x4502, 0x2009, 0x0002,
++      0x1078, 0x775c, 0xa085, 0x0001, 0x0e7f, 0x0c7f, 0x0b7f, 0x017f,
++      0x00c0, 0x34ee, 0x2009, 0x0003, 0x0078, 0x2bd7, 0x7007, 0x0003,
++      0x701b, 0x34f3, 0x007c, 0x6830, 0xa086, 0x0100, 0x7020, 0x2060,
++      0x00c0, 0x3501, 0x2009, 0x0004, 0x6204, 0xa294, 0x00ff, 0x0078,
++      0x2bd7, 0x2009, 0x0000, 0x1078, 0x489b, 0x00c0, 0x3508, 0xc185,
++      0x6000, 0xd0bc, 0x0040, 0x350d, 0xc18d, 0x0078, 0x2bad, 0x0e7e,
++      0x0d7e, 0x2029, 0x0000, 0x2021, 0x0080, 0x20a9, 0x007f, 0x2071,
++      0xa7b5, 0x2e04, 0xa005, 0x00c0, 0x3524, 0x2100, 0xa406, 0x00c0,
++      0x3555, 0x2428, 0x0078, 0x3555, 0x2068, 0x6f10, 0x2700, 0xa306,
++      0x00c0, 0x3546, 0x6e14, 0x2600, 0xa206, 0x00c0, 0x3546, 0x2400,
++      0xa106, 0x00c0, 0x3542, 0x2d60, 0xd884, 0x0040, 0x356a, 0x6004,
++      0xa084, 0x00ff, 0xa086, 0x0006, 0x00c0, 0x356a, 0x2001, 0x4000,
++      0x0078, 0x356b, 0x2001, 0x4007, 0x0078, 0x356b, 0x2400, 0xa106,
++      0x00c0, 0x3555, 0x6e14, 0x87ff, 0x00c0, 0x3551, 0x86ff, 0x0040,
++      0x3521, 0x2001, 0x4008, 0x0078, 0x356b, 0x8420, 0x8e70, 0x00f0,
++      0x3519, 0x85ff, 0x00c0, 0x3564, 0x2001, 0x4009, 0x0078, 0x356b,
++      0x2001, 0x0001, 0x0078, 0x356b, 0x1078, 0x455c, 0x00c0, 0x3560,
++      0x6312, 0x6216, 0xa006, 0xa005, 0x0d7f, 0x0e7f, 0x007c, 0x81ff,
++      0x00c0, 0x2bd7, 0x1078, 0x35ba, 0x0040, 0x2bd7, 0x6837, 0x0000,
++      0x6838, 0xc0fd, 0x683a, 0x7824, 0xa005, 0x0040, 0x2bdb, 0xa096,
++      0x00ff, 0x0040, 0x3587, 0xa092, 0x0004, 0x00c8, 0x2bdb, 0x2010,
++      0x2d18, 0x1078, 0x282f, 0x0040, 0x2bd7, 0x7007, 0x0003, 0x701b,
++      0x3592, 0x007c, 0x6830, 0xa086, 0x0100, 0x0040, 0x2bd7, 0x0078,
++      0x2bad, 0x7924, 0xa18c, 0xff00, 0x810f, 0xa182, 0x0080, 0x0048,
++      0x2bdb, 0xa182, 0x00ff, 0x00c8, 0x2bdb, 0x127e, 0x2091, 0x8000,
++      0x1078, 0x8d4b, 0x00c0, 0x35b7, 0xa190, 0xa735, 0x2204, 0xa065,
++      0x0040, 0x35b7, 0x1078, 0x42f8, 0x127f, 0x0078, 0x2bad, 0x127f,
++      0x0078, 0x2bd7, 0x1078, 0x138b, 0x0040, 0x35d1, 0xa006, 0x6802,
++      0x7010, 0xa005, 0x00c0, 0x35c9, 0x2d00, 0x7012, 0x7016, 0x0078,
++      0x35cf, 0x7014, 0x6802, 0x2060, 0x2d00, 0x6006, 0x7016, 0xad80,
++      0x000d, 0x007c, 0x7924, 0x810f, 0xa18c, 0x00ff, 0x1078, 0x45c4,
++      0x00c0, 0x35e1, 0x7e28, 0xa684, 0x3fff, 0xa082, 0x4000, 0x0048,
++      0x35e2, 0xa066, 0x8cff, 0x007c, 0x7e24, 0x860f, 0xa18c, 0x00ff,
++      0x1078, 0x45c4, 0x00c0, 0x35f2, 0xa6b4, 0x00ff, 0xa682, 0x4000,
++      0x0048, 0x35f3, 0xa066, 0x8cff, 0x007c, 0x017e, 0x7110, 0x81ff,
++      0x0040, 0x3600, 0x2168, 0x6904, 0x1078, 0x13a4, 0x0078, 0x35f7,
++      0x7112, 0x7116, 0x017f, 0x007c, 0x2031, 0x0001, 0x0078, 0x360a,
++      0x2031, 0x0000, 0x2061, 0xa6d2, 0x6606, 0x6112, 0x600e, 0x6226,
++      0x632a, 0x642e, 0x6532, 0x2c10, 0x1078, 0x13db, 0x7007, 0x0002,
++      0x701b, 0x2bad, 0x007c, 0x0f7e, 0x127e, 0x2091, 0x8000, 0x2079,
++      0x0000, 0x2001, 0xa690, 0x2004, 0xa005, 0x00c0, 0x3636, 0x0068,
++      0x3636, 0x7818, 0xd084, 0x00c0, 0x3636, 0x7a22, 0x7b26, 0x7c2a,
++      0x781b, 0x0001, 0x2091, 0x4080, 0x0078, 0x365b, 0x017e, 0x0c7e,
++      0x0e7e, 0x2071, 0xa682, 0x7138, 0xa182, 0x0008, 0x0048, 0x3644,
++      0x7030, 0x2060, 0x0078, 0x3655, 0x7030, 0xa0e0, 0x0008, 0xac82,
++      0xa6d2, 0x0048, 0x364d, 0x2061, 0xa692, 0x2c00, 0x7032, 0x81ff,
++      0x00c0, 0x3653, 0x7036, 0x8108, 0x713a, 0x2262, 0x6306, 0x640a,
++      0x0e7f, 0x0c7f, 0x017f, 0x127f, 0x0f7f, 0x007c, 0x0e7e, 0x2071,
++      0xa682, 0x7038, 0xa005, 0x0040, 0x3697, 0x127e, 0x2091, 0x8000,
++      0x0068, 0x3696, 0x0f7e, 0x2079, 0x0000, 0x7818, 0xd084, 0x00c0,
++      0x3695, 0x0c7e, 0x7034, 0x2060, 0x2c04, 0x7822, 0x6004, 0x7826,
++      0x6008, 0x782a, 0x781b, 0x0001, 0x2091, 0x4080, 0x7038, 0x8001,
++      0x703a, 0xa005, 0x00c0, 0x368b, 0x7033, 0xa692, 0x7037, 0xa692,
++      0x0c7f, 0x0078, 0x3695, 0xac80, 0x0008, 0xa0fa, 0xa6d2, 0x0048,
++      0x3693, 0x2001, 0xa692, 0x7036, 0x0c7f, 0x0f7f, 0x127f, 0x0e7f,
++      0x007c, 0x027e, 0x2001, 0xa653, 0x2004, 0xd0c4, 0x0040, 0x36a4,
++      0x2011, 0x8014, 0x1078, 0x361b, 0x027f, 0x007c, 0x81ff, 0x00c0,
++      0x2bd7, 0x127e, 0x2091, 0x8000, 0x6030, 0xc08d, 0xc085, 0xc0ac,
++      0x6032, 0x1078, 0x4224, 0x127f, 0x0078, 0x2bad, 0x81ff, 0x00c0,
++      0x2bd7, 0x6000, 0xa086, 0x0003, 0x00c0, 0x2bd7, 0x2001, 0xa653,
++      0x2004, 0xd0ac, 0x00c0, 0x2bd7, 0x1078, 0x35e4, 0x0040, 0x2bdb,
++      0x6004, 0xa084, 0x00ff, 0xa086, 0x0006, 0x00c0, 0x36d3, 0x7828,
++      0xa005, 0x0040, 0x2bad, 0x0c7e, 0x1078, 0x35ba, 0x0c7f, 0x0040,
++      0x2bd7, 0x6837, 0x0000, 0x6833, 0x0000, 0x6838, 0xc0fd, 0x683a,
++      0x1078, 0x8f12, 0x0040, 0x2bd7, 0x7007, 0x0003, 0x701b, 0x36e9,
++      0x007c, 0x6830, 0xa086, 0x0100, 0x0040, 0x2bd7, 0x0078, 0x2bad,
++      0x2001, 0xa600, 0x2004, 0xa086, 0x0003, 0x00c0, 0x2bd7, 0x7f24,
++      0x7a2c, 0x7b28, 0x7c3c, 0x7d38, 0x1078, 0x35ba, 0x0040, 0x2bd7,
++      0x2009, 0x0000, 0x2031, 0x0000, 0x7023, 0x0000, 0x702f, 0x0000,
++      0xad80, 0x0005, 0x7026, 0x20a0, 0x1078, 0x45c4, 0x00c0, 0x376d,
++      0x6004, 0xa0c4, 0x00ff, 0xa8c6, 0x0006, 0x0040, 0x371d, 0xa0c4,
++      0xff00, 0xa8c6, 0x0600, 0x00c0, 0x376d, 0x2001, 0xa653, 0x2004,
++      0xd0ac, 0x00c0, 0x372a, 0x1078, 0x489b, 0x00c0, 0x372a, 0xd79c,
++      0x0040, 0x376d, 0xd794, 0x00c0, 0x3730, 0xd784, 0x0040, 0x373c,
++      0xac80, 0x0006, 0x2098, 0x3400, 0x20a9, 0x0004, 0x53a3, 0x1078,
++      0x3426, 0xd794, 0x0040, 0x3745, 0xac80, 0x000a, 0x2098, 0x3400,
++      0x20a9, 0x0004, 0x53a3, 0x1078, 0x3426, 0x21a2, 0xd794, 0x0040,
++      0x3765, 0xac80, 0x0000, 0x2098, 0x94a0, 0x20a9, 0x0002, 0x53a3,
++      0xac80, 0x0003, 0x20a6, 0x94a0, 0xac80, 0x0004, 0x2098, 0x3400,
++      0x20a9, 0x0002, 0x53a3, 0x1078, 0x3418, 0xac80, 0x0026, 0x2098,
++      0x20a9, 0x0002, 0x53a3, 0x0078, 0x3766, 0x94a0, 0xd794, 0x0040,
++      0x376b, 0xa6b0, 0x000b, 0xa6b0, 0x0005, 0x8108, 0xd78c, 0x0040,
++      0x3777, 0xa186, 0x0100, 0x0040, 0x3788, 0x0078, 0x377b, 0xa186,
++      0x007e, 0x0040, 0x3788, 0xd794, 0x0040, 0x3782, 0xa686, 0x0020,
++      0x0078, 0x3784, 0xa686, 0x0028, 0x0040, 0x3791, 0x0078, 0x370c,
++      0x86ff, 0x00c0, 0x378f, 0x7120, 0x810b, 0x0078, 0x2bad, 0x702f,
++      0x0001, 0x711e, 0x7020, 0xa600, 0x7022, 0x772a, 0x2061, 0xa6d2,
++      0x6007, 0x0000, 0x6612, 0x7024, 0x600e, 0x6226, 0x632a, 0x642e,
++      0x6532, 0x2c10, 0x1078, 0x13db, 0x7007, 0x0002, 0x701b, 0x37a9,
++      0x007c, 0x702c, 0xa005, 0x00c0, 0x37bb, 0x711c, 0x7024, 0x20a0,
++      0x7728, 0x2031, 0x0000, 0x2061, 0xa6d2, 0x6224, 0x6328, 0x642c,
++      0x6530, 0x0078, 0x370c, 0x7120, 0x810b, 0x0078, 0x2bad, 0x2029,
++      0x007e, 0x7924, 0x7a28, 0x7b2c, 0x7c38, 0xa184, 0xff00, 0x8007,
++      0xa0e2, 0x0020, 0x0048, 0x2bdb, 0xa502, 0x0048, 0x2bdb, 0xa184,
++      0x00ff, 0xa0e2, 0x0020, 0x0048, 0x2bdb, 0xa502, 0x0048, 0x2bdb,
++      0xa284, 0xff00, 0x8007, 0xa0e2, 0x0020, 0x0048, 0x2bdb, 0xa502,
++      0x0048, 0x2bdb, 0xa284, 0x00ff, 0xa0e2, 0x0020, 0x0048, 0x2bdb,
++      0xa502, 0x0048, 0x2bdb, 0xa384, 0xff00, 0x8007, 0xa0e2, 0x0020,
++      0x0048, 0x2bdb, 0xa502, 0x0048, 0x2bdb, 0xa384, 0x00ff, 0xa0e2,
++      0x0020, 0x0048, 0x2bdb, 0xa502, 0x0048, 0x2bdb, 0xa484, 0xff00,
++      0x8007, 0xa0e2, 0x0020, 0x0048, 0x2bdb, 0xa502, 0x0048, 0x2bdb,
++      0xa484, 0x00ff, 0xa0e2, 0x0020, 0x0048, 0x2bdb, 0xa502, 0x0048,
++      0x2bdb, 0x2061, 0xa8a5, 0x6102, 0x6206, 0x630a, 0x640e, 0x0078,
++      0x2bad, 0x007e, 0x2001, 0xa653, 0x2004, 0xd0cc, 0x007f, 0x007c,
++      0x007e, 0x2001, 0xa672, 0x2004, 0xd0bc, 0x007f, 0x007c, 0x6164,
++      0x7a24, 0x6300, 0x82ff, 0x00c0, 0x3830, 0x7926, 0x0078, 0x2bad,
++      0x83ff, 0x00c0, 0x2bdb, 0x2001, 0xfff0, 0xa200, 0x00c8, 0x2bdb,
++      0x2019, 0xffff, 0x6068, 0xa302, 0xa200, 0x0048, 0x2bdb, 0x7926,
++      0x6266, 0x0078, 0x2bad, 0x2001, 0xa600, 0x2004, 0xa086, 0x0003,
++      0x00c0, 0x2bd7, 0x7c28, 0x7d24, 0x7e38, 0x7f2c, 0x1078, 0x35ba,
++      0x0040, 0x2bd7, 0x2009, 0x0000, 0x2019, 0x0000, 0x7023, 0x0000,
++      0x702f, 0x0000, 0xad80, 0x0003, 0x7026, 0x20a0, 0xa1e0, 0xa735,
++      0x2c64, 0x8cff, 0x0040, 0x387d, 0x6004, 0xa084, 0x00ff, 0xa086,
++      0x0006, 0x0040, 0x3872, 0x6004, 0xa084, 0xff00, 0xa086, 0x0600,
++      0x00c0, 0x387d, 0x6014, 0x20a2, 0x94a0, 0x6010, 0x8007, 0xa105,
++      0x8007, 0x20a2, 0x94a0, 0xa398, 0x0002, 0x8108, 0xa182, 0x00ff,
++      0x0040, 0x3888, 0xa386, 0x002a, 0x0040, 0x3891, 0x0078, 0x385e,
++      0x83ff, 0x00c0, 0x388f, 0x7120, 0x810c, 0x0078, 0x2bad, 0x702f,
++      0x0001, 0x711e, 0x7020, 0xa300, 0x7022, 0x2061, 0xa6d2, 0x6007,
++      0x0000, 0x6312, 0x7024, 0x600e, 0x6426, 0x652a, 0x662e, 0x6732,
++      0x2c10, 0x1078, 0x13db, 0x7007, 0x0002, 0x701b, 0x38a8, 0x007c,
++      0x702c, 0xa005, 0x00c0, 0x38b9, 0x711c, 0x7024, 0x20a0, 0x2019,
++      0x0000, 0x2061, 0xa6d2, 0x6424, 0x6528, 0x662c, 0x6730, 0x0078,
++      0x385e, 0x7120, 0x810c, 0x0078, 0x2bad, 0x81ff, 0x00c0, 0x2bd7,
++      0x60cc, 0xd09c, 0x0040, 0x2bd7, 0x1078, 0x35ba, 0x0040, 0x2bd7,
++      0x7924, 0x7a2c, 0x7b28, 0x7c3c, 0x7d38, 0x1078, 0x3604, 0x701b,
++      0x38d2, 0x007c, 0x0d7e, 0xade8, 0x000d, 0x6828, 0xa0be, 0x7000,
++      0x0040, 0x38e5, 0xa0be, 0x7100, 0x0040, 0x38e5, 0xa0be, 0x7200,
++      0x0040, 0x38e5, 0x0d7f, 0x0078, 0x2bdb, 0x6820, 0x6924, 0x1078,
++      0x254d, 0x00c0, 0x3910, 0x1078, 0x455c, 0x00c0, 0x3910, 0x7122,
++      0x6612, 0x6516, 0x6e18, 0x0c7e, 0x1078, 0x35ba, 0x0040, 0x3910,
++      0x1078, 0x35ba, 0x0040, 0x3910, 0x0c7f, 0x0d7f, 0x6837, 0x0000,
++      0x6838, 0xc0fd, 0x683a, 0x6823, 0x0000, 0x6804, 0x2068, 0x1078,
++      0x8e82, 0x0040, 0x2bd7, 0x7007, 0x0003, 0x701b, 0x3913, 0x007c,
++      0x0d7f, 0x0078, 0x2bd7, 0x7120, 0x1078, 0x298e, 0x6820, 0xa086,
++      0x8001, 0x0040, 0x2bd7, 0x2d00, 0x701e, 0x6804, 0xa080, 0x0002,
++      0x007e, 0x20a9, 0x002a, 0x2098, 0x20a0, 0x1078, 0x4281, 0x007f,
++      0xade8, 0x000d, 0x6a08, 0x6b0c, 0x6c10, 0x6d14, 0x2061, 0xa6d2,
++      0x6007, 0x0000, 0x6e00, 0x6f28, 0xa7c6, 0x7000, 0x00c0, 0x393a,
++      0x0078, 0x393e, 0xa7c6, 0x7100, 0x00c0, 0x3946, 0xa6c2, 0x0004,
++      0x0048, 0x2bdb, 0x2009, 0x0004, 0x0078, 0x3608, 0xa7c6, 0x7200,
++      0x00c0, 0x2bdb, 0xa6c2, 0x0054, 0x0048, 0x2bdb, 0x600e, 0x6013,
++      0x002a, 0x6226, 0x632a, 0x642e, 0x6532, 0x2c10, 0x1078, 0x13db,
++      0x7007, 0x0002, 0x701b, 0x395d, 0x007c, 0x701c, 0x2068, 0x6804,
++      0xa080, 0x0001, 0x2004, 0xa080, 0x0002, 0x007e, 0x20a9, 0x002a,
++      0x2098, 0x20a0, 0x1078, 0x4281, 0x007f, 0x2009, 0x002a, 0x2061,
++      0xa6d2, 0x6224, 0x6328, 0x642c, 0x6530, 0x0078, 0x3608, 0x81ff,
++      0x00c0, 0x2bd7, 0x792c, 0x2001, 0xa89d, 0x2102, 0x1078, 0x35d2,
++      0x0040, 0x2bdb, 0x1078, 0x4673, 0x0040, 0x2bd7, 0x127e, 0x2091,
++      0x8000, 0x1078, 0x47de, 0x127f, 0x0078, 0x2bad, 0x7824, 0xd08c,
++      0x00c0, 0x3995, 0xd084, 0x0040, 0x31da, 0x1078, 0x35e4, 0x0040,
++      0x2bdb, 0x0c7e, 0x1078, 0x35ba, 0x0c7f, 0x00c0, 0x39a3, 0x2009,
++      0x0002, 0x0078, 0x2bd7, 0x6004, 0xa084, 0x00ff, 0xa086, 0x0006,
++      0x0040, 0x39b0, 0xa08e, 0x0004, 0x0040, 0x39b0, 0xa08e, 0x0005,
++      0x00c0, 0x39dd, 0x7824, 0xd08c, 0x0040, 0x39bb, 0x6000, 0xc08c,
++      0x6002, 0x0078, 0x39c5, 0x2001, 0xa653, 0x2004, 0xd0b4, 0x0040,
++      0x320f, 0x6000, 0xd08c, 0x00c0, 0x320f, 0x6837, 0x0000, 0x6838,
++      0xc0fd, 0x683a, 0x1078, 0x8e9e, 0x00c0, 0x39d2, 0x2009, 0x0003,
++      0x0078, 0x2bd7, 0x7007, 0x0003, 0x701b, 0x39d7, 0x007c, 0x1078,
++      0x35e4, 0x0040, 0x2bdb, 0x0078, 0x320f, 0x2009, 0xa62f, 0x210c,
++      0x81ff, 0x0040, 0x39e7, 0x2009, 0x0001, 0x0078, 0x2bd7, 0x2001,
++      0xa600, 0x2004, 0xa086, 0x0003, 0x0040, 0x39f2, 0x2009, 0x0007,
++      0x0078, 0x2bd7, 0x2001, 0xa653, 0x2004, 0xd0ac, 0x0040, 0x39fc,
++      0x2009, 0x0008, 0x0078, 0x2bd7, 0x609c, 0xd0a4, 0x00c0, 0x3a03,
++      0xd0ac, 0x00c0, 0x320f, 0x6837, 0x0000, 0x6833, 0x0000, 0x6838,
++      0xc0fd, 0x683a, 0x1078, 0x8f12, 0x00c0, 0x3a12, 0x2009, 0x0003,
++      0x0078, 0x2bd7, 0x7007, 0x0003, 0x701b, 0x3a17, 0x007c, 0x6830,
++      0xa086, 0x0100, 0x00c0, 0x3a20, 0x2009, 0x0004, 0x0078, 0x2bd7,
++      0x1078, 0x35e4, 0x0040, 0x2bdb, 0x0078, 0x39b2, 0x81ff, 0x2009,
++      0x0001, 0x00c0, 0x2bd7, 0x6000, 0xa086, 0x0003, 0x2009, 0x0007,
++      0x00c0, 0x2bd7, 0x2001, 0xa653, 0x2004, 0xd0ac, 0x2009, 0x0008,
++      0x00c0, 0x2bd7, 0x1078, 0x35e4, 0x0040, 0x2bdb, 0x6004, 0xa084,
++      0x00ff, 0xa086, 0x0006, 0x2009, 0x0009, 0x00c0, 0x2bd7, 0x0c7e,
++      0x1078, 0x35ba, 0x0c7f, 0x2009, 0x0002, 0x0040, 0x2bd7, 0x6837,
++      0x0000, 0x6833, 0x0000, 0x6838, 0xc0fd, 0x683a, 0x7928, 0xa194,
++      0xff00, 0xa18c, 0x00ff, 0xa006, 0x82ff, 0x00c0, 0x3a65, 0xc0ed,
++      0x6952, 0x792c, 0x6956, 0x0078, 0x3a6e, 0xa28e, 0x0100, 0x00c0,
++      0x2bdb, 0xc0e5, 0x6853, 0x0000, 0x6857, 0x0000, 0x683e, 0x1078,
++      0x90bd, 0x2009, 0x0003, 0x0040, 0x2bd7, 0x7007, 0x0003, 0x701b,
++      0x3a7a, 0x007c, 0x6830, 0xa086, 0x0100, 0x2009, 0x0004, 0x0040,
++      0x2bd7, 0x0078, 0x2bad, 0x81ff, 0x2009, 0x0001, 0x00c0, 0x2bd7,
++      0x6000, 0xa086, 0x0003, 0x2009, 0x0007, 0x00c0, 0x2bd7, 0x1078,
++      0x35e4, 0x0040, 0x2bdb, 0x6004, 0xa084, 0x00ff, 0xa086, 0x0006,
++      0x2009, 0x0009, 0x00c0, 0x2bd7, 0x0c7e, 0x1078, 0x35ba, 0x0c7f,
++      0x2009, 0x0002, 0x0040, 0x2bd7, 0xad80, 0x000f, 0x2009, 0x0008,
++      0x7a2c, 0x7b28, 0x7c3c, 0x7d38, 0x1078, 0x3604, 0x701b, 0x3ab1,
++      0x007c, 0x0d7e, 0xade8, 0x000f, 0x6800, 0xa086, 0x0500, 0x00c0,
++      0x3ac4, 0x6804, 0xa005, 0x00c0, 0x3ac4, 0x6808, 0xa084, 0xff00,
++      0x00c0, 0x3ac4, 0x0078, 0x3ac7, 0x0d7f, 0x00c0, 0x2bdb, 0x0d7f,
++      0x6837, 0x0000, 0x6833, 0x0000, 0x6838, 0xc0fd, 0x683a, 0x0c7e,
++      0x1078, 0x35e4, 0x00c0, 0x3ad7, 0x0c7f, 0x0078, 0x2bdb, 0x1078,
++      0x9119, 0x2009, 0x0003, 0x0c7f, 0x0040, 0x2bd7, 0x7007, 0x0003,
++      0x701b, 0x3ae3, 0x007c, 0x6830, 0xa086, 0x0100, 0x2009, 0x0004,
++      0x0040, 0x2bd7, 0x0078, 0x2bad, 0x127e, 0x0c7e, 0x0e7e, 0x2061,
++      0x0100, 0x2071, 0xa600, 0x6044, 0xd0a4, 0x00c0, 0x3b15, 0xd084,
++      0x0040, 0x3afe, 0x1078, 0x3c75, 0x0078, 0x3b11, 0xd08c, 0x0040,
++      0x3b05, 0x1078, 0x3b8c, 0x0078, 0x3b11, 0xd094, 0x0040, 0x3b0c,
++      0x1078, 0x3b60, 0x0078, 0x3b11, 0xd09c, 0x0040, 0x3b11, 0x1078,
++      0x3b1f, 0x0e7f, 0x0c7f, 0x127f, 0x007c, 0x017e, 0x6128, 0xd19c,
++      0x00c0, 0x3b1c, 0xc19d, 0x612a, 0x017f, 0x0078, 0x3b11, 0x624c,
++      0xa286, 0xf0f0, 0x00c0, 0x3b30, 0x6048, 0xa086, 0xf0f0, 0x0040,
++      0x3b30, 0x624a, 0x6043, 0x0090, 0x6043, 0x0010, 0x0078, 0x3b5f,
++      0xa294, 0xff00, 0xa296, 0xf700, 0x0040, 0x3b45, 0x7134, 0xd1a4,
++      0x00c0, 0x3b45, 0x6240, 0xa294, 0x0010, 0x0040, 0x3b45, 0x2009,
++      0x00f7, 0x1078, 0x42a1, 0x0078, 0x3b5f, 0x6043, 0x0040, 0x6043,
++      0x0000, 0x7077, 0x0000, 0x708f, 0x0001, 0x70b3, 0x0000, 0x70cf,
++      0x0000, 0x2009, 0xacc0, 0x200b, 0x0000, 0x7087, 0x0000, 0x707b,
++      0x000f, 0x2009, 0x000f, 0x2011, 0x41d5, 0x1078, 0x5add, 0x007c,
++      0x157e, 0x7078, 0xa005, 0x00c0, 0x3b8a, 0x2011, 0x41d5, 0x1078,
++      0x5a45, 0x6040, 0xa094, 0x0010, 0xa285, 0x0020, 0x6042, 0x20a9,
++      0x00c8, 0x6044, 0xd08c, 0x00c0, 0x3b83, 0x00f0, 0x3b71, 0x6242,
++      0x708b, 0x0000, 0x6040, 0xa094, 0x0010, 0xa285, 0x0080, 0x6042,
++      0x6242, 0x0078, 0x3b8a, 0x6242, 0x708b, 0x0000, 0x707f, 0x0000,
++      0x0078, 0x3b8a, 0x157f, 0x007c, 0x707c, 0xa08a, 0x0003, 0x00c8,
++      0x3b95, 0x1079, 0x3b98, 0x0078, 0x3b97, 0x1078, 0x1332, 0x007c,
++      0x3b9b, 0x3bea, 0x3c74, 0x0f7e, 0x707f, 0x0001, 0x20e1, 0xa000,
++      0x20e1, 0x8700, 0x1078, 0x21f7, 0x20e1, 0x9080, 0x20e1, 0x4000,
++      0x2079, 0xab00, 0x207b, 0x2200, 0x7807, 0x00ef, 0x780b, 0x0000,
++      0x780f, 0x00ef, 0x7813, 0x0138, 0x7817, 0x0000, 0x781b, 0x0000,
++      0x781f, 0x0000, 0x7823, 0xffff, 0x7827, 0xffff, 0x782b, 0x0000,
++      0x782f, 0x0000, 0x2079, 0xab0c, 0x207b, 0x1101, 0x7807, 0x0000,
++      0x2099, 0xa605, 0x20a1, 0xab0e, 0x20a9, 0x0004, 0x53a3, 0x2079,
++      0xab12, 0x207b, 0x0000, 0x7807, 0x0000, 0x2099, 0xab00, 0x20a1,
++      0x020b, 0x20a9, 0x0014, 0x53a6, 0x60c3, 0x000c, 0x600f, 0x0000,
++      0x1078, 0x420b, 0x0f7f, 0x7083, 0x0000, 0x6043, 0x0008, 0x6043,
++      0x0000, 0x007c, 0x0d7e, 0x7080, 0x7083, 0x0000, 0xa025, 0x0040,
++      0x3c5e, 0x6020, 0xd0b4, 0x00c0, 0x3c5c, 0x718c, 0x81ff, 0x0040,
++      0x3c4b, 0xa486, 0x000c, 0x00c0, 0x3c56, 0xa480, 0x0018, 0x8004,
++      0x20a8, 0x2011, 0xab80, 0x2019, 0xab00, 0x220c, 0x2304, 0xa106,
++      0x00c0, 0x3c22, 0x8210, 0x8318, 0x00f0, 0x3c05, 0x6043, 0x0004,
++      0x608b, 0xbc94, 0x608f, 0xf0f0, 0x6043, 0x0006, 0x707f, 0x0002,
++      0x708b, 0x0002, 0x2009, 0x07d0, 0x2011, 0x41dc, 0x1078, 0x5add,
++      0x0078, 0x3c5c, 0x2069, 0xab80, 0x6930, 0xa18e, 0x1101, 0x00c0,
++      0x3c56, 0x6834, 0xa005, 0x00c0, 0x3c56, 0x6900, 0xa18c, 0x00ff,
++      0x00c0, 0x3c36, 0x6804, 0xa005, 0x0040, 0x3c4b, 0x2011, 0xab8e,
++      0x2019, 0xa605, 0x20a9, 0x0004, 0x220c, 0x2304, 0xa102, 0x0048,
++      0x3c49, 0x00c0, 0x3c56, 0x8210, 0x8318, 0x00f0, 0x3c3c, 0x0078,
++      0x3c56, 0x708f, 0x0000, 0x20e1, 0x9080, 0x20e1, 0x4000, 0x2099,
++      0xab80, 0x20a1, 0x020b, 0x20a9, 0x0014, 0x53a6, 0x6043, 0x0008,
++      0x6043, 0x0000, 0x0078, 0x3c5e, 0x0d7f, 0x007c, 0x6020, 0xd0b4,
++      0x00c0, 0x3c5c, 0x60c3, 0x000c, 0x2011, 0xa8bb, 0x2013, 0x0000,
++      0x7083, 0x0000, 0x20e1, 0x9080, 0x60a3, 0x0056, 0x60a7, 0x9575,
++      0x1078, 0x6e06, 0x0078, 0x3c5c, 0x007c, 0x7088, 0xa08a, 0x001d,
++      0x00c8, 0x3c7e, 0x1079, 0x3c81, 0x0078, 0x3c80, 0x1078, 0x1332,
++      0x007c, 0x3cab, 0x3cba, 0x3ce9, 0x3d02, 0x3d2e, 0x3d5a, 0x3d86,
++      0x3dbc, 0x3de8, 0x3e10, 0x3e53, 0x3e7d, 0x3e9f, 0x3eb5, 0x3edb,
++      0x3eee, 0x3ef7, 0x3f2b, 0x3f57, 0x3f83, 0x3faf, 0x3fe5, 0x4030,
++      0x405f, 0x4081, 0x40c3, 0x40e9, 0x4102, 0x4103, 0x0c7e, 0x2061,
++      0xa600, 0x6003, 0x0007, 0x2061, 0x0100, 0x6004, 0xa084, 0xfff9,
++      0x6006, 0x0c7f, 0x007c, 0x608b, 0xbc94, 0x608f, 0xf0f0, 0x6043,
++      0x0002, 0x708b, 0x0001, 0x2009, 0x07d0, 0x2011, 0x41dc, 0x1078,
++      0x5add, 0x007c, 0x0f7e, 0x7080, 0xa086, 0x0014, 0x00c0, 0x3ce7,
++      0x6043, 0x0000, 0x6020, 0xd0b4, 0x00c0, 0x3ce7, 0x2079, 0xab80,
++      0x7a30, 0xa296, 0x1102, 0x00c0, 0x3ce5, 0x7834, 0xa005, 0x00c0,
++      0x3ce5, 0x7a38, 0xd2fc, 0x0040, 0x3cdb, 0x70b0, 0xa005, 0x00c0,
++      0x3cdb, 0x70b3, 0x0001, 0x2011, 0x41dc, 0x1078, 0x5a45, 0x708b,
++      0x0010, 0x1078, 0x3ef7, 0x0078, 0x3ce7, 0x1078, 0x4224, 0x0f7f,
++      0x007c, 0x708b, 0x0003, 0x6043, 0x0004, 0x2011, 0x41dc, 0x1078,
++      0x5a45, 0x1078, 0x4289, 0x20a3, 0x1102, 0x20a3, 0x0000, 0x20a9,
++      0x000a, 0x20a3, 0x0000, 0x00f0, 0x3cf9, 0x60c3, 0x0014, 0x1078,
++      0x420b, 0x007c, 0x0f7e, 0x7080, 0xa005, 0x0040, 0x3d2c, 0x2011,
++      0x41dc, 0x1078, 0x5a45, 0xa086, 0x0014, 0x00c0, 0x3d2a, 0x2079,
++      0xab80, 0x7a30, 0xa296, 0x1102, 0x00c0, 0x3d2a, 0x7834, 0xa005,
++      0x00c0, 0x3d2a, 0x7a38, 0xd2fc, 0x0040, 0x3d24, 0x70b0, 0xa005,
++      0x00c0, 0x3d24, 0x70b3, 0x0001, 0x708b, 0x0004, 0x1078, 0x3d2e,
++      0x0078, 0x3d2c, 0x1078, 0x4224, 0x0f7f, 0x007c, 0x708b, 0x0005,
++      0x1078, 0x4289, 0x20a3, 0x1103, 0x20a3, 0x0000, 0x3430, 0x2011,
++      0xab8e, 0x1078, 0x42d4, 0x00c0, 0x3d4c, 0x7074, 0xa005, 0x00c0,
++      0x3d4c, 0x7150, 0xa186, 0xffff, 0x0040, 0x3d4c, 0x1078, 0x419d,
++      0x0040, 0x3d4c, 0x1078, 0x42b8, 0x20a9, 0x0008, 0x2298, 0x26a0,
++      0x53a6, 0x20a3, 0x0000, 0x20a3, 0x0000, 0x60c3, 0x0014, 0x1078,
++      0x420b, 0x007c, 0x0f7e, 0x7080, 0xa005, 0x0040, 0x3d84, 0x2011,
++      0x41dc, 0x1078, 0x5a45, 0xa086, 0x0014, 0x00c0, 0x3d82, 0x2079,
++      0xab80, 0x7a30, 0xa296, 0x1103, 0x00c0, 0x3d82, 0x7834, 0xa005,
++      0x00c0, 0x3d82, 0x7a38, 0xd2fc, 0x0040, 0x3d7c, 0x70b0, 0xa005,
++      0x00c0, 0x3d7c, 0x70b3, 0x0001, 0x708b, 0x0006, 0x1078, 0x3d86,
++      0x0078, 0x3d84, 0x1078, 0x4224, 0x0f7f, 0x007c, 0x708b, 0x0007,
++      0x1078, 0x4289, 0x20a3, 0x1104, 0x20a3, 0x0000, 0x3430, 0x2011,
++      0xab8e, 0x1078, 0x42d4, 0x00c0, 0x3dae, 0x7074, 0xa005, 0x00c0,
++      0x3dae, 0x7154, 0xa186, 0xffff, 0x0040, 0x3dae, 0xa180, 0x29c0,
++      0x200c, 0xa18c, 0xff00, 0x810f, 0x1078, 0x419d, 0x0040, 0x3dae,
++      0x1078, 0x3820, 0x0040, 0x3dae, 0x1078, 0x256a, 0x20a9, 0x0008,
++      0x2298, 0x26a0, 0x53a6, 0x20a3, 0x0000, 0x20a3, 0x0000, 0x60c3,
++      0x0014, 0x1078, 0x420b, 0x007c, 0x0f7e, 0x7080, 0xa005, 0x0040,
++      0x3de6, 0x2011, 0x41dc, 0x1078, 0x5a45, 0xa086, 0x0014, 0x00c0,
++      0x3de4, 0x2079, 0xab80, 0x7a30, 0xa296, 0x1104, 0x00c0, 0x3de4,
++      0x7834, 0xa005, 0x00c0, 0x3de4, 0x7a38, 0xd2fc, 0x0040, 0x3dde,
++      0x70b0, 0xa005, 0x00c0, 0x3dde, 0x70b3, 0x0001, 0x708b, 0x0008,
++      0x1078, 0x3de8, 0x0078, 0x3de6, 0x1078, 0x4224, 0x0f7f, 0x007c,
++      0x708b, 0x0009, 0x1078, 0x4289, 0x20a3, 0x1105, 0x20a3, 0x0100,
++      0x3430, 0x1078, 0x42d4, 0x00c0, 0x3e01, 0x7074, 0xa005, 0x00c0,
++      0x3e01, 0x1078, 0x4104, 0x00c0, 0x3e0b, 0xa085, 0x0001, 0x1078,
++      0x256a, 0x20a9, 0x0008, 0x2099, 0xab8e, 0x26a0, 0x53a6, 0x20a3,
++      0x0000, 0x20a3, 0x0000, 0x60c3, 0x0014, 0x1078, 0x420b, 0x007c,
++      0x0f7e, 0x7080, 0xa005, 0x0040, 0x3e51, 0x2011, 0x41dc, 0x1078,
++      0x5a45, 0xa086, 0x0014, 0x00c0, 0x3e4f, 0x2079, 0xab80, 0x7a30,
++      0xa296, 0x1105, 0x00c0, 0x3e4f, 0x7834, 0x2011, 0x0100, 0xa21e,
++      0x00c0, 0x3e3a, 0x7a38, 0xd2fc, 0x0040, 0x3e34, 0x70b0, 0xa005,
++      0x00c0, 0x3e34, 0x70b3, 0x0001, 0x708b, 0x000a, 0x1078, 0x3e53,
++      0x0078, 0x3e51, 0xa005, 0x00c0, 0x3e4f, 0x7a38, 0xd2fc, 0x0040,
++      0x3e47, 0x70b0, 0xa005, 0x00c0, 0x3e47, 0x70b3, 0x0001, 0x7087,
++      0x0000, 0x708b, 0x000e, 0x1078, 0x3edb, 0x0078, 0x3e51, 0x1078,
++      0x4224, 0x0f7f, 0x007c, 0x708b, 0x000b, 0x2011, 0xab0e, 0x22a0,
++      0x20a9, 0x0040, 0x2019, 0xffff, 0x43a4, 0x20a9, 0x0002, 0x2009,
++      0x0000, 0x41a4, 0x1078, 0x4289, 0x20a3, 0x1106, 0x20a3, 0x0000,
++      0x1078, 0x42d4, 0x0040, 0x3e70, 0x2013, 0x0000, 0x0078, 0x3e74,
++      0x6030, 0xa085, 0x0100, 0x2012, 0x2298, 0x20a9, 0x0042, 0x53a6,
++      0x60c3, 0x0084, 0x1078, 0x420b, 0x007c, 0x0f7e, 0x7080, 0xa005,
++      0x0040, 0x3e9d, 0x2011, 0x41dc, 0x1078, 0x5a45, 0xa086, 0x0084,
++      0x00c0, 0x3e9b, 0x2079, 0xab80, 0x7a30, 0xa296, 0x1106, 0x00c0,
++      0x3e9b, 0x7834, 0xa005, 0x00c0, 0x3e9b, 0x708b, 0x000c, 0x1078,
++      0x3e9f, 0x0078, 0x3e9d, 0x1078, 0x4224, 0x0f7f, 0x007c, 0x708b,
++      0x000d, 0x1078, 0x4289, 0x20a3, 0x1107, 0x20a3, 0x0000, 0x2099,
++      0xab8e, 0x20a9, 0x0040, 0x53a6, 0x20a3, 0x0000, 0x20a3, 0x0000,
++      0x60c3, 0x0084, 0x1078, 0x420b, 0x007c, 0x0f7e, 0x7080, 0xa005,
++      0x0040, 0x3ed9, 0x2011, 0x41dc, 0x1078, 0x5a45, 0xa086, 0x0084,
++      0x00c0, 0x3ed7, 0x2079, 0xab80, 0x7a30, 0xa296, 0x1107, 0x00c0,
++      0x3ed7, 0x7834, 0xa005, 0x00c0, 0x3ed7, 0x7087, 0x0001, 0x1078,
++      0x427b, 0x708b, 0x000e, 0x1078, 0x3edb, 0x0078, 0x3ed9, 0x1078,
++      0x4224, 0x0f7f, 0x007c, 0x708b, 0x000f, 0x7083, 0x0000, 0x608b,
++      0xbc85, 0x608f, 0xb5b5, 0x6043, 0x0005, 0x6043, 0x0004, 0x2009,
++      0x07d0, 0x2011, 0x41dc, 0x1078, 0x5a38, 0x007c, 0x7080, 0xa005,
++      0x0040, 0x3ef6, 0x2011, 0x41dc, 0x1078, 0x5a45, 0x007c, 0x708b,
++      0x0011, 0x1078, 0x42d4, 0x00c0, 0x3f14, 0x716c, 0x81ff, 0x0040,
++      0x3f14, 0x2009, 0x0000, 0x7070, 0xa084, 0x00ff, 0x1078, 0x254d,
++      0xa186, 0x007e, 0x0040, 0x3f14, 0xa186, 0x0080, 0x0040, 0x3f14,
++      0x2011, 0xab8e, 0x1078, 0x419d, 0x20e1, 0x9080, 0x20e1, 0x4000,
++      0x2099, 0xab80, 0x20a1, 0x020b, 0x7480, 0xa480, 0x0018, 0xa080,
++      0x0007, 0xa084, 0x03f8, 0x8004, 0x20a8, 0x53a6, 0x60c3, 0x0014,
++      0x1078, 0x420b, 0x007c, 0x0f7e, 0x7080, 0xa005, 0x0040, 0x3f55,
++      0x2011, 0x41dc, 0x1078, 0x5a45, 0xa086, 0x0014, 0x00c0, 0x3f53,
++      0x2079, 0xab80, 0x7a30, 0xa296, 0x1103, 0x00c0, 0x3f53, 0x7834,
++      0xa005, 0x00c0, 0x3f53, 0x7a38, 0xd2fc, 0x0040, 0x3f4d, 0x70b0,
++      0xa005, 0x00c0, 0x3f4d, 0x70b3, 0x0001, 0x708b, 0x0012, 0x1078,
++      0x3f57, 0x0078, 0x3f55, 0x1078, 0x4224, 0x0f7f, 0x007c, 0x708b,
++      0x0013, 0x1078, 0x4295, 0x20a3, 0x1103, 0x20a3, 0x0000, 0x3430,
++      0x2011, 0xab8e, 0x1078, 0x42d4, 0x00c0, 0x3f75, 0x7074, 0xa005,
++      0x00c0, 0x3f75, 0x7150, 0xa186, 0xffff, 0x0040, 0x3f75, 0x1078,
++      0x419d, 0x0040, 0x3f75, 0x1078, 0x42b8, 0x20a9, 0x0008, 0x2298,
++      0x26a0, 0x53a6, 0x20a3, 0x0000, 0x20a3, 0x0000, 0x60c3, 0x0014,
++      0x1078, 0x420b, 0x007c, 0x0f7e, 0x7080, 0xa005, 0x0040, 0x3fad,
++      0x2011, 0x41dc, 0x1078, 0x5a45, 0xa086, 0x0014, 0x00c0, 0x3fab,
++      0x2079, 0xab80, 0x7a30, 0xa296, 0x1104, 0x00c0, 0x3fab, 0x7834,
++      0xa005, 0x00c0, 0x3fab, 0x7a38, 0xd2fc, 0x0040, 0x3fa5, 0x70b0,
++      0xa005, 0x00c0, 0x3fa5, 0x70b3, 0x0001, 0x708b, 0x0014, 0x1078,
++      0x3faf, 0x0078, 0x3fad, 0x1078, 0x4224, 0x0f7f, 0x007c, 0x708b,
++      0x0015, 0x1078, 0x4295, 0x20a3, 0x1104, 0x20a3, 0x0000, 0x3430,
++      0x2011, 0xab8e, 0x1078, 0x42d4, 0x00c0, 0x3fd7, 0x7074, 0xa005,
++      0x00c0, 0x3fd7, 0x7154, 0xa186, 0xffff, 0x0040, 0x3fd7, 0xa180,
++      0x29c0, 0x200c, 0xa18c, 0xff00, 0x810f, 0x1078, 0x419d, 0x0040,
++      0x3fd7, 0x1078, 0x3820, 0x0040, 0x3fd7, 0x1078, 0x256a, 0x20a9,
++      0x0008, 0x2298, 0x26a0, 0x53a6, 0x20a3, 0x0000, 0x20a3, 0x0000,
++      0x60c3, 0x0014, 0x1078, 0x420b, 0x007c, 0x0f7e, 0x7080, 0xa005,
++      0x0040, 0x402e, 0x2011, 0x41dc, 0x1078, 0x5a45, 0xa086, 0x0014,
++      0x00c0, 0x402c, 0x2079, 0xab80, 0x7a30, 0xa296, 0x1105, 0x00c0,
++      0x402c, 0x7834, 0x2011, 0x0100, 0xa21e, 0x00c0, 0x400b, 0x7a38,
++      0xd2fc, 0x0040, 0x4009, 0x70b0, 0xa005, 0x00c0, 0x4009, 0x70b3,
++      0x0001, 0x0078, 0x401a, 0xa005, 0x00c0, 0x402c, 0x7a38, 0xd2fc,
++      0x0040, 0x4018, 0x70b0, 0xa005, 0x00c0, 0x4018, 0x70b3, 0x0001,
++      0x7087, 0x0000, 0x7a38, 0xd2f4, 0x0040, 0x4026, 0x2001, 0xa674,
++      0x2004, 0xd0a4, 0x00c0, 0x4026, 0x70cf, 0x0008, 0x708b, 0x0016,
++      0x1078, 0x4030, 0x0078, 0x402e, 0x1078, 0x4224, 0x0f7f, 0x007c,
++      0x20e1, 0x9080, 0x20e1, 0x4000, 0x2099, 0xab80, 0x20a1, 0x020b,
++      0x20a9, 0x000e, 0x53a6, 0x3430, 0x2011, 0xab8e, 0x708b, 0x0017,
++      0x1078, 0x42d4, 0x00c0, 0x4050, 0x7074, 0xa005, 0x00c0, 0x4050,
++      0x1078, 0x4104, 0x00c0, 0x405a, 0xa085, 0x0001, 0x1078, 0x256a,
++      0x20a9, 0x0008, 0x2099, 0xab8e, 0x26a0, 0x53a6, 0x20a3, 0x0000,
++      0x20a3, 0x0000, 0x60c3, 0x0014, 0x1078, 0x420b, 0x007c, 0x0f7e,
++      0x7080, 0xa005, 0x0040, 0x407f, 0x2011, 0x41dc, 0x1078, 0x5a45,
++      0xa086, 0x0084, 0x00c0, 0x407d, 0x2079, 0xab80, 0x7a30, 0xa296,
++      0x1106, 0x00c0, 0x407d, 0x7834, 0xa005, 0x00c0, 0x407d, 0x708b,
++      0x0018, 0x1078, 0x4081, 0x0078, 0x407f, 0x1078, 0x4224, 0x0f7f,
++      0x007c, 0x708b, 0x0019, 0x1078, 0x4295, 0x20a3, 0x1106, 0x20a3,
++      0x0000, 0x3430, 0x2099, 0xab8e, 0x2039, 0xab0e, 0x27a0, 0x20a9,
++      0x0040, 0x53a3, 0x1078, 0x42d4, 0x00c0, 0x40b5, 0x2728, 0x2514,
++      0x8207, 0xa084, 0x00ff, 0x8000, 0x2018, 0xa294, 0x00ff, 0x8007,
++      0xa205, 0x202a, 0x6030, 0x2310, 0x8214, 0xa2a0, 0xab0e, 0x2414,
++      0xa38c, 0x0001, 0x0040, 0x40b0, 0xa294, 0xff00, 0x0078, 0x40b3,
++      0xa294, 0x00ff, 0x8007, 0xa215, 0x2222, 0x2798, 0x26a0, 0x20a9,
++      0x0040, 0x53a6, 0x20a3, 0x0000, 0x20a3, 0x0000, 0x60c3, 0x0084,
++      0x1078, 0x420b, 0x007c, 0x0f7e, 0x7080, 0xa005, 0x0040, 0x40e7,
++      0x2011, 0x41dc, 0x1078, 0x5a45, 0xa086, 0x0084, 0x00c0, 0x40e5,
++      0x2079, 0xab80, 0x7a30, 0xa296, 0x1107, 0x00c0, 0x40e5, 0x7834,
++      0xa005, 0x00c0, 0x40e5, 0x7087, 0x0001, 0x1078, 0x427b, 0x708b,
++      0x001a, 0x1078, 0x40e9, 0x0078, 0x40e7, 0x1078, 0x4224, 0x0f7f,
++      0x007c, 0x708b, 0x001b, 0x20e1, 0x9080, 0x20e1, 0x4000, 0x2099,
++      0xab80, 0x20a1, 0x020b, 0x7480, 0xa480, 0x0018, 0xa080, 0x0007,
++      0xa084, 0x03f8, 0x8004, 0x20a8, 0x53a6, 0x60c3, 0x0084, 0x1078,
++      0x420b, 0x007c, 0x007c, 0x007c, 0x087e, 0x097e, 0x2029, 0xa653,
++      0x252c, 0x20a9, 0x0008, 0x2041, 0xab0e, 0x28a0, 0x2099, 0xab8e,
++      0x53a3, 0x20a9, 0x0008, 0x2011, 0x0007, 0xd5d4, 0x0040, 0x411a,
++      0x2011, 0x0000, 0x2800, 0xa200, 0x200c, 0xa1a6, 0xffff, 0x00c0,
++      0x412c, 0xd5d4, 0x0040, 0x4127, 0x8210, 0x0078, 0x4128, 0x8211,
++      0x00f0, 0x411a, 0x0078, 0x4194, 0x82ff, 0x00c0, 0x413e, 0xd5d4,
++      0x0040, 0x4138, 0xa1a6, 0x3fff, 0x0040, 0x4124, 0x0078, 0x413c,
++      0xa1a6, 0x3fff, 0x0040, 0x4194, 0xa18d, 0xc000, 0x20a9, 0x0010,
++      0x2019, 0x0001, 0xd5d4, 0x0040, 0x4147, 0x2019, 0x0010, 0x2120,
++      0xd5d4, 0x0040, 0x414e, 0x8423, 0x0078, 0x414f, 0x8424, 0x00c8,
++      0x415c, 0xd5d4, 0x0040, 0x4157, 0x8319, 0x0078, 0x4158, 0x8318,
++      0x00f0, 0x4148, 0x0078, 0x4194, 0x23a8, 0x2021, 0x0001, 0x8426,
++      0x8425, 0x00f0, 0x4160, 0x2328, 0x8529, 0xa2be, 0x0007, 0x0040,
++      0x4174, 0x007e, 0x2039, 0x0007, 0x2200, 0xa73a, 0x007f, 0x27a8,
++      0xa5a8, 0x0010, 0x00f0, 0x4170, 0x7552, 0xa5c8, 0x29c0, 0x292c,
++      0xa5ac, 0x00ff, 0x6532, 0x60e7, 0x0000, 0x65ea, 0x706f, 0x0000,
++      0x7572, 0x2018, 0x2304, 0xa405, 0x201a, 0x7077, 0x0001, 0x26a0,
++      0x2898, 0x20a9, 0x0008, 0x53a6, 0x20a3, 0x0000, 0x20a3, 0x0000,
++      0xa085, 0x0001, 0x0078, 0x419a, 0xa006, 0x0078, 0x419a, 0xa006,
++      0x1078, 0x1332, 0x097f, 0x087f, 0x007c, 0x2118, 0x2021, 0x0000,
++      0x2001, 0x0007, 0xa39a, 0x0010, 0x0048, 0x41aa, 0x8420, 0x8001,
++      0x0078, 0x41a2, 0x2118, 0x84ff, 0x0040, 0x41b3, 0xa39a, 0x0010,
++      0x8421, 0x00c0, 0x41ae, 0x2021, 0x0001, 0x83ff, 0x0040, 0x41bc,
++      0x8423, 0x8319, 0x00c0, 0x41b8, 0xa238, 0x2704, 0xa42c, 0x00c0,
++      0x41d4, 0xa405, 0x203a, 0x7152, 0xa1a0, 0x29c0, 0x242c, 0xa5ac,
++      0x00ff, 0x6532, 0x60e7, 0x0000, 0x65ea, 0x706f, 0x0000, 0x7572,
++      0x7077, 0x0001, 0xa084, 0x0000, 0x007c, 0x0e7e, 0x2071, 0xa600,
++      0x707b, 0x0000, 0x0e7f, 0x007c, 0x0e7e, 0x0f7e, 0x2001, 0x0002,
++      0x1078, 0x5ae6, 0x2079, 0x0100, 0x2071, 0x0140, 0x1078, 0x6e0f,
++      0x7004, 0xa084, 0x4000, 0x0040, 0x41f1, 0x7003, 0x1000, 0x7003,
++      0x0000, 0x127e, 0x2091, 0x8000, 0x2071, 0xa622, 0x2073, 0x0000,
++      0x7840, 0x027e, 0x017e, 0x2009, 0x00f7, 0x1078, 0x42a1, 0x017f,
++      0xa094, 0x0010, 0xa285, 0x0080, 0x7842, 0x7a42, 0x027f, 0x127f,
++      0x0f7f, 0x0e7f, 0x007c, 0x127e, 0x2091, 0x8000, 0x2011, 0xa8bb,
++      0x2013, 0x0000, 0x7083, 0x0000, 0x127f, 0x20e1, 0x9080, 0x60a3,
++      0x0056, 0x60a7, 0x9575, 0x1078, 0x6e06, 0x2009, 0x07d0, 0x2011,
++      0x41dc, 0x1078, 0x5add, 0x007c, 0x017e, 0x027e, 0x0c7e, 0x127e,
++      0x2091, 0x8000, 0x2011, 0x0003, 0x1078, 0x70e0, 0x2011, 0x0002,
++      0x1078, 0x70ea, 0x1078, 0x6fc4, 0x037e, 0x2019, 0x0000, 0x1078,
++      0x7058, 0x037f, 0x2009, 0x00f7, 0x1078, 0x42a1, 0x2061, 0xa8c4,
++      0x601b, 0x0000, 0x601f, 0x0000, 0x2061, 0xa600, 0x6003, 0x0001,
++      0x2061, 0x0100, 0x6043, 0x0090, 0x6043, 0x0010, 0x2009, 0x002d,
++      0x2011, 0x4259, 0x1078, 0x5a38, 0x127f, 0x0c7f, 0x027f, 0x017f,
++      0x007c, 0x0e7e, 0x007e, 0x127e, 0x2091, 0x8000, 0x2001, 0x0001,
++      0x1078, 0x5ae6, 0x2071, 0x0100, 0x1078, 0x6e0f, 0x2071, 0x0140,
++      0x7004, 0xa084, 0x4000, 0x0040, 0x4271, 0x7003, 0x1000, 0x7003,
++      0x0000, 0x2001, 0x0001, 0x1078, 0x24e8, 0x1078, 0x4224, 0x127f,
++      0x007f, 0x0e7f, 0x007c, 0x20a9, 0x0040, 0x20a1, 0xacc0, 0x2099,
++      0xab8e, 0x3304, 0x8007, 0x20a2, 0x9398, 0x94a0, 0x00f0, 0x4281,
++      0x007c, 0x20e1, 0x9080, 0x20e1, 0x4000, 0x2099, 0xab00, 0x20a1,
++      0x020b, 0x20a9, 0x000c, 0x53a6, 0x007c, 0x20e1, 0x9080, 0x20e1,
++      0x4000, 0x2099, 0xab80, 0x20a1, 0x020b, 0x20a9, 0x000c, 0x53a6,
++      0x007c, 0x0c7e, 0x007e, 0x2061, 0x0100, 0x810f, 0x2001, 0xa62f,
++      0x2004, 0xa005, 0x00c0, 0x42b2, 0x6030, 0xa084, 0x00ff, 0xa105,
++      0x0078, 0x42b4, 0xa185, 0x00f7, 0x604a, 0x007f, 0x0c7f, 0x007c,
++      0x017e, 0x047e, 0x2001, 0xa653, 0x2004, 0xd0a4, 0x0040, 0x42cb,
++      0xa006, 0x2020, 0x2009, 0x002a, 0x1078, 0xa21d, 0x2001, 0xa60c,
++      0x200c, 0xc195, 0x2102, 0x2019, 0x002a, 0x2009, 0x0000, 0x1078,
++      0x284f, 0x047f, 0x017f, 0x007c, 0x007e, 0x2001, 0xa60c, 0x2004,
++      0xd09c, 0x0040, 0x42db, 0x007f, 0x007c, 0x007e, 0x017e, 0x127e,
++      0x2091, 0x8000, 0x2001, 0x0101, 0x200c, 0xa18d, 0x0006, 0x2102,
++      0x127f, 0x017f, 0x007f, 0x007c, 0x157e, 0x20a9, 0x00ff, 0x2009,
++      0xa735, 0xa006, 0x200a, 0x8108, 0x00f0, 0x42f2, 0x157f, 0x007c,
++      0x0d7e, 0x037e, 0x157e, 0x137e, 0x147e, 0x2069, 0xa652, 0xa006,
++      0x6002, 0x6007, 0x0707, 0x600a, 0x600e, 0x6012, 0xa198, 0x29c0,
++      0x231c, 0xa39c, 0x00ff, 0x6316, 0x20a9, 0x0004, 0xac98, 0x0006,
++      0x23a0, 0x40a4, 0x20a9, 0x0004, 0xac98, 0x000a, 0x23a0, 0x40a4,
++      0x603e, 0x6042, 0x604e, 0x6052, 0x6056, 0x605a, 0x605e, 0x6062,
++      0x6066, 0x606a, 0x606e, 0x6072, 0x6076, 0x607a, 0x607e, 0x6082,
++      0x6086, 0x608a, 0x608e, 0x6092, 0x6096, 0x609a, 0x609e, 0x60ae,
++      0x61a2, 0x0d7e, 0x60a4, 0xa06d, 0x0040, 0x4338, 0x1078, 0x13a4,
++      0x60a7, 0x0000, 0x60a8, 0xa06d, 0x0040, 0x4340, 0x1078, 0x13a4,
++      0x60ab, 0x0000, 0x0d7f, 0xa006, 0x604a, 0x6810, 0x603a, 0x680c,
++      0x6046, 0x6814, 0xa084, 0x00ff, 0x6042, 0x147f, 0x137f, 0x157f,
++      0x037f, 0x0d7f, 0x007c, 0x127e, 0x2091, 0x8000, 0x6944, 0x6e48,
++      0xa684, 0x3fff, 0xa082, 0x4000, 0x00c8, 0x4424, 0xa18c, 0xff00,
++      0x810f, 0xa182, 0x00ff, 0x00c8, 0x442a, 0x2001, 0xa60c, 0x2004,
++      0xa084, 0x0003, 0x0040, 0x4385, 0x2001, 0xa60c, 0x2004, 0xd084,
++      0x00c0, 0x4405, 0xa188, 0xa735, 0x2104, 0xa065, 0x0040, 0x4405,
++      0x6004, 0xa084, 0x00ff, 0xa08e, 0x0006, 0x00c0, 0x4405, 0x6000,
++      0xd0c4, 0x0040, 0x4405, 0x0078, 0x4392, 0xa188, 0xa735, 0x2104,
++      0xa065, 0x0040, 0x43e9, 0x6004, 0xa084, 0x00ff, 0xa08e, 0x0006,
++      0x00c0, 0x43ef, 0x60a4, 0xa00d, 0x0040, 0x439a, 0x1078, 0x4817,
++      0x0040, 0x43e3, 0x60a8, 0xa00d, 0x0040, 0x43b4, 0x1078, 0x486a,
++      0x00c0, 0x43b4, 0x694c, 0xd1fc, 0x00c0, 0x43aa, 0x1078, 0x44df,
++      0x0078, 0x43de, 0x1078, 0x4484, 0x694c, 0xd1ec, 0x00c0, 0x43de,
++      0x1078, 0x46d6, 0x0078, 0x43de, 0x694c, 0xa184, 0xa000, 0x0040,
++      0x43ce, 0xd1ec, 0x0040, 0x43c7, 0xd1fc, 0x0040, 0x43c3, 0x1078,
++      0x46e7, 0x0078, 0x43ca, 0x1078, 0x46e7, 0x0078, 0x43ce, 0xd1fc,
++      0x0040, 0x43ce, 0x1078, 0x4484, 0x0078, 0x43de, 0x6050, 0xa00d,
++      0x0040, 0x43d9, 0x2d00, 0x200a, 0x6803, 0x0000, 0x6052, 0x0078,
++      0x43de, 0x2d00, 0x6052, 0x604e, 0x6803, 0x0000, 0x1078, 0x5da9,
++      0xa006, 0x127f, 0x007c, 0x2001, 0x0005, 0x2009, 0x0000, 0x0078,
++      0x442e, 0x2001, 0x0028, 0x2009, 0x0000, 0x0078, 0x442e, 0xa082,
++      0x0006, 0x00c8, 0x4405, 0x60a0, 0xd0bc, 0x00c0, 0x4401, 0x6100,
++      0xd1fc, 0x0040, 0x4392, 0x2001, 0x0029, 0x2009, 0x1000, 0x0078,
++      0x442e, 0x2001, 0x0028, 0x0078, 0x4420, 0x2009, 0xa60c, 0x210c,
++      0xd18c, 0x0040, 0x440f, 0x2001, 0x0004, 0x0078, 0x4420, 0xd184,
++      0x0040, 0x4416, 0x2001, 0x0004, 0x0078, 0x4420, 0x2001, 0x0029,
++      0x6100, 0xd1fc, 0x0040, 0x4420, 0x2009, 0x1000, 0x0078, 0x442e,
++      0x2009, 0x0000, 0x0078, 0x442e, 0x2001, 0x0029, 0x2009, 0x0000,
++      0x0078, 0x442e, 0x2001, 0x0029, 0x2009, 0x0000, 0xa005, 0x127f,
++      0x007c, 0x6944, 0x6e48, 0xa684, 0x3fff, 0xa082, 0x4000, 0x00c8,
++      0x447e, 0xa18c, 0xff00, 0x810f, 0xa182, 0x00ff, 0x00c8, 0x4464,
++      0xa188, 0xa735, 0x2104, 0xa065, 0x0040, 0x4464, 0x6004, 0xa084,
++      0x00ff, 0xa08e, 0x0006, 0x00c0, 0x446a, 0x684c, 0xd0ec, 0x0040,
++      0x4457, 0x1078, 0x46e7, 0x1078, 0x4484, 0x0078, 0x445f, 0x1078,
++      0x4484, 0x684c, 0xd0fc, 0x0040, 0x445f, 0x1078, 0x46d6, 0x1078,
++      0x472f, 0xa006, 0x0078, 0x4482, 0x2001, 0x0028, 0x2009, 0x0000,
++      0x0078, 0x4482, 0xa082, 0x0006, 0x00c8, 0x4478, 0x6100, 0xd1fc,
++      0x0040, 0x444d, 0x2001, 0x0029, 0x2009, 0x1000, 0x0078, 0x4482,
++      0x2001, 0x0029, 0x2009, 0x0000, 0x0078, 0x4482, 0x2001, 0x0029,
++      0x2009, 0x0000, 0xa005, 0x007c, 0x127e, 0x2091, 0x8000, 0x6050,
++      0xa00d, 0x0040, 0x4492, 0x2d00, 0x200a, 0x6803, 0x0000, 0x6052,
++      0x127f, 0x007c, 0x2d00, 0x6052, 0x604e, 0x6803, 0x0000, 0x0078,
++      0x4490, 0x127e, 0x2091, 0x8000, 0x604c, 0xa005, 0x0040, 0x44af,
++      0x0e7e, 0x2071, 0xa8b1, 0x7004, 0xa086, 0x0002, 0x0040, 0x44b6,
++      0x0e7f, 0x604c, 0x6802, 0x2d00, 0x604e, 0x127f, 0x007c, 0x2d00,
++      0x6052, 0x604e, 0x6803, 0x0000, 0x0078, 0x44ad, 0x701c, 0xac06,
++      0x00c0, 0x44a8, 0x604c, 0x2070, 0x7000, 0x6802, 0x2d00, 0x7002,
++      0x0e7f, 0x127f, 0x007c, 0x127e, 0x2091, 0x8000, 0x604c, 0xa06d,
++      0x0040, 0x44d1, 0x6800, 0xa005, 0x00c0, 0x44cf, 0x6052, 0x604e,
++      0xad05, 0x127f, 0x007c, 0x604c, 0xa06d, 0x0040, 0x44de, 0x6800,
++      0xa005, 0x00c0, 0x44dc, 0x6052, 0x604e, 0xad05, 0x007c, 0x6803,
++      0x0000, 0x6084, 0xa00d, 0x0040, 0x44e9, 0x2d00, 0x200a, 0x6086,
++      0x007c, 0x2d00, 0x6086, 0x6082, 0x0078, 0x44e8, 0x127e, 0x0c7e,
++      0x027e, 0x2091, 0x8000, 0x6218, 0x2260, 0x6200, 0xa005, 0x0040,
++      0x44fc, 0xc285, 0x0078, 0x44fd, 0xc284, 0x6202, 0x027f, 0x0c7f,
++      0x127f, 0x007c, 0x127e, 0x0c7e, 0x2091, 0x8000, 0x6218, 0x2260,
++      0x6204, 0x007e, 0xa086, 0x0006, 0x00c0, 0x4521, 0x609c, 0xd0ac,
++      0x0040, 0x4521, 0x2001, 0xa653, 0x2004, 0xd0a4, 0x0040, 0x4521,
++      0xa284, 0xff00, 0x8007, 0xa086, 0x0007, 0x00c0, 0x4521, 0x2011,
++      0x0600, 0x007f, 0xa294, 0xff00, 0xa215, 0x6206, 0x007e, 0xa086,
++      0x0006, 0x00c0, 0x4531, 0x6290, 0x82ff, 0x00c0, 0x4531, 0x1078,
++      0x1332, 0x007f, 0x0c7f, 0x127f, 0x007c, 0x127e, 0x0c7e, 0x2091,
++      0x8000, 0x6218, 0x2260, 0x6204, 0x007e, 0xa086, 0x0006, 0x00c0,
++      0x4553, 0x609c, 0xd0a4, 0x0040, 0x4553, 0x2001, 0xa653, 0x2004,
++      0xd0ac, 0x00c0, 0x4553, 0xa284, 0x00ff, 0xa086, 0x0007, 0x00c0,
++      0x4553, 0x2011, 0x0006, 0x007f, 0xa294, 0x00ff, 0x8007, 0xa215,
++      0x6206, 0x0c7f, 0x127f, 0x007c, 0x027e, 0xa182, 0x00ff, 0x0048,
++      0x4565, 0xa085, 0x0001, 0x0078, 0x457d, 0xa190, 0xa735, 0x2204,
++      0xa065, 0x00c0, 0x457c, 0x017e, 0x0d7e, 0x1078, 0x1370, 0x2d60,
++      0x0d7f, 0x017f, 0x0040, 0x4561, 0x2c00, 0x2012, 0x60a7, 0x0000,
++      0x60ab, 0x0000, 0x1078, 0x42f8, 0xa006, 0x027f, 0x007c, 0x127e,
++      0x2091, 0x8000, 0x027e, 0xa182, 0x00ff, 0x0048, 0x458b, 0xa085,
++      0x0001, 0x0078, 0x45c1, 0x0d7e, 0xa190, 0xa735, 0x2204, 0xa06d,
++      0x0040, 0x45bf, 0x2013, 0x0000, 0x0d7e, 0x0c7e, 0x2d60, 0x60a4,
++      0xa06d, 0x0040, 0x459d, 0x1078, 0x13a4, 0x60a8, 0xa06d, 0x0040,
++      0x45a3, 0x1078, 0x13a4, 0x0c7f, 0x0d7f, 0x0d7e, 0x0c7e, 0x68ac,
++      0x2060, 0x8cff, 0x0040, 0x45bb, 0x600c, 0x007e, 0x6010, 0x2068,
++      0x1078, 0x8d06, 0x0040, 0x45b6, 0x1078, 0x13b4, 0x1078, 0x772d,
++      0x0c7f, 0x0078, 0x45a9, 0x0c7f, 0x0d7f, 0x1078, 0x13a4, 0x0d7f,
++      0xa006, 0x027f, 0x127f, 0x007c, 0x017e, 0xa182, 0x00ff, 0x0048,
++      0x45cd, 0xa085, 0x0001, 0x0078, 0x45d4, 0xa188, 0xa735, 0x2104,
++      0xa065, 0x0040, 0x45c9, 0xa006, 0x017f, 0x007c, 0x0d7e, 0x157e,
++      0x137e, 0x147e, 0x600b, 0x0000, 0x600f, 0x0000, 0x6000, 0xc08c,
++      0x6002, 0x2069, 0xab8e, 0x6808, 0x605e, 0x6810, 0x6062, 0x6138,
++      0xa10a, 0x0048, 0x45ec, 0x603a, 0x6814, 0x6066, 0x2099, 0xab96,
++      0xac88, 0x000a, 0x21a0, 0x20a9, 0x0004, 0x53a3, 0x2099, 0xab9a,
++      0xac88, 0x0006, 0x21a0, 0x20a9, 0x0004, 0x53a3, 0x2069, 0xabae,
++      0x6808, 0x606a, 0x690c, 0x616e, 0x6810, 0x6072, 0x6818, 0x6076,
++      0x60a0, 0xa086, 0x007e, 0x00c0, 0x4611, 0x2069, 0xab8e, 0x690c,
++      0x616e, 0xa182, 0x0211, 0x00c8, 0x4619, 0x2009, 0x0008, 0x0078,
++      0x4643, 0xa182, 0x0259, 0x00c8, 0x4621, 0x2009, 0x0007, 0x0078,
++      0x4643, 0xa182, 0x02c1, 0x00c8, 0x4629, 0x2009, 0x0006, 0x0078,
++      0x4643, 0xa182, 0x0349, 0x00c8, 0x4631, 0x2009, 0x0005, 0x0078,
++      0x4643, 0xa182, 0x0421, 0x00c8, 0x4639, 0x2009, 0x0004, 0x0078,
++      0x4643, 0xa182, 0x0581, 0x00c8, 0x4641, 0x2009, 0x0003, 0x0078,
++      0x4643, 0x2009, 0x0002, 0x6192, 0x147f, 0x137f, 0x157f, 0x0d7f,
++      0x007c, 0x017e, 0x027e, 0x0e7e, 0x2071, 0xab8d, 0x2e04, 0x6896,
++      0x2071, 0xab8e, 0x7004, 0x689a, 0x701c, 0x689e, 0x6a00, 0x2009,
++      0xa672, 0x210c, 0xd0bc, 0x0040, 0x4663, 0xd1ec, 0x0040, 0x4663,
++      0xc2ad, 0x0078, 0x4664, 0xc2ac, 0xd0c4, 0x0040, 0x466d, 0xd1e4,
++      0x0040, 0x466d, 0xc2bd, 0x0078, 0x466e, 0xc2bc, 0x6a02, 0x0e7f,
++      0x027f, 0x017f, 0x007c, 0x0d7e, 0x127e, 0x2091, 0x8000, 0x60a4,
++      0xa06d, 0x0040, 0x4697, 0x6900, 0x81ff, 0x00c0, 0x46ab, 0x6a04,
++      0xa282, 0x0010, 0x00c8, 0x46b0, 0xad88, 0x0004, 0x20a9, 0x0010,
++      0x2104, 0xa086, 0xffff, 0x0040, 0x4692, 0x8108, 0x00f0, 0x4688,
++      0x1078, 0x1332, 0x260a, 0x8210, 0x6a06, 0x0078, 0x46ab, 0x1078,
++      0x138b, 0x0040, 0x46b0, 0x2d00, 0x60a6, 0x6803, 0x0000, 0xad88,
++      0x0004, 0x20a9, 0x0010, 0x200b, 0xffff, 0x8108, 0x00f0, 0x46a3,
++      0x6807, 0x0001, 0x6e12, 0xa085, 0x0001, 0x127f, 0x0d7f, 0x007c,
++      0xa006, 0x0078, 0x46ad, 0x127e, 0x2091, 0x8000, 0x0d7e, 0x60a4,
++      0xa00d, 0x0040, 0x46d3, 0x2168, 0x6800, 0xa005, 0x00c0, 0x46cf,
++      0x1078, 0x4817, 0x00c0, 0x46d3, 0x200b, 0xffff, 0x6804, 0xa08a,
++      0x0002, 0x0048, 0x46cf, 0x8001, 0x6806, 0x0078, 0x46d3, 0x1078,
++      0x13a4, 0x60a7, 0x0000, 0x0d7f, 0x127f, 0x007c, 0x127e, 0x2091,
++      0x8000, 0x1078, 0x487f, 0x0078, 0x46df, 0x1078, 0x4484, 0x1078,
++      0x4775, 0x00c0, 0x46dd, 0x1078, 0x472f, 0x127f, 0x007c, 0x0d7e,
++      0x127e, 0x2091, 0x8000, 0x60a8, 0xa06d, 0x0040, 0x470b, 0x6950,
++      0x81ff, 0x00c0, 0x471f, 0x6a54, 0xa282, 0x0010, 0x00c8, 0x472c,
++      0xad88, 0x0018, 0x20a9, 0x0010, 0x2104, 0xa086, 0xffff, 0x0040,
++      0x4706, 0x8108, 0x00f0, 0x46fc, 0x1078, 0x1332, 0x260a, 0x8210,
++      0x6a56, 0x0078, 0x471f, 0x1078, 0x138b, 0x0040, 0x472c, 0x2d00,
++      0x60aa, 0x6853, 0x0000, 0xad88, 0x0018, 0x20a9, 0x0010, 0x200b,
++      0xffff, 0x8108, 0x00f0, 0x4717, 0x6857, 0x0001, 0x6e62, 0x0078,
++      0x4723, 0x1078, 0x44df, 0x1078, 0x4739, 0x00c0, 0x4721, 0xa085,
++      0x0001, 0x127f, 0x0d7f, 0x007c, 0xa006, 0x0078, 0x4729, 0x127e,
++      0x2091, 0x8000, 0x1078, 0x5da9, 0x127f, 0x007c, 0xa01e, 0x0078,
++      0x473b, 0x2019, 0x0001, 0xa00e, 0x127e, 0x2091, 0x8000, 0x604c,
++      0x2068, 0x6000, 0xd0dc, 0x00c0, 0x4759, 0x8dff, 0x0040, 0x4770,
++      0x83ff, 0x0040, 0x4751, 0x6848, 0xa606, 0x0040, 0x475e, 0x0078,
++      0x4759, 0x683c, 0xa406, 0x00c0, 0x4759, 0x6840, 0xa506, 0x0040,
++      0x475e, 0x2d08, 0x6800, 0x2068, 0x0078, 0x4745, 0x1078, 0x7233,
++      0x6a00, 0x604c, 0xad06, 0x00c0, 0x4768, 0x624e, 0x0078, 0x476b,
++      0xa180, 0x0000, 0x2202, 0x82ff, 0x00c0, 0x4770, 0x6152, 0x8dff,
++      0x127f, 0x007c, 0xa01e, 0x0078, 0x4777, 0x2019, 0x0001, 0xa00e,
++      0x6080, 0x2068, 0x8dff, 0x0040, 0x47a3, 0x83ff, 0x0040, 0x4786,
++      0x6848, 0xa606, 0x0040, 0x4793, 0x0078, 0x478e, 0x683c, 0xa406,
++      0x00c0, 0x478e, 0x6840, 0xa506, 0x0040, 0x4793, 0x2d08, 0x6800,
++      0x2068, 0x0078, 0x477a, 0x6a00, 0x6080, 0xad06, 0x00c0, 0x479b,
++      0x6282, 0x0078, 0x479e, 0xa180, 0x0000, 0x2202, 0x82ff, 0x00c0,
++      0x47a3, 0x6186, 0x8dff, 0x007c, 0xa016, 0x1078, 0x4810, 0x00c0,
++      0x47ab, 0x2011, 0x0001, 0x1078, 0x4863, 0x00c0, 0x47b1, 0xa295,
++      0x0002, 0x007c, 0x1078, 0x489b, 0x0040, 0x47ba, 0x1078, 0x8dca,
++      0x0078, 0x47bc, 0xa085, 0x0001, 0x007c, 0x1078, 0x489b, 0x0040,
++      0x47c5, 0x1078, 0x8d62, 0x0078, 0x47c7, 0xa085, 0x0001, 0x007c,
++      0x1078, 0x489b, 0x0040, 0x47d0, 0x1078, 0x8dac, 0x0078, 0x47d2,
++      0xa085, 0x0001, 0x007c, 0x1078, 0x489b, 0x0040, 0x47db, 0x1078,
++      0x8d7e, 0x0078, 0x47dd, 0xa085, 0x0001, 0x007c, 0x1078, 0x489b,
++      0x0040, 0x47e6, 0x1078, 0x8de8, 0x0078, 0x47e8, 0xa085, 0x0001,
++      0x007c, 0x127e, 0x007e, 0x0d7e, 0x2091, 0x8000, 0x6080, 0xa06d,
++      0x0040, 0x4808, 0x6800, 0x007e, 0x6837, 0x0103, 0x6b4a, 0x6847,
++      0x0000, 0x1078, 0x8f7d, 0x007e, 0x6000, 0xd0fc, 0x0040, 0x4802,
++      0x1078, 0xa4ed, 0x007f, 0x1078, 0x4a73, 0x007f, 0x0078, 0x47ef,
++      0x6083, 0x0000, 0x6087, 0x0000, 0x0d7f, 0x007f, 0x127f, 0x007c,
++      0x60a4, 0xa00d, 0x00c0, 0x4817, 0xa085, 0x0001, 0x007c, 0x0e7e,
++      0x2170, 0x7000, 0xa005, 0x00c0, 0x482c, 0x20a9, 0x0010, 0xae88,
++      0x0004, 0x2104, 0xa606, 0x0040, 0x482c, 0x8108, 0x00f0, 0x4821,
++      0xa085, 0x0001, 0x0078, 0x482d, 0xa006, 0x0e7f, 0x007c, 0x0d7e,
++      0x127e, 0x2091, 0x8000, 0x60a4, 0xa06d, 0x00c0, 0x483d, 0x1078,
++      0x138b, 0x0040, 0x484f, 0x2d00, 0x60a6, 0x6803, 0x0001, 0x6807,
++      0x0000, 0xad88, 0x0004, 0x20a9, 0x0010, 0x200b, 0xffff, 0x8108,
++      0x00f0, 0x4845, 0xa085, 0x0001, 0x127f, 0x0d7f, 0x007c, 0xa006,
++      0x0078, 0x484c, 0x0d7e, 0x127e, 0x2091, 0x8000, 0x60a4, 0xa06d,
++      0x0040, 0x4860, 0x60a7, 0x0000, 0x1078, 0x13a4, 0xa085, 0x0001,
++      0x127f, 0x0d7f, 0x007c, 0x60a8, 0xa00d, 0x00c0, 0x486a, 0xa085,
++      0x0001, 0x007c, 0x0e7e, 0x2170, 0x7050, 0xa005, 0x00c0, 0x487d,
++      0x20a9, 0x0010, 0xae88, 0x0018, 0x2104, 0xa606, 0x0040, 0x487d,
++      0x8108, 0x00f0, 0x4874, 0xa085, 0x0001, 0x0e7f, 0x007c, 0x127e,
++      0x2091, 0x8000, 0x1078, 0x4863, 0x00c0, 0x4899, 0x200b, 0xffff,
++      0x0d7e, 0x60a8, 0x2068, 0x6854, 0xa08a, 0x0002, 0x0048, 0x4894,
++      0x8001, 0x6856, 0x0078, 0x4898, 0x1078, 0x13a4, 0x60ab, 0x0000,
++      0x0d7f, 0x127f, 0x007c, 0x609c, 0xd0a4, 0x007c, 0x0f7e, 0x71b0,
++      0x81ff, 0x00c0, 0x48b9, 0x71cc, 0xd19c, 0x0040, 0x48b9, 0x2001,
++      0x007e, 0xa080, 0xa735, 0x2004, 0xa07d, 0x0040, 0x48b9, 0x7804,
++      0xa084, 0x00ff, 0xa086, 0x0006, 0x00c0, 0x48b9, 0x7800, 0xc0ed,
++      0x7802, 0x2079, 0xa652, 0x7804, 0xd0a4, 0x0040, 0x48df, 0x157e,
++      0x0c7e, 0x20a9, 0x007f, 0x2009, 0x0000, 0x017e, 0x1078, 0x45c4,
++      0x00c0, 0x48d9, 0x6004, 0xa084, 0xff00, 0x8007, 0xa096, 0x0004,
++      0x0040, 0x48d6, 0xa086, 0x0006, 0x00c0, 0x48d9, 0x6000, 0xc0ed,
++      0x6002, 0x017f, 0x8108, 0x00f0, 0x48c5, 0x0c7f, 0x157f, 0x1078,
++      0x4967, 0x0040, 0x48e8, 0x2001, 0xa8a1, 0x200c, 0x0078, 0x48f0,
++      0x2079, 0xa652, 0x7804, 0xd0a4, 0x0040, 0x48f4, 0x2009, 0x07d0,
++      0x2011, 0x48f6, 0x1078, 0x5add, 0x0f7f, 0x007c, 0x2011, 0x48f6,
++      0x1078, 0x5a45, 0x1078, 0x4967, 0x0040, 0x491e, 0x2001, 0xa7b3,
++      0x2004, 0xa080, 0x0000, 0x200c, 0xc1ec, 0x2102, 0x2001, 0xa653,
++      0x2004, 0xd0a4, 0x0040, 0x4912, 0x2009, 0x07d0, 0x2011, 0x48f6,
++      0x1078, 0x5add, 0x0e7e, 0x2071, 0xa600, 0x706f, 0x0000, 0x7073,
++      0x0000, 0x1078, 0x2677, 0x0e7f, 0x0078, 0x4956, 0x157e, 0x0c7e,
++      0x20a9, 0x007f, 0x2009, 0x0000, 0x017e, 0x1078, 0x45c4, 0x00c0,
++      0x4950, 0x6000, 0xd0ec, 0x0040, 0x4950, 0x047e, 0x62a0, 0xa294,
++      0x00ff, 0x8227, 0xa006, 0x2009, 0x0029, 0x1078, 0xa21d, 0x6000,
++      0xc0e5, 0xc0ec, 0x6002, 0x6004, 0xa084, 0x00ff, 0xa085, 0x0700,
++      0x6006, 0x2019, 0x0029, 0x1078, 0x5f01, 0x077e, 0x2039, 0x0000,
++      0x1078, 0x5e0a, 0x2009, 0x0000, 0x1078, 0x9f8b, 0x077f, 0x047f,
++      0x017f, 0x8108, 0x00f0, 0x4924, 0x0c7f, 0x157f, 0x007c, 0x0c7e,
++      0x6018, 0x2060, 0x6000, 0xc0ec, 0x6002, 0x0c7f, 0x007c, 0x7818,
++      0x2004, 0xd0ac, 0x007c, 0x7818, 0x2004, 0xd0bc, 0x007c, 0x0f7e,
++      0x2001, 0xa7b3, 0x2004, 0xa07d, 0x0040, 0x4970, 0x7800, 0xd0ec,
++      0x0f7f, 0x007c, 0x127e, 0x027e, 0x2091, 0x8000, 0x007e, 0x62a0,
++      0xa290, 0xa735, 0x2204, 0xac06, 0x10c0, 0x1332, 0x007f, 0x6200,
++      0xa005, 0x0040, 0x4986, 0xc2fd, 0x0078, 0x4987, 0xc2fc, 0x6202,
++      0x027f, 0x127f, 0x007c, 0x2011, 0xa633, 0x2204, 0xd0cc, 0x0040,
++      0x4998, 0x2001, 0xa89f, 0x200c, 0x2011, 0x4999, 0x1078, 0x5add,
++      0x007c, 0x2011, 0x4999, 0x1078, 0x5a45, 0x2011, 0xa633, 0x2204,
++      0xc0cc, 0x2012, 0x007c, 0x2071, 0xa714, 0x7003, 0x0001, 0x7007,
++      0x0000, 0x7013, 0x0000, 0x7017, 0x0000, 0x701b, 0x0000, 0x701f,
++      0x0000, 0x700b, 0x0000, 0x704b, 0x0001, 0x704f, 0x0000, 0x705b,
++      0x0020, 0x705f, 0x0040, 0x707f, 0x0000, 0x2071, 0xa87d, 0x7003,
++      0xa714, 0x7007, 0x0000, 0x700b, 0x0000, 0x700f, 0xa85d, 0x7013,
++      0x0020, 0x7017, 0x0040, 0x7037, 0x0000, 0x007c, 0x017e, 0x0e7e,
++      0x2071, 0xa835, 0xa00e, 0x7186, 0x718a, 0x7097, 0x0001, 0x2001,
++      0xa653, 0x2004, 0xd0fc, 0x00c0, 0x49e8, 0x2001, 0xa653, 0x2004,
++      0xa00e, 0xd09c, 0x0040, 0x49e5, 0x8108, 0x7102, 0x0078, 0x4a3b,
++      0x2001, 0xa672, 0x200c, 0xa184, 0x000f, 0x2009, 0xa673, 0x210c,
++      0x0079, 0x49f2, 0x49dd, 0x4a13, 0x4a1b, 0x4a26, 0x4a2c, 0x49dd,
++      0x49dd, 0x49dd, 0x4a02, 0x49dd, 0x49dd, 0x49dd, 0x49dd, 0x49dd,
++      0x49dd, 0x49dd, 0x7003, 0x0004, 0x137e, 0x147e, 0x157e, 0x2099,
++      0xa676, 0x20a1, 0xa886, 0x20a9, 0x0004, 0x53a3, 0x157f, 0x147f,
++      0x137f, 0x0078, 0x4a3b, 0x708f, 0x0005, 0x7007, 0x0122, 0x2001,
++      0x0002, 0x0078, 0x4a21, 0x708f, 0x0002, 0x7007, 0x0121, 0x2001,
++      0x0003, 0x7002, 0x7097, 0x0001, 0x0078, 0x4a38, 0x7007, 0x0122,
++      0x2001, 0x0002, 0x0078, 0x4a30, 0x7007, 0x0121, 0x2001, 0x0003,
++      0x7002, 0xa006, 0x7096, 0x708e, 0xa184, 0xff00, 0x8007, 0x709a,
++      0xa184, 0x00ff, 0x7092, 0x0e7f, 0x017f, 0x007c, 0x0e7e, 0x2071,
++      0xa714, 0x684c, 0xa005, 0x00c0, 0x4a4c, 0x7028, 0xc085, 0x702a,
++      0xa085, 0x0001, 0x0078, 0x4a71, 0x6a60, 0x7236, 0x6b64, 0x733a,
++      0x6868, 0x703e, 0x7076, 0x686c, 0x7042, 0x707a, 0x684c, 0x702e,
++      0x6844, 0x7032, 0x2009, 0x000d, 0x200a, 0x700b, 0x0000, 0x8007,
++      0x8006, 0x8006, 0xa08c, 0x003f, 0xa084, 0xffc0, 0xa210, 0x2100,
++      0xa319, 0x726e, 0x7372, 0x7028, 0xc084, 0x702a, 0x7007, 0x0001,
++      0xa006, 0x0e7f, 0x007c, 0x0e7e, 0x027e, 0x6838, 0xd0fc, 0x00c0,
++      0x4ac9, 0x6804, 0xa00d, 0x0040, 0x4a8f, 0x0d7e, 0x2071, 0xa600,
++      0xa016, 0x702c, 0x2168, 0x6904, 0x206a, 0x8210, 0x2d00, 0x81ff,
++      0x00c0, 0x4a82, 0x702e, 0x70ac, 0xa200, 0x70ae, 0x0d7f, 0x2071,
++      0xa714, 0x701c, 0xa005, 0x00c0, 0x4adb, 0x0068, 0x4ad9, 0x2071,
++      0xa835, 0x7200, 0x82ff, 0x0040, 0x4ad9, 0x6934, 0xa186, 0x0103,
++      0x00c0, 0x4aec, 0x6948, 0x6844, 0xa105, 0x00c0, 0x4acc, 0x2009,
++      0x8020, 0x2200, 0x0079, 0x4aac, 0x4ad9, 0x4ab1, 0x4b09, 0x4b17,
++      0x4ad9, 0x2071, 0x0000, 0x7018, 0xd084, 0x00c0, 0x4ad9, 0x7122,
++      0x683c, 0x7026, 0x6840, 0x702a, 0x701b, 0x0001, 0x2091, 0x4080,
++      0x2071, 0xa600, 0x702c, 0x206a, 0x2d00, 0x702e, 0x70ac, 0x8000,
++      0x70ae, 0x027f, 0x0e7f, 0x007c, 0x6844, 0xa086, 0x0100, 0x00c0,
++      0x4ad9, 0x6868, 0xa005, 0x00c0, 0x4ad9, 0x2009, 0x8020, 0x0078,
++      0x4aa9, 0x2071, 0xa714, 0x2d08, 0x206b, 0x0000, 0x7010, 0x8000,
++      0x7012, 0x7018, 0xa06d, 0x711a, 0x0040, 0x4ae9, 0x6902, 0x0078,
++      0x4aea, 0x711e, 0x0078, 0x4ac9, 0xa18c, 0x00ff, 0xa186, 0x0017,
++      0x0040, 0x4afa, 0xa186, 0x001e, 0x0040, 0x4afa, 0xa18e, 0x001f,
++      0x00c0, 0x4ad9, 0x684c, 0xd0cc, 0x0040, 0x4ad9, 0x6850, 0xa084,
++      0x00ff, 0xa086, 0x0001, 0x00c0, 0x4ad9, 0x2009, 0x8021, 0x0078,
++      0x4aa9, 0x7084, 0x8008, 0xa092, 0x001e, 0x00c8, 0x4ad9, 0x7186,
++      0xae90, 0x0003, 0xa210, 0x683c, 0x2012, 0x0078, 0x4b27, 0x7084,
++      0x8008, 0xa092, 0x000f, 0x00c8, 0x4ad9, 0x7186, 0xae90, 0x0003,
++      0x8003, 0xa210, 0x683c, 0x2012, 0x8210, 0x6840, 0x2012, 0x7088,
++      0xa10a, 0x0048, 0x4ac0, 0x718c, 0x7084, 0xa10a, 0x0048, 0x4ac0,
++      0x2071, 0x0000, 0x7018, 0xd084, 0x00c0, 0x4ac0, 0x2071, 0xa835,
++      0x7000, 0xa086, 0x0002, 0x00c0, 0x4b47, 0x1078, 0x4dc3, 0x2071,
++      0x0000, 0x701b, 0x0001, 0x2091, 0x4080, 0x0078, 0x4ac0, 0x1078,
++      0x4dee, 0x2071, 0x0000, 0x701b, 0x0001, 0x2091, 0x4080, 0x0078,
++      0x4ac0, 0x007e, 0x684c, 0x007e, 0x6837, 0x0103, 0x20a9, 0x001c,
++      0xad80, 0x0011, 0x20a0, 0x2001, 0x0000, 0x40a4, 0x007f, 0xa084,
++      0x00ff, 0x684e, 0x007f, 0x684a, 0x6952, 0x007c, 0x2071, 0xa714,
++      0x7004, 0x0079, 0x4b6b, 0x4b75, 0x4b86, 0x4d94, 0x4d95, 0x4dbc,
++      0x4dc2, 0x4b76, 0x4d82, 0x4d23, 0x4da5, 0x007c, 0x127e, 0x2091,
++      0x8000, 0x0068, 0x4b85, 0x2009, 0x000d, 0x7030, 0x200a, 0x2091,
++      0x4080, 0x7007, 0x0001, 0x700b, 0x0000, 0x127f, 0x2069, 0xa8c4,
++      0x6844, 0xa005, 0x0050, 0x4bae, 0x00c0, 0x4bae, 0x127e, 0x2091,
++      0x8000, 0x2069, 0x0000, 0x6934, 0x2001, 0xa720, 0x2004, 0xa10a,
++      0x0040, 0x4ba9, 0x0068, 0x4bad, 0x2069, 0x0000, 0x6818, 0xd084,
++      0x00c0, 0x4bad, 0x2009, 0x8040, 0x6922, 0x681b, 0x0001, 0x2091,
++      0x4080, 0x2069, 0xa8c4, 0x6847, 0xffff, 0x127f, 0x2069, 0xa600,
++      0x6848, 0x6964, 0xa102, 0x2069, 0xa835, 0x688a, 0x6984, 0x701c,
++      0xa06d, 0x0040, 0x4bc0, 0x81ff, 0x0040, 0x4c08, 0x0078, 0x4bd6,
++      0x81ff, 0x0040, 0x4cda, 0x2071, 0xa835, 0x7184, 0x7088, 0xa10a,
++      0x00c8, 0x4bd6, 0x7190, 0x2071, 0xa8c4, 0x7040, 0xa005, 0x0040,
++      0x4bd6, 0x00d0, 0x4cda, 0x7142, 0x0078, 0x4cda, 0x2071, 0xa835,
++      0x718c, 0x127e, 0x2091, 0x8000, 0x7084, 0xa10a, 0x0048, 0x4cf7,
++      0x0068, 0x4c8c, 0x2071, 0x0000, 0x7018, 0xd084, 0x00c0, 0x4c8c,
++      0x2001, 0xffff, 0x2071, 0xa8c4, 0x7042, 0x2071, 0xa835, 0x7000,
++      0xa086, 0x0002, 0x00c0, 0x4bfe, 0x1078, 0x4dc3, 0x2071, 0x0000,
++      0x701b, 0x0001, 0x2091, 0x4080, 0x0078, 0x4c8c, 0x1078, 0x4dee,
++      0x2071, 0x0000, 0x701b, 0x0001, 0x2091, 0x4080, 0x0078, 0x4c8c,
++      0x2071, 0xa835, 0x7000, 0xa005, 0x0040, 0x4cb9, 0x6934, 0xa186,
++      0x0103, 0x00c0, 0x4c8f, 0x684c, 0xd0bc, 0x00c0, 0x4cb9, 0x6948,
++      0x6844, 0xa105, 0x00c0, 0x4cac, 0x2009, 0x8020, 0x2071, 0xa835,
++      0x7000, 0x0079, 0x4c23, 0x4cb9, 0x4c71, 0x4c49, 0x4c5b, 0x4c28,
++      0x137e, 0x147e, 0x157e, 0x2099, 0xa676, 0x20a1, 0xa886, 0x20a9,
++      0x0004, 0x53a3, 0x157f, 0x147f, 0x137f, 0x2071, 0xa87d, 0xad80,
++      0x000f, 0x700e, 0x7013, 0x0002, 0x7007, 0x0002, 0x700b, 0x0000,
++      0x2e10, 0x1078, 0x13db, 0x2071, 0xa714, 0x7007, 0x0009, 0x0078,
++      0x4cda, 0x7084, 0x8008, 0xa092, 0x001e, 0x00c8, 0x4cda, 0xae90,
++      0x0003, 0xa210, 0x683c, 0x2012, 0x7186, 0x2071, 0xa714, 0x1078,
++      0x4e4c, 0x0078, 0x4cda, 0x7084, 0x8008, 0xa092, 0x000f, 0x00c8,
++      0x4cda, 0xae90, 0x0003, 0x8003, 0xa210, 0x683c, 0x2012, 0x8210,
++      0x6840, 0x2012, 0x7186, 0x2071, 0xa714, 0x1078, 0x4e4c, 0x0078,
++      0x4cda, 0x127e, 0x2091, 0x8000, 0x0068, 0x4c8c, 0x2071, 0x0000,
++      0x7018, 0xd084, 0x00c0, 0x4c8c, 0x7122, 0x683c, 0x7026, 0x6840,
++      0x702a, 0x701b, 0x0001, 0x2091, 0x4080, 0x127f, 0x2071, 0xa714,
++      0x1078, 0x4e4c, 0x0078, 0x4cda, 0x127f, 0x0078, 0x4cda, 0xa18c,
++      0x00ff, 0xa186, 0x0017, 0x0040, 0x4c9d, 0xa186, 0x001e, 0x0040,
++      0x4c9d, 0xa18e, 0x001f, 0x00c0, 0x4cb9, 0x684c, 0xd0cc, 0x0040,
++      0x4cb9, 0x6850, 0xa084, 0x00ff, 0xa086, 0x0001, 0x00c0, 0x4cb9,
++      0x2009, 0x8021, 0x0078, 0x4c1e, 0x6844, 0xa086, 0x0100, 0x00c0,
++      0x4cb9, 0x6868, 0xa005, 0x00c0, 0x4cb9, 0x2009, 0x8020, 0x0078,
++      0x4c1e, 0x2071, 0xa714, 0x1078, 0x4e60, 0x0040, 0x4cda, 0x2071,
++      0xa714, 0x700f, 0x0001, 0x6934, 0xa184, 0x00ff, 0xa086, 0x0003,
++      0x00c0, 0x4cd1, 0x810f, 0xa18c, 0x00ff, 0x8101, 0x0040, 0x4cd1,
++      0x710e, 0x7007, 0x0003, 0x1078, 0x4e80, 0x7050, 0xa086, 0x0100,
++      0x0040, 0x4d95, 0x127e, 0x2091, 0x8000, 0x2071, 0xa714, 0x7008,
++      0xa086, 0x0001, 0x00c0, 0x4cf5, 0x0068, 0x4cf5, 0x2009, 0x000d,
++      0x7030, 0x200a, 0x2091, 0x4080, 0x700b, 0x0000, 0x7004, 0xa086,
++      0x0006, 0x00c0, 0x4cf5, 0x7007, 0x0001, 0x127f, 0x007c, 0x2071,
++      0xa714, 0x1078, 0x4e60, 0x0040, 0x4d20, 0x2071, 0xa835, 0x7084,
++      0x700a, 0x20a9, 0x0020, 0x2099, 0xa836, 0x20a1, 0xa85d, 0x53a3,
++      0x7087, 0x0000, 0x2071, 0xa714, 0x2069, 0xa87d, 0x706c, 0x6826,
++      0x7070, 0x682a, 0x7074, 0x682e, 0x7078, 0x6832, 0x2d10, 0x1078,
++      0x13db, 0x7007, 0x0008, 0x2001, 0xffff, 0x2071, 0xa8c4, 0x7042,
++      0x127f, 0x0078, 0x4cda, 0x2069, 0xa87d, 0x6808, 0xa08e, 0x0000,
++      0x0040, 0x4d81, 0xa08e, 0x0200, 0x0040, 0x4d7f, 0xa08e, 0x0100,
++      0x00c0, 0x4d81, 0x127e, 0x2091, 0x8000, 0x0068, 0x4d7c, 0x2069,
++      0x0000, 0x6818, 0xd084, 0x00c0, 0x4d7c, 0x702c, 0x7130, 0x8108,
++      0xa102, 0x0048, 0x4d4a, 0xa00e, 0x7034, 0x706e, 0x7038, 0x7072,
++      0x0078, 0x4d54, 0x706c, 0xa080, 0x0040, 0x706e, 0x00c8, 0x4d54,
++      0x7070, 0xa081, 0x0000, 0x7072, 0x7132, 0x6936, 0x700b, 0x0000,
++      0x2001, 0xa85a, 0x2004, 0xa005, 0x00c0, 0x4d73, 0x6934, 0x2069,
++      0xa835, 0x689c, 0x699e, 0x2069, 0xa8c4, 0xa102, 0x00c0, 0x4d6c,
++      0x6844, 0xa005, 0x00d0, 0x4d7a, 0x2001, 0xa85b, 0x200c, 0x810d,
++      0x6946, 0x0078, 0x4d7a, 0x2009, 0x8040, 0x6922, 0x681b, 0x0001,
++      0x2091, 0x4080, 0x7007, 0x0001, 0x127f, 0x0078, 0x4d81, 0x7007,
++      0x0005, 0x007c, 0x701c, 0xa06d, 0x0040, 0x4d93, 0x1078, 0x4e60,
++      0x0040, 0x4d93, 0x7007, 0x0003, 0x1078, 0x4e80, 0x7050, 0xa086,
++      0x0100, 0x0040, 0x4d95, 0x007c, 0x007c, 0x7050, 0xa09e, 0x0100,
++      0x00c0, 0x4d9e, 0x7007, 0x0004, 0x0078, 0x4dbc, 0xa086, 0x0200,
++      0x00c0, 0x4da4, 0x7007, 0x0005, 0x007c, 0x2001, 0xa87f, 0x2004,
++      0xa08e, 0x0100, 0x00c0, 0x4db1, 0x7007, 0x0001, 0x1078, 0x4e4c,
++      0x007c, 0xa08e, 0x0000, 0x0040, 0x4db0, 0xa08e, 0x0200, 0x00c0,
++      0x4db0, 0x7007, 0x0005, 0x007c, 0x1078, 0x4e16, 0x7006, 0x1078,
++      0x4e4c, 0x007c, 0x007c, 0x0e7e, 0x157e, 0x2071, 0xa835, 0x7184,
++      0x81ff, 0x0040, 0x4deb, 0xa006, 0x7086, 0xae80, 0x0003, 0x2071,
++      0x0000, 0x21a8, 0x2014, 0x7226, 0x8000, 0x0070, 0x4de8, 0x2014,
++      0x722a, 0x8000, 0x0070, 0x4de8, 0x2014, 0x722e, 0x8000, 0x0070,
++      0x4de8, 0x2014, 0x723a, 0x8000, 0x0070, 0x4de8, 0x2014, 0x723e,
++      0xa180, 0x8030, 0x7022, 0x157f, 0x0e7f, 0x007c, 0x0e7e, 0x157e,
++      0x2071, 0xa835, 0x7184, 0x81ff, 0x0040, 0x4e13, 0xa006, 0x7086,
++      0xae80, 0x0003, 0x2071, 0x0000, 0x21a8, 0x2014, 0x7226, 0x8000,
++      0x2014, 0x722a, 0x8000, 0x0070, 0x4e0c, 0x2014, 0x723a, 0x8000,
++      0x2014, 0x723e, 0x0078, 0x4e10, 0x2001, 0x8020, 0x0078, 0x4e12,
++      0x2001, 0x8042, 0x7022, 0x157f, 0x0e7f, 0x007c, 0x702c, 0x7130,
++      0x8108, 0xa102, 0x0048, 0x4e23, 0xa00e, 0x7034, 0x706e, 0x7038,
++      0x7072, 0x0078, 0x4e2d, 0x706c, 0xa080, 0x0040, 0x706e, 0x00c8,
++      0x4e2d, 0x7070, 0xa081, 0x0000, 0x7072, 0x7132, 0x700c, 0x8001,
++      0x700e, 0x00c0, 0x4e43, 0x127e, 0x2091, 0x8000, 0x0068, 0x4e46,
++      0x2001, 0x000d, 0x2102, 0x2091, 0x4080, 0x2001, 0x0001, 0x700b,
++      0x0000, 0x127f, 0x007c, 0x2001, 0x0007, 0x007c, 0x2001, 0x0006,
++      0x700b, 0x0001, 0x127f, 0x007c, 0x701c, 0xa06d, 0x0040, 0x4e5f,
++      0x127e, 0x2091, 0x8000, 0x7010, 0x8001, 0x7012, 0x2d04, 0x701e,
++      0xa005, 0x00c0, 0x4e5c, 0x701a, 0x127f, 0x1078, 0x13a4, 0x007c,
++      0x2019, 0x000d, 0x2304, 0x230c, 0xa10e, 0x0040, 0x4e6f, 0x2304,
++      0x230c, 0xa10e, 0x0040, 0x4e6f, 0xa006, 0x0078, 0x4e7f, 0x732c,
++      0x8319, 0x7130, 0xa102, 0x00c0, 0x4e79, 0x2300, 0xa005, 0x0078,
++      0x4e7f, 0x0048, 0x4e7e, 0xa302, 0x0078, 0x4e7f, 0x8002, 0x007c,
++      0x2d00, 0x7026, 0xa080, 0x000d, 0x7056, 0x7053, 0x0000, 0x127e,
++      0x2091, 0x8000, 0x2009, 0xa8d6, 0x2104, 0xc08d, 0x200a, 0x127f,
++      0x1078, 0x13f9, 0x007c, 0x2071, 0xa6e2, 0x7003, 0x0000, 0x7007,
++      0x0000, 0x700f, 0x0000, 0x702b, 0x0001, 0x704f, 0x0000, 0x7053,
++      0x0001, 0x705f, 0x0020, 0x7063, 0x0040, 0x7083, 0x0000, 0x708b,
++      0x0000, 0x708f, 0x0001, 0x70bf, 0x0000, 0x007c, 0x0e7e, 0x2071,
++      0xa6e2, 0x6848, 0xa005, 0x00c0, 0x4ebc, 0x7028, 0xc085, 0x702a,
++      0xa085, 0x0001, 0x0078, 0x4ee1, 0x6a50, 0x7236, 0x6b54, 0x733a,
++      0x6858, 0x703e, 0x707a, 0x685c, 0x7042, 0x707e, 0x6848, 0x702e,
++      0x6840, 0x7032, 0x2009, 0x000c, 0x200a, 0x8007, 0x8006, 0x8006,
++      0xa08c, 0x003f, 0xa084, 0xffc0, 0xa210, 0x2100, 0xa319, 0x7272,
++      0x7376, 0x7028, 0xc084, 0x702a, 0x7007, 0x0001, 0x700f, 0x0000,
++      0xa006, 0x0e7f, 0x007c, 0x2b78, 0x2071, 0xa6e2, 0x7004, 0x1079,
++      0x4f41, 0x700c, 0x0079, 0x4eec, 0x4ef1, 0x4ee6, 0x4ee6, 0x4ee6,
++      0x4ee6, 0x007c, 0x700c, 0x0079, 0x4ef5, 0x4efa, 0x4f3f, 0x4f3f,
++      0x4f40, 0x4f40, 0x7830, 0x7930, 0xa106, 0x0040, 0x4f04, 0x7830,
++      0x7930, 0xa106, 0x00c0, 0x4f2a, 0x7030, 0xa10a, 0x0040, 0x4f2a,
++      0x00c8, 0x4f0c, 0x712c, 0xa10a, 0xa18a, 0x0002, 0x00c8, 0x4f2b,
++      0x1078, 0x1370, 0x0040, 0x4f2a, 0x2d00, 0x705a, 0x7063, 0x0040,
++      0x2001, 0x0003, 0x7057, 0x0000, 0x127e, 0x007e, 0x2091, 0x8000,
++      0x2009, 0xa8d6, 0x2104, 0xc085, 0x200a, 0x007f, 0x700e, 0x127f,
++      0x1078, 0x13f9, 0x007c, 0x1078, 0x1370, 0x0040, 0x4f2a, 0x2d00,
++      0x705a, 0x1078, 0x1370, 0x00c0, 0x4f37, 0x0078, 0x4f16, 0x2d00,
++      0x7086, 0x7063, 0x0080, 0x2001, 0x0004, 0x0078, 0x4f1a, 0x007c,
++      0x007c, 0x4f52, 0x4f53, 0x4f8a, 0x4f8b, 0x4f3f, 0x4fc1, 0x4fc6,
++      0x4ffd, 0x4ffe, 0x5019, 0x501a, 0x501b, 0x501c, 0x501d, 0x501e,
++      0x509e, 0x50c8, 0x007c, 0x700c, 0x0079, 0x4f56, 0x4f5b, 0x4f5e,
++      0x4f6e, 0x4f89, 0x4f89, 0x1078, 0x4ef2, 0x007c, 0x127e, 0x8001,
++      0x700e, 0x7058, 0x007e, 0x1078, 0x5464, 0x0040, 0x4f6b, 0x2091,
++      0x8000, 0x1078, 0x4ef2, 0x0d7f, 0x0078, 0x4f77, 0x127e, 0x8001,
++      0x700e, 0x1078, 0x5464, 0x7058, 0x2068, 0x7084, 0x705a, 0x6803,
++      0x0000, 0x6807, 0x0000, 0x6834, 0xa084, 0x00ff, 0xa08a, 0x0020,
++      0x00c8, 0x4f86, 0x1079, 0x4fa1, 0x127f, 0x007c, 0x127f, 0x1078,
++      0x501f, 0x007c, 0x007c, 0x007c, 0x0e7e, 0x2071, 0xa6e2, 0x700c,
++      0x0079, 0x4f92, 0x4f97, 0x4f97, 0x4f97, 0x4f99, 0x4f9d, 0x0e7f,
++      0x007c, 0x700f, 0x0001, 0x0078, 0x4f9f, 0x700f, 0x0002, 0x0e7f,
++      0x007c, 0x501f, 0x501f, 0x503b, 0x501f, 0x5171, 0x501f, 0x501f,
++      0x501f, 0x501f, 0x501f, 0x503b, 0x51bb, 0x5208, 0x5261, 0x5277,
++      0x501f, 0x501f, 0x5057, 0x503b, 0x501f, 0x501f, 0x5078, 0x5338,
++      0x5356, 0x501f, 0x5057, 0x501f, 0x501f, 0x501f, 0x501f, 0x506d,
++      0x5356, 0x7020, 0x2068, 0x1078, 0x13a4, 0x007c, 0x700c, 0x0079,
++      0x4fc9, 0x4fce, 0x4fd1, 0x4fe1, 0x4ffc, 0x4ffc, 0x1078, 0x4ef2,
++      0x007c, 0x127e, 0x8001, 0x700e, 0x7058, 0x007e, 0x1078, 0x5464,
++      0x0040, 0x4fde, 0x2091, 0x8000, 0x1078, 0x4ef2, 0x0d7f, 0x0078,
++      0x4fea, 0x127e, 0x8001, 0x700e, 0x1078, 0x5464, 0x7058, 0x2068,
++      0x7084, 0x705a, 0x6803, 0x0000, 0x6807, 0x0000, 0x6834, 0xa084,
++      0x00ff, 0xa08a, 0x001a, 0x00c8, 0x4ff9, 0x1079, 0x4fff, 0x127f,
++      0x007c, 0x127f, 0x1078, 0x501f, 0x007c, 0x007c, 0x007c, 0x501f,
++      0x503b, 0x515b, 0x501f, 0x503b, 0x501f, 0x503b, 0x503b, 0x501f,
++      0x503b, 0x515b, 0x503b, 0x503b, 0x503b, 0x503b, 0x503b, 0x501f,
++      0x503b, 0x515b, 0x501f, 0x501f, 0x503b, 0x501f, 0x501f, 0x501f,
++      0x503b, 0x007c, 0x007c, 0x007c, 0x007c, 0x007c, 0x007c, 0x7007,
++      0x0001, 0x6838, 0xa084, 0x00ff, 0xc0d5, 0x683a, 0x127e, 0x2091,
++      0x8000, 0x1078, 0x4a73, 0x127f, 0x007c, 0x7007, 0x0001, 0x6838,
++      0xa084, 0x00ff, 0xc0e5, 0x683a, 0x127e, 0x2091, 0x8000, 0x1078,
++      0x4a73, 0x127f, 0x007c, 0x7007, 0x0001, 0x6838, 0xa084, 0x00ff,
++      0xc0ed, 0x683a, 0x127e, 0x2091, 0x8000, 0x1078, 0x4a73, 0x127f,
++      0x007c, 0x7007, 0x0001, 0x6838, 0xa084, 0x00ff, 0xc0dd, 0x683a,
++      0x127e, 0x2091, 0x8000, 0x1078, 0x4a73, 0x127f, 0x007c, 0x6834,
++      0x8007, 0xa084, 0x00ff, 0x0040, 0x502d, 0x8001, 0x00c0, 0x5064,
++      0x7007, 0x0001, 0x0078, 0x513a, 0x7007, 0x0006, 0x7012, 0x2d00,
++      0x7016, 0x701a, 0x704b, 0x513a, 0x007c, 0x684c, 0xa084, 0x00c0,
++      0xa086, 0x00c0, 0x00c0, 0x5078, 0x7007, 0x0001, 0x0078, 0x5373,
++      0x2d00, 0x7016, 0x701a, 0x20a9, 0x0004, 0xa080, 0x0024, 0x2098,
++      0x20a1, 0xa70d, 0x53a3, 0x6858, 0x7012, 0xa082, 0x0401, 0x00c8,
++      0x5049, 0x6884, 0xa08a, 0x0002, 0x00c8, 0x5049, 0x82ff, 0x00c0,
++      0x509a, 0x6888, 0x698c, 0xa105, 0x0040, 0x509a, 0x2001, 0x510a,
++      0x0078, 0x509d, 0xa280, 0x5100, 0x2004, 0x70c6, 0x7010, 0xa015,
++      0x0040, 0x50e8, 0x1078, 0x1370, 0x00c0, 0x50a9, 0x7007, 0x000f,
++      0x007c, 0x2d00, 0x7022, 0x70c4, 0x2060, 0x6000, 0x6836, 0x6004,
++      0xad00, 0x7096, 0x6008, 0xa20a, 0x00c8, 0x50b8, 0xa00e, 0x2200,
++      0x7112, 0x620c, 0x8003, 0x800b, 0xa296, 0x0004, 0x0040, 0x50c1,
++      0xa108, 0x719a, 0x810b, 0x719e, 0xae90, 0x0022, 0x1078, 0x13db,
++      0x7090, 0xa08e, 0x0100, 0x0040, 0x50dc, 0xa086, 0x0200, 0x0040,
++      0x50d4, 0x7007, 0x0010, 0x007c, 0x7020, 0x2068, 0x1078, 0x13a4,
++      0x7014, 0x2068, 0x0078, 0x5049, 0x7020, 0x2068, 0x7018, 0x6802,
++      0x6807, 0x0000, 0x2d08, 0x2068, 0x6906, 0x711a, 0x0078, 0x509e,
++      0x7014, 0x2068, 0x7007, 0x0001, 0x6884, 0xa005, 0x00c0, 0x50f7,
++      0x6888, 0x698c, 0xa105, 0x0040, 0x50f7, 0x1078, 0x510e, 0x6834,
++      0xa084, 0x00ff, 0xa086, 0x001e, 0x0040, 0x5373, 0x0078, 0x513a,
++      0x5102, 0x5106, 0x0002, 0x0011, 0x0007, 0x0004, 0x000a, 0x000f,
++      0x0005, 0x0006, 0x000a, 0x0011, 0x0005, 0x0004, 0x0f7e, 0x0e7e,
++      0x0c7e, 0x077e, 0x067e, 0x6f88, 0x6e8c, 0x6804, 0x2060, 0xacf0,
++      0x0021, 0xacf8, 0x0027, 0x2009, 0x0005, 0x700c, 0x7816, 0x7008,
++      0x7812, 0x7004, 0x7806, 0x7000, 0x7802, 0x7e0e, 0x7f0a, 0x8109,
++      0x0040, 0x5130, 0xaef2, 0x0004, 0xaffa, 0x0006, 0x0078, 0x511d,
++      0x6004, 0xa065, 0x00c0, 0x5117, 0x067f, 0x077f, 0x0c7f, 0x0e7f,
++      0x0f7f, 0x007c, 0x2009, 0xa62f, 0x210c, 0x81ff, 0x00c0, 0x5155,
++      0x6838, 0xa084, 0x00ff, 0x683a, 0x1078, 0x4353, 0x00c0, 0x5149,
++      0x007c, 0x1078, 0x4b51, 0x127e, 0x2091, 0x8000, 0x1078, 0x8f7d,
++      0x1078, 0x4a73, 0x127f, 0x0078, 0x5148, 0x2001, 0x0028, 0x2009,
++      0x0000, 0x0078, 0x5149, 0x7018, 0x6802, 0x2d08, 0x2068, 0x6906,
++      0x711a, 0x7010, 0x8001, 0x7012, 0x0040, 0x516a, 0x7007, 0x0006,
++      0x0078, 0x5170, 0x7014, 0x2068, 0x7007, 0x0001, 0x7048, 0x107a,
++      0x007c, 0x7007, 0x0001, 0x6944, 0x810f, 0xa18c, 0x00ff, 0x6848,
++      0xa084, 0x00ff, 0x20a9, 0x0001, 0xa096, 0x0001, 0x0040, 0x519a,
++      0x2009, 0x0000, 0x20a9, 0x00ff, 0xa096, 0x0002, 0x0040, 0x519a,
++      0xa005, 0x00c0, 0x51ad, 0x6944, 0x810f, 0xa18c, 0x00ff, 0x1078,
++      0x45c4, 0x00c0, 0x51ad, 0x067e, 0x6e50, 0x1078, 0x46b3, 0x067f,
++      0x0078, 0x51ad, 0x047e, 0x2011, 0xa60c, 0x2224, 0xc484, 0xc48c,
++      0x2412, 0x047f, 0x0c7e, 0x1078, 0x45c4, 0x00c0, 0x51a9, 0x1078,
++      0x4852, 0x8108, 0x00f0, 0x51a3, 0x0c7f, 0x684c, 0xd084, 0x00c0,
++      0x51b4, 0x1078, 0x13a4, 0x007c, 0x127e, 0x2091, 0x8000, 0x1078,
++      0x4a73, 0x127f, 0x007c, 0x127e, 0x2091, 0x8000, 0x7007, 0x0001,
++      0x2001, 0xa653, 0x2004, 0xd0a4, 0x0040, 0x51ff, 0x2061, 0xa933,
++      0x6100, 0xd184, 0x0040, 0x51df, 0x6858, 0xa084, 0x00ff, 0x00c0,
++      0x5202, 0x6000, 0xd084, 0x0040, 0x51ff, 0x6004, 0xa005, 0x00c0,
++      0x5205, 0x6003, 0x0000, 0x600b, 0x0000, 0x0078, 0x51fc, 0x2011,
++      0x0001, 0x6860, 0xa005, 0x00c0, 0x51e7, 0x2001, 0x001e, 0x8000,
++      0x6016, 0x6858, 0xa084, 0x00ff, 0x0040, 0x51ff, 0x6006, 0x6858,
++      0x8007, 0xa084, 0x00ff, 0x0040, 0x51ff, 0x600a, 0x6858, 0x8000,
++      0x00c0, 0x51fb, 0xc28d, 0x6202, 0x127f, 0x0078, 0x5453, 0x127f,
++      0x0078, 0x544b, 0x127f, 0x0078, 0x5443, 0x127f, 0x0078, 0x5447,
++      0x127e, 0x2091, 0x8000, 0x7007, 0x0001, 0x2001, 0xa653, 0x2004,
++      0xd0a4, 0x0040, 0x525e, 0x2061, 0xa933, 0x6000, 0xd084, 0x0040,
++      0x525e, 0x6204, 0x6308, 0xd08c, 0x00c0, 0x5250, 0x6c48, 0xa484,
++      0x0003, 0x0040, 0x5236, 0x6958, 0xa18c, 0x00ff, 0x8001, 0x00c0,
++      0x522f, 0x2100, 0xa210, 0x0048, 0x525b, 0x0078, 0x5236, 0x8001,
++      0x00c0, 0x525b, 0x2100, 0xa212, 0x0048, 0x525b, 0xa484, 0x000c,
++      0x0040, 0x5250, 0x6958, 0x810f, 0xa18c, 0x00ff, 0xa082, 0x0004,
++      0x00c0, 0x5248, 0x2100, 0xa318, 0x0048, 0x525b, 0x0078, 0x5250,
++      0xa082, 0x0004, 0x00c0, 0x525b, 0x2100, 0xa31a, 0x0048, 0x525b,
++      0x6860, 0xa005, 0x0040, 0x5256, 0x8000, 0x6016, 0x6206, 0x630a,
++      0x127f, 0x0078, 0x5453, 0x127f, 0x0078, 0x544f, 0x127f, 0x0078,
++      0x544b, 0x127e, 0x2091, 0x8000, 0x7007, 0x0001, 0x2061, 0xa933,
++      0x6300, 0xd38c, 0x00c0, 0x5271, 0x6308, 0x8318, 0x0048, 0x5274,
++      0x630a, 0x127f, 0x0078, 0x5461, 0x127f, 0x0078, 0x544f, 0x127e,
++      0x0c7e, 0x2091, 0x8000, 0x7007, 0x0001, 0x684c, 0xd0ac, 0x0040,
++      0x528b, 0x0c7e, 0x2061, 0xa933, 0x6000, 0xa084, 0xfcff, 0x6002,
++      0x0c7f, 0x0078, 0x52ba, 0x6858, 0xa005, 0x0040, 0x52d1, 0x685c,
++      0xa065, 0x0040, 0x52cd, 0x2001, 0xa62f, 0x2004, 0xa005, 0x0040,
++      0x529d, 0x1078, 0x8ec6, 0x0078, 0x52ab, 0x6013, 0x0400, 0x6037,
++      0x0000, 0x694c, 0xd1a4, 0x0040, 0x52a7, 0x6950, 0x6136, 0x2009,
++      0x0041, 0x1078, 0x775c, 0x6958, 0xa18c, 0xff00, 0xa186, 0x2000,
++      0x00c0, 0x52ba, 0x027e, 0x2009, 0x0000, 0x2011, 0xfdff, 0x1078,
++      0x5bf1, 0x027f, 0x684c, 0xd0c4, 0x0040, 0x52c9, 0x2061, 0xa933,
++      0x6000, 0xd08c, 0x00c0, 0x52c9, 0x6008, 0x8000, 0x0048, 0x52cd,
++      0x600a, 0x0c7f, 0x127f, 0x0078, 0x5453, 0x0c7f, 0x127f, 0x0078,
++      0x544b, 0x6954, 0xa186, 0x0045, 0x0040, 0x5306, 0xa186, 0x002a,
++      0x00c0, 0x52e1, 0x2001, 0xa60c, 0x200c, 0xc194, 0x2102, 0x0078,
++      0x52ba, 0xa186, 0x0020, 0x0040, 0x52fa, 0xa186, 0x0029, 0x0040,
++      0x52ed, 0xa186, 0x002d, 0x00c0, 0x52cd, 0x6944, 0xa18c, 0xff00,
++      0x810f, 0x1078, 0x45c4, 0x00c0, 0x52ba, 0x6000, 0xc0e4, 0x6002,
++      0x0078, 0x52ba, 0x685c, 0xa065, 0x0040, 0x52cd, 0x6007, 0x0024,
++      0x2001, 0xa8a3, 0x2004, 0x6016, 0x0078, 0x52ba, 0x685c, 0xa065,
++      0x0040, 0x52cd, 0x0e7e, 0x6860, 0xa075, 0x2001, 0xa62f, 0x2004,
++      0xa005, 0x0040, 0x531e, 0x1078, 0x8ec6, 0x8eff, 0x0040, 0x531b,
++      0x2e60, 0x1078, 0x8ec6, 0x0e7f, 0x0078, 0x52ba, 0x6024, 0xc0dc,
++      0xc0d5, 0x6026, 0x2e60, 0x6007, 0x003a, 0x6870, 0xa005, 0x0040,
++      0x532f, 0x6007, 0x003b, 0x6874, 0x602a, 0x6878, 0x6012, 0x6003,
++      0x0001, 0x1078, 0x5d8a, 0x1078, 0x62d1, 0x0e7f, 0x0078, 0x52ba,
++      0x2061, 0xa933, 0x6000, 0xd084, 0x0040, 0x5352, 0xd08c, 0x00c0,
++      0x5461, 0x2091, 0x8000, 0x6204, 0x8210, 0x0048, 0x534c, 0x6206,
++      0x2091, 0x8001, 0x0078, 0x5461, 0x2091, 0x8001, 0x6853, 0x0016,
++      0x0078, 0x545a, 0x6853, 0x0007, 0x0078, 0x545a, 0x6834, 0x8007,
++      0xa084, 0x00ff, 0x00c0, 0x5360, 0x1078, 0x502d, 0x0078, 0x5372,
++      0x2030, 0x8001, 0x00c0, 0x536a, 0x7007, 0x0001, 0x1078, 0x5373,
++      0x0078, 0x5372, 0x7007, 0x0006, 0x7012, 0x2d00, 0x7016, 0x701a,
++      0x704b, 0x5373, 0x007c, 0x0e7e, 0x127e, 0x2091, 0x8000, 0xa03e,
++      0x2009, 0xa62f, 0x210c, 0x81ff, 0x00c0, 0x53ff, 0x2009, 0xa60c,
++      0x210c, 0xd194, 0x00c0, 0x5431, 0x6848, 0x2070, 0xae82, 0xad00,
++      0x0048, 0x53ef, 0x2001, 0xa616, 0x2004, 0xae02, 0x00c8, 0x53ef,
++      0x2061, 0xa933, 0x6100, 0xa184, 0x0301, 0xa086, 0x0001, 0x00c0,
++      0x53d2, 0x711c, 0xa186, 0x0006, 0x00c0, 0x53da, 0x7018, 0xa005,
++      0x0040, 0x53ff, 0x2004, 0xd0e4, 0x00c0, 0x542b, 0x7024, 0xd0dc,
++      0x00c0, 0x5435, 0x6853, 0x0000, 0x6803, 0x0000, 0x2d08, 0x7010,
++      0xa005, 0x00c0, 0x53be, 0x7112, 0x684c, 0xd0f4, 0x00c0, 0x5439,
++      0x2e60, 0x1078, 0x5b27, 0x127f, 0x0e7f, 0x007c, 0x2068, 0x6800,
++      0xa005, 0x00c0, 0x53be, 0x6902, 0x2168, 0x684c, 0xd0f4, 0x00c0,
++      0x5439, 0x127f, 0x0e7f, 0x007c, 0x127f, 0x0e7f, 0x6853, 0x0006,
++      0x0078, 0x545a, 0xd184, 0x0040, 0x53cc, 0xd1c4, 0x00c0, 0x53f3,
++      0x0078, 0x53f7, 0x6944, 0xa18c, 0xff00, 0x810f, 0x1078, 0x45c4,
++      0x00c0, 0x542b, 0x6000, 0xd0e4, 0x00c0, 0x542b, 0x711c, 0xa186,
++      0x0007, 0x00c0, 0x53ef, 0x6853, 0x0002, 0x0078, 0x542d, 0x6853,
++      0x0008, 0x0078, 0x542d, 0x6853, 0x000e, 0x0078, 0x542d, 0x6853,
++      0x0017, 0x0078, 0x542d, 0x6853, 0x0035, 0x0078, 0x542d, 0x2001,
++      0xa672, 0x2004, 0xd0fc, 0x0040, 0x5427, 0x6848, 0x2070, 0xae82,
++      0xad00, 0x0048, 0x5427, 0x6058, 0xae02, 0x00c8, 0x5427, 0x711c,
++      0xa186, 0x0006, 0x00c0, 0x5427, 0x7018, 0xa005, 0x0040, 0x5427,
++      0x2004, 0xd0bc, 0x0040, 0x5427, 0x2039, 0x0001, 0x7000, 0xa086,
++      0x0007, 0x00c0, 0x537e, 0x7003, 0x0002, 0x0078, 0x537e, 0x6853,
++      0x0028, 0x0078, 0x542d, 0x6853, 0x0029, 0x127f, 0x0e7f, 0x0078,
++      0x545a, 0x6853, 0x002a, 0x0078, 0x542d, 0x6853, 0x0045, 0x0078,
++      0x542d, 0x2e60, 0x2019, 0x0002, 0x6017, 0x0014, 0x1078, 0x9dc7,
++      0x127f, 0x0e7f, 0x007c, 0x2009, 0x003e, 0x0078, 0x5455, 0x2009,
++      0x0004, 0x0078, 0x5455, 0x2009, 0x0006, 0x0078, 0x5455, 0x2009,
++      0x0016, 0x0078, 0x5455, 0x2009, 0x0001, 0x6854, 0xa084, 0xff00,
++      0xa105, 0x6856, 0x2091, 0x8000, 0x1078, 0x4a73, 0x2091, 0x8001,
++      0x007c, 0x1078, 0x13a4, 0x007c, 0x702c, 0x7130, 0x8108, 0xa102,
++      0x0048, 0x5471, 0xa00e, 0x7034, 0x7072, 0x7038, 0x7076, 0x0078,
++      0x547d, 0x7070, 0xa080, 0x0040, 0x7072, 0x00c8, 0x547d, 0x7074,
++      0xa081, 0x0000, 0x7076, 0xa085, 0x0001, 0x7932, 0x7132, 0x007c,
++      0x0d7e, 0x1078, 0x5b1e, 0x0d7f, 0x007c, 0x0d7e, 0x2011, 0x0004,
++      0x2204, 0xa085, 0x8002, 0x2012, 0x0d7f, 0x007c, 0x20e1, 0x0002,
++      0x3d08, 0x20e1, 0x2000, 0x3d00, 0xa084, 0x7000, 0x0040, 0x549c,
++      0xa086, 0x1000, 0x00c0, 0x54d3, 0x20e1, 0x0000, 0x3d00, 0xa094,
++      0xff00, 0x8217, 0xa084, 0xf000, 0xa086, 0x3000, 0x00c0, 0x54b7,
++      0xa184, 0xff00, 0x8007, 0xa086, 0x0008, 0x00c0, 0x54d3, 0x1078,
++      0x29bb, 0x00c0, 0x54d3, 0x1078, 0x56b2, 0x0078, 0x54ce, 0x20e1,
++      0x0004, 0x3d60, 0xd1bc, 0x00c0, 0x54be, 0x3e60, 0xac84, 0x000f,
++      0x00c0, 0x54d3, 0xac82, 0xad00, 0x0048, 0x54d3, 0x6858, 0xac02,
++      0x00c8, 0x54d3, 0x2009, 0x0047, 0x1078, 0x775c, 0x7a1c, 0xd284,
++      0x00c0, 0x548e, 0x007c, 0xa016, 0x1078, 0x15fa, 0x0078, 0x54ce,
++      0x0078, 0x54d3, 0x781c, 0xd08c, 0x0040, 0x5502, 0x157e, 0x137e,
++      0x147e, 0x20e1, 0x3000, 0x3d20, 0x3e28, 0xa584, 0x0076, 0x00c0,
++      0x5518, 0xa484, 0x7000, 0xa086, 0x1000, 0x00c0, 0x5507, 0x1078,
++      0x554e, 0x0040, 0x5518, 0x20e1, 0x3000, 0x7828, 0x7828, 0x1078,
++      0x556c, 0x147f, 0x137f, 0x157f, 0x2009, 0xa8b9, 0x2104, 0xa005,
++      0x00c0, 0x5503, 0x007c, 0x1078, 0x62d1, 0x0078, 0x5502, 0xa484,
++      0x7000, 0x00c0, 0x5518, 0x1078, 0x554e, 0x0040, 0x552c, 0x7000,
++      0xa084, 0xff00, 0xa086, 0x8100, 0x0040, 0x54f3, 0x0078, 0x552c,
++      0x1078, 0xa54f, 0xd5a4, 0x0040, 0x5528, 0x047e, 0x1078, 0x1b22,
++      0x047f, 0x20e1, 0x9010, 0x2001, 0x0138, 0x2202, 0x0078, 0x5530,
++      0x1078, 0x554e, 0x6883, 0x0000, 0x20e1, 0x3000, 0x7828, 0x7828,
++      0x1078, 0x5537, 0x147f, 0x137f, 0x157f, 0x0078, 0x5502, 0x2001,
++      0xa60e, 0x2004, 0xd08c, 0x0040, 0x554d, 0x2001, 0xa600, 0x2004,
++      0xa086, 0x0003, 0x00c0, 0x554d, 0x027e, 0x037e, 0x2011, 0x8048,
++      0x2518, 0x1078, 0x361b, 0x037f, 0x027f, 0x007c, 0xa484, 0x01ff,
++      0x6882, 0xa005, 0x0040, 0x5560, 0xa080, 0x001f, 0xa084, 0x03f8,
++      0x80ac, 0x20e1, 0x1000, 0x2ea0, 0x2099, 0x020a, 0x53a5, 0x007c,
++      0x20a9, 0x000c, 0x20e1, 0x1000, 0x2ea0, 0x2099, 0x020a, 0x53a5,
++      0xa085, 0x0001, 0x0078, 0x555f, 0x7000, 0xa084, 0xff00, 0xa08c,
++      0xf000, 0x8007, 0xa196, 0x0000, 0x00c0, 0x5579, 0x0078, 0x57ba,
++      0x007c, 0xa196, 0x2000, 0x00c0, 0x558a, 0x6900, 0xa18e, 0x0001,
++      0x00c0, 0x5586, 0x1078, 0x3aec, 0x0078, 0x5578, 0x1078, 0x5592,
++      0x0078, 0x5578, 0xa196, 0x8000, 0x00c0, 0x5578, 0x1078, 0x5871,
++      0x0078, 0x5578, 0x0c7e, 0x7110, 0xa18c, 0xff00, 0x810f, 0xa196,
++      0x0001, 0x0040, 0x559f, 0xa196, 0x0023, 0x00c0, 0x56aa, 0xa08e,
++      0x0023, 0x00c0, 0x55d4, 0x1078, 0x591d, 0x0040, 0x56aa, 0x7124,
++      0x610a, 0x7030, 0xa08e, 0x0200, 0x00c0, 0x55b8, 0x7034, 0xa005,
++      0x00c0, 0x56aa, 0x2009, 0x0015, 0x1078, 0x775c, 0x0078, 0x56aa,
++      0xa08e, 0x0214, 0x0040, 0x55c0, 0xa08e, 0x0210, 0x00c0, 0x55c6,
++      0x2009, 0x0015, 0x1078, 0x775c, 0x0078, 0x56aa, 0xa08e, 0x0100,
++      0x00c0, 0x56aa, 0x7034, 0xa005, 0x00c0, 0x56aa, 0x2009, 0x0016,
++      0x1078, 0x775c, 0x0078, 0x56aa, 0xa08e, 0x0022, 0x00c0, 0x56aa,
++      0x7030, 0xa08e, 0x0300, 0x00c0, 0x55e5, 0x7034, 0xa005, 0x00c0,
++      0x56aa, 0x2009, 0x0017, 0x0078, 0x5676, 0xa08e, 0x0500, 0x00c0,
++      0x55f1, 0x7034, 0xa005, 0x00c0, 0x56aa, 0x2009, 0x0018, 0x0078,
++      0x5676, 0xa08e, 0x2010, 0x00c0, 0x55f9, 0x2009, 0x0019, 0x0078,
++      0x5676, 0xa08e, 0x2110, 0x00c0, 0x5601, 0x2009, 0x001a, 0x0078,
++      0x5676, 0xa08e, 0x5200, 0x00c0, 0x560d, 0x7034, 0xa005, 0x00c0,
++      0x56aa, 0x2009, 0x001b, 0x0078, 0x5676, 0xa08e, 0x5000, 0x00c0,
++      0x5619, 0x7034, 0xa005, 0x00c0, 0x56aa, 0x2009, 0x001c, 0x0078,
++      0x5676, 0xa08e, 0x1300, 0x00c0, 0x5621, 0x2009, 0x0034, 0x0078,
++      0x5676, 0xa08e, 0x1200, 0x00c0, 0x562d, 0x7034, 0xa005, 0x00c0,
++      0x56aa, 0x2009, 0x0024, 0x0078, 0x5676, 0xa08c, 0xff00, 0xa18e,
++      0x2400, 0x00c0, 0x5637, 0x2009, 0x002d, 0x0078, 0x5676, 0xa08c,
++      0xff00, 0xa18e, 0x5300, 0x00c0, 0x5641, 0x2009, 0x002a, 0x0078,
++      0x5676, 0xa08e, 0x0f00, 0x00c0, 0x5649, 0x2009, 0x0020, 0x0078,
++      0x5676, 0xa08e, 0x5300, 0x00c0, 0x564f, 0x0078, 0x566c, 0xa08e,
++      0x6104, 0x00c0, 0x566c, 0x2011, 0xab8d, 0x8208, 0x2204, 0xa082,
++      0x0004, 0x20a8, 0x95ac, 0x95ac, 0x2011, 0x8015, 0x211c, 0x8108,
++      0x047e, 0x2124, 0x1078, 0x361b, 0x047f, 0x8108, 0x00f0, 0x565c,
++      0x2009, 0x0023, 0x0078, 0x5676, 0xa08e, 0x6000, 0x00c0, 0x5674,
++      0x2009, 0x003f, 0x0078, 0x5676, 0x2009, 0x001d, 0x017e, 0x2011,
++      0xab83, 0x2204, 0x8211, 0x220c, 0x1078, 0x254d, 0x00c0, 0x56ac,
++      0x1078, 0x455c, 0x00c0, 0x56ac, 0x6612, 0x6516, 0x86ff, 0x0040,
++      0x569c, 0x017f, 0x017e, 0xa186, 0x0017, 0x00c0, 0x569c, 0x686c,
++      0xa606, 0x00c0, 0x569c, 0x6870, 0xa506, 0xa084, 0xff00, 0x00c0,
++      0x569c, 0x6000, 0xc0f5, 0x6002, 0x0c7e, 0x1078, 0x76c7, 0x0040,
++      0x56af, 0x017f, 0x611a, 0x601f, 0x0004, 0x7120, 0x610a, 0x017f,
++      0x1078, 0x775c, 0x0c7f, 0x007c, 0x017f, 0x0078, 0x56aa, 0x0c7f,
++      0x0078, 0x56ac, 0x0c7e, 0x1078, 0x570f, 0x00c0, 0x570d, 0xa28e,
++      0x0033, 0x00c0, 0x56de, 0x1078, 0x591d, 0x0040, 0x570d, 0x7124,
++      0x610a, 0x7030, 0xa08e, 0x0200, 0x00c0, 0x56d0, 0x7034, 0xa005,
++      0x00c0, 0x570d, 0x2009, 0x0015, 0x1078, 0x775c, 0x0078, 0x570d,
++      0xa08e, 0x0100, 0x00c0, 0x570d, 0x7034, 0xa005, 0x00c0, 0x570d,
++      0x2009, 0x0016, 0x1078, 0x775c, 0x0078, 0x570d, 0xa28e, 0x0032,
++      0x00c0, 0x570d, 0x7030, 0xa08e, 0x1400, 0x00c0, 0x570d, 0x2009,
++      0x0038, 0x017e, 0x2011, 0xab83, 0x2204, 0x8211, 0x220c, 0x1078,
++      0x254d, 0x00c0, 0x570c, 0x1078, 0x455c, 0x00c0, 0x570c, 0x6612,
++      0x6516, 0x0c7e, 0x1078, 0x76c7, 0x0040, 0x570b, 0x017f, 0x611a,
++      0x601f, 0x0004, 0x7120, 0x610a, 0x017f, 0x1078, 0x775c, 0x1078,
++      0x62d1, 0x0078, 0x570d, 0x0c7f, 0x017f, 0x0c7f, 0x007c, 0x0f7e,
++      0x0d7e, 0x027e, 0x017e, 0x137e, 0x147e, 0x157e, 0x3c00, 0x007e,
++      0x2079, 0x0030, 0x2069, 0x0200, 0x1078, 0x1c6a, 0x00c0, 0x5750,
++      0x1078, 0x1b40, 0x0040, 0x575d, 0x7908, 0xa18c, 0x1fff, 0xa182,
++      0x0011, 0x00c8, 0x575a, 0x20a9, 0x000c, 0x20e1, 0x0000, 0x2ea0,
++      0x2099, 0x020a, 0x53a5, 0x20e1, 0x2000, 0x2001, 0x020a, 0x2004,
++      0x7a0c, 0x7808, 0xa080, 0x0007, 0xa084, 0x1ff8, 0xa08a, 0x0140,
++      0x10c8, 0x1332, 0x80ac, 0x20e1, 0x6000, 0x2099, 0x020a, 0x53a5,
++      0x20e1, 0x7000, 0x6828, 0x6828, 0x7803, 0x0004, 0xa294, 0x0070,
++      0x007f, 0x20e0, 0x157f, 0x147f, 0x137f, 0x017f, 0x027f, 0x0d7f,
++      0x0f7f, 0x007c, 0xa016, 0x1078, 0x15fa, 0xa085, 0x0001, 0x0078,
++      0x5750, 0x047e, 0x0e7e, 0x0d7e, 0x2028, 0x2130, 0xa696, 0x00ff,
++      0x00c0, 0x5782, 0xa596, 0xfffd, 0x00c0, 0x5772, 0x2009, 0x007f,
++      0x0078, 0x57b5, 0xa596, 0xfffe, 0x00c0, 0x577a, 0x2009, 0x007e,
++      0x0078, 0x57b5, 0xa596, 0xfffc, 0x00c0, 0x5782, 0x2009, 0x0080,
++      0x0078, 0x57b5, 0x2011, 0x0000, 0x2021, 0x0081, 0x20a9, 0x007e,
++      0x2071, 0xa7b6, 0x2e1c, 0x83ff, 0x00c0, 0x5794, 0x82ff, 0x00c0,
++      0x57a9, 0x2410, 0x0078, 0x57a9, 0x2368, 0x6f10, 0x007e, 0x2100,
++      0xa706, 0x007f, 0x6b14, 0x00c0, 0x57a3, 0xa346, 0x00c0, 0x57a3,
++      0x2408, 0x0078, 0x57b5, 0x87ff, 0x00c0, 0x57a9, 0x83ff, 0x0040,
++      0x578e, 0x8420, 0x8e70, 0x00f0, 0x578a, 0x82ff, 0x00c0, 0x57b4,
++      0xa085, 0x0001, 0x0078, 0x57b6, 0x2208, 0xa006, 0x0d7f, 0x0e7f,
++      0x047f, 0x007c, 0xa084, 0x0007, 0x0079, 0x57bf, 0x007c, 0x57c7,
++      0x57c7, 0x57c7, 0x5933, 0x57c7, 0x57c8, 0x57e1, 0x5858, 0x007c,
++      0x7110, 0xd1bc, 0x0040, 0x57e0, 0x7120, 0x2160, 0xac8c, 0x000f,
++      0x00c0, 0x57e0, 0xac8a, 0xad00, 0x0048, 0x57e0, 0x6858, 0xac02,
++      0x00c8, 0x57e0, 0x7124, 0x610a, 0x2009, 0x0046, 0x1078, 0x775c,
++      0x007c, 0x0c7e, 0xa484, 0x01ff, 0x0040, 0x5833, 0x7110, 0xd1bc,
++      0x00c0, 0x5833, 0x2011, 0xab83, 0x2204, 0x8211, 0x220c, 0x1078,
++      0x254d, 0x00c0, 0x5833, 0x1078, 0x455c, 0x00c0, 0x5833, 0x6612,
++      0x6516, 0x6000, 0xd0ec, 0x00c0, 0x5833, 0x6204, 0xa294, 0xff00,
++      0x8217, 0xa286, 0x0006, 0x00c0, 0x5818, 0x0c7e, 0x1078, 0x76c7,
++      0x017f, 0x0040, 0x5835, 0x611a, 0x601f, 0x0006, 0x7120, 0x610a,
++      0x7130, 0x6122, 0x2009, 0x0044, 0x1078, 0x775c, 0x0078, 0x5833,
++      0x0c7e, 0x1078, 0x76c7, 0x017f, 0x0040, 0x5833, 0x611a, 0x601f,
++      0x0004, 0x7120, 0x610a, 0xa286, 0x0004, 0x00c0, 0x582b, 0x6007,
++      0x0005, 0x0078, 0x582d, 0x6007, 0x0001, 0x6003, 0x0001, 0x1078,
++      0x5dd7, 0x1078, 0x62d1, 0x0c7f, 0x007c, 0x2001, 0xa60d, 0x2004,
++      0xd0ec, 0x0040, 0x583f, 0x2011, 0x8049, 0x1078, 0x361b, 0x0c7e,
++      0x1078, 0x9187, 0x017f, 0x0040, 0x5833, 0x611a, 0x601f, 0x0006,
++      0x7120, 0x610a, 0x7130, 0x6122, 0x6013, 0x0300, 0x6003, 0x0001,
++      0x6007, 0x0041, 0x1078, 0x5d8a, 0x1078, 0x62d1, 0x0078, 0x5833,
++      0x7110, 0xd1bc, 0x0040, 0x5870, 0x7020, 0x2060, 0xac84, 0x000f,
++      0x00c0, 0x5870, 0xac82, 0xad00, 0x0048, 0x5870, 0x6858, 0xac02,
++      0x00c8, 0x5870, 0x7124, 0x610a, 0x2009, 0x0045, 0x1078, 0x775c,
++      0x007c, 0x007e, 0x1078, 0x29bb, 0x007f, 0x00c0, 0x5887, 0x7110,
++      0xa18c, 0xff00, 0x810f, 0xa18e, 0x0000, 0x00c0, 0x5887, 0xa084,
++      0x000f, 0xa08a, 0x0006, 0x00c8, 0x5887, 0x1079, 0x5888, 0x007c,
++      0x588e, 0x588f, 0x588e, 0x588e, 0x58ff, 0x590e, 0x007c, 0x7110,
++      0xd1bc, 0x0040, 0x5897, 0x702c, 0xd084, 0x0040, 0x58fe, 0x700c,
++      0x7108, 0x1078, 0x254d, 0x00c0, 0x58fe, 0x1078, 0x455c, 0x00c0,
++      0x58fe, 0x6612, 0x6516, 0x6204, 0x7110, 0xd1bc, 0x0040, 0x58c9,
++      0xa28c, 0x00ff, 0xa186, 0x0004, 0x0040, 0x58b2, 0xa186, 0x0006,
++      0x00c0, 0x58ef, 0x0c7e, 0x1078, 0x591d, 0x0c7f, 0x0040, 0x58fe,
++      0x0c7e, 0x1078, 0x76c7, 0x017f, 0x0040, 0x58fe, 0x611a, 0x601f,
++      0x0002, 0x7120, 0x610a, 0x2009, 0x0088, 0x1078, 0x775c, 0x0078,
++      0x58fe, 0xa28c, 0x00ff, 0xa186, 0x0006, 0x0040, 0x58de, 0xa186,
++      0x0004, 0x0040, 0x58de, 0xa294, 0xff00, 0x8217, 0xa286, 0x0004,
++      0x0040, 0x58de, 0xa286, 0x0006, 0x00c0, 0x58ef, 0x0c7e, 0x1078,
++      0x76c7, 0x017f, 0x0040, 0x58fe, 0x611a, 0x601f, 0x0005, 0x7120,
++      0x610a, 0x2009, 0x0088, 0x1078, 0x775c, 0x0078, 0x58fe, 0x0c7e,
++      0x1078, 0x76c7, 0x017f, 0x0040, 0x58fe, 0x611a, 0x601f, 0x0004,
++      0x7120, 0x610a, 0x2009, 0x0001, 0x1078, 0x775c, 0x007c, 0x7110,
++      0xd1bc, 0x0040, 0x590d, 0x1078, 0x591d, 0x0040, 0x590d, 0x7124,
++      0x610a, 0x2009, 0x0089, 0x1078, 0x775c, 0x007c, 0x7110, 0xd1bc,
++      0x0040, 0x591c, 0x1078, 0x591d, 0x0040, 0x591c, 0x7124, 0x610a,
++      0x2009, 0x008a, 0x1078, 0x775c, 0x007c, 0x7020, 0x2060, 0xac84,
++      0x000f, 0x00c0, 0x5930, 0xac82, 0xad00, 0x0048, 0x5930, 0x2001,
++      0xa616, 0x2004, 0xac02, 0x00c8, 0x5930, 0xa085, 0x0001, 0x007c,
++      0xa006, 0x0078, 0x592f, 0x7110, 0xd1bc, 0x00c0, 0x5949, 0x7024,
++      0x2060, 0xac84, 0x000f, 0x00c0, 0x5949, 0xac82, 0xad00, 0x0048,
++      0x5949, 0x6858, 0xac02, 0x00c8, 0x5949, 0x2009, 0x0051, 0x1078,
++      0x775c, 0x007c, 0x2071, 0xa8c4, 0x7003, 0x0003, 0x700f, 0x0361,
++      0xa006, 0x701a, 0x7012, 0x7017, 0xad00, 0x7007, 0x0000, 0x7026,
++      0x702b, 0x6e1c, 0x7032, 0x7037, 0x6e70, 0x703b, 0x0002, 0x703f,
++      0x0000, 0x7043, 0xffff, 0x7047, 0xffff, 0x007c, 0x2071, 0xa8c4,
++      0x00e0, 0x5a32, 0x2091, 0x6000, 0x700c, 0x8001, 0x700e, 0x00c0,
++      0x59de, 0x700f, 0x0361, 0x7007, 0x0001, 0x127e, 0x2091, 0x8000,
++      0x7138, 0x8109, 0x713a, 0x00c0, 0x59dc, 0x703b, 0x0002, 0x2009,
++      0x0100, 0x2104, 0xa082, 0x0003, 0x00c8, 0x59dc, 0x703c, 0xa086,
++      0x0001, 0x00c0, 0x59b9, 0x0d7e, 0x2069, 0x0140, 0x6804, 0xa084,
++      0x4000, 0x0040, 0x5997, 0x6803, 0x1000, 0x0078, 0x599e, 0x6804,
++      0xa084, 0x1000, 0x0040, 0x599e, 0x6803, 0x0100, 0x6803, 0x0000,
++      0x703f, 0x0000, 0x2069, 0xa8b1, 0x6804, 0xa082, 0x0006, 0x00c0,
++      0x59ab, 0x6807, 0x0000, 0x6830, 0xa082, 0x0003, 0x00c0, 0x59b2,
++      0x6833, 0x0000, 0x1078, 0x62d1, 0x1078, 0x639b, 0x0d7f, 0x0078,
++      0x59dc, 0x0d7e, 0x2069, 0xa600, 0x6948, 0x6864, 0xa102, 0x00c8,
++      0x59db, 0x2069, 0xa8b1, 0x6804, 0xa086, 0x0000, 0x00c0, 0x59db,
++      0x6830, 0xa086, 0x0000, 0x00c0, 0x59db, 0x703f, 0x0001, 0x6807,
++      0x0006, 0x6833, 0x0003, 0x2069, 0x0100, 0x6830, 0x689e, 0x2069,
++      0x0140, 0x6803, 0x0600, 0x0d7f, 0x0078, 0x59e1, 0x127e, 0x2091,
++      0x8000, 0x7024, 0xa00d, 0x0040, 0x59f9, 0x7020, 0x8001, 0x7022,
++      0x00c0, 0x59f9, 0x7023, 0x0009, 0x8109, 0x7126, 0xa186, 0x03e8,
++      0x00c0, 0x59f4, 0x7028, 0x107a, 0x81ff, 0x00c0, 0x59f9, 0x7028,
++      0x107a, 0x7030, 0xa00d, 0x0040, 0x5a10, 0x702c, 0x8001, 0x702e,
++      0x00c0, 0x5a10, 0x702f, 0x0009, 0x8109, 0x7132, 0x0040, 0x5a0e,
++      0xa184, 0x007f, 0x1040, 0x6ea2, 0x0078, 0x5a10, 0x7034, 0x107a,
++      0x7040, 0xa005, 0x0040, 0x5a18, 0x0050, 0x5a18, 0x8001, 0x7042,
++      0x7044, 0xa005, 0x0040, 0x5a20, 0x0050, 0x5a20, 0x8001, 0x7046,
++      0x7018, 0xa00d, 0x0040, 0x5a31, 0x7008, 0x8001, 0x700a, 0x00c0,
++      0x5a31, 0x700b, 0x0009, 0x8109, 0x711a, 0x00c0, 0x5a31, 0x701c,
++      0x107a, 0x127f, 0x7004, 0x0079, 0x5a35, 0x5a5c, 0x5a5d, 0x5a79,
++      0x0e7e, 0x2071, 0xa8c4, 0x7018, 0xa005, 0x00c0, 0x5a43, 0x711a,
++      0x721e, 0x700b, 0x0009, 0x0e7f, 0x007c, 0x0e7e, 0x007e, 0x2071,
++      0xa8c4, 0x701c, 0xa206, 0x00c0, 0x5a4f, 0x701a, 0x701e, 0x007f,
++      0x0e7f, 0x007c, 0x0e7e, 0x2071, 0xa8c4, 0x6088, 0xa102, 0x0048,
++      0x5a5a, 0x618a, 0x0e7f, 0x007c, 0x007c, 0x7110, 0x1078, 0x45c4,
++      0x00c0, 0x5a6f, 0x6088, 0x8001, 0x0048, 0x5a6f, 0x608a, 0x00c0,
++      0x5a6f, 0x127e, 0x2091, 0x8000, 0x1078, 0x62d1, 0x127f, 0x8108,
++      0xa182, 0x00ff, 0x0048, 0x5a77, 0xa00e, 0x7007, 0x0002, 0x7112,
++      0x007c, 0x7014, 0x2060, 0x127e, 0x2091, 0x8000, 0x603c, 0xa005,
++      0x0040, 0x5a88, 0x8001, 0x603e, 0x00c0, 0x5a88, 0x1078, 0x8f9c,
++      0x6014, 0xa005, 0x0040, 0x5ab2, 0x8001, 0x6016, 0x00c0, 0x5ab2,
++      0x611c, 0xa186, 0x0003, 0x0040, 0x5a99, 0xa186, 0x0006, 0x00c0,
++      0x5ab0, 0x6010, 0x2068, 0x6854, 0xa08a, 0x199a, 0x0048, 0x5ab0,
++      0xa082, 0x1999, 0x6856, 0xa08a, 0x199a, 0x0048, 0x5aa9, 0x2001,
++      0x1999, 0x8003, 0x800b, 0x810b, 0xa108, 0x6116, 0x0078, 0x5ab2,
++      0x1078, 0x8abe, 0x127f, 0xac88, 0x0010, 0x7116, 0x2001, 0xcd00,
++      0xa102, 0x0048, 0x5abf, 0x7017, 0xad00, 0x7007, 0x0000, 0x007c,
++      0x0e7e, 0x2071, 0xa8c4, 0x7027, 0x07d0, 0x7023, 0x0009, 0x703b,
++      0x0002, 0x0e7f, 0x007c, 0x2001, 0xa8cd, 0x2003, 0x0000, 0x007c,
++      0x0e7e, 0x2071, 0xa8c4, 0x7132, 0x702f, 0x0009, 0x0e7f, 0x007c,
++      0x2011, 0xa8d0, 0x2013, 0x0000, 0x007c, 0x0e7e, 0x2071, 0xa8c4,
++      0x711a, 0x721e, 0x700b, 0x0009, 0x0e7f, 0x007c, 0x027e, 0x0e7e,
++      0x0f7e, 0x2079, 0xa600, 0x7a34, 0xd294, 0x0040, 0x5b15, 0x2071,
++      0xa8ac, 0x2e14, 0xa0fe, 0x0000, 0x0040, 0x5b02, 0xa0fe, 0x0001,
++      0x0040, 0x5b06, 0xa0fe, 0x0002, 0x00c0, 0x5b11, 0xa292, 0x0085,
++      0x0078, 0x5b08, 0xa292, 0x0005, 0x0078, 0x5b08, 0xa292, 0x0002,
++      0x2272, 0x0040, 0x5b0d, 0x00c8, 0x5b15, 0x2011, 0x8037, 0x1078,
++      0x361b, 0x2011, 0xa8ab, 0x2204, 0x2072, 0x0f7f, 0x0e7f, 0x027f,
++      0x007c, 0x0c7e, 0x2061, 0xa933, 0x0c7f, 0x007c, 0xa184, 0x000f,
++      0x8003, 0x8003, 0x8003, 0xa080, 0xa933, 0x2060, 0x007c, 0x6854,
++      0xa08a, 0x199a, 0x0048, 0x5b2e, 0x2001, 0x1999, 0xa005, 0x00c0,
++      0x5b3d, 0x0c7e, 0x2061, 0xa933, 0x6014, 0x0c7f, 0xa005, 0x00c0,
++      0x5b42, 0x2001, 0x001e, 0x0078, 0x5b42, 0xa08e, 0xffff, 0x00c0,
++      0x5b42, 0xa006, 0x8003, 0x800b, 0x810b, 0xa108, 0x6116, 0x684c,
++      0xa08c, 0x00c0, 0xa18e, 0x00c0, 0x0040, 0x5b9e, 0xd0b4, 0x00c0,
++      0x5b59, 0xd0bc, 0x00c0, 0x5b8b, 0x2009, 0x0006, 0x1078, 0x5bc3,
++      0x007c, 0xd0fc, 0x0040, 0x5b64, 0xa084, 0x0003, 0x0040, 0x5b64,
++      0xa086, 0x0003, 0x00c0, 0x5bbc, 0x6024, 0xd0d4, 0x0040, 0x5b6e,
++      0xc0d4, 0x6026, 0x6860, 0x602a, 0x685c, 0x602e, 0x2009, 0xa674,
++      0x2104, 0xd084, 0x0040, 0x5b83, 0x6118, 0xa188, 0x0027, 0x2104,
++      0xd08c, 0x00c0, 0x5b83, 0x87ff, 0x00c0, 0x5b82, 0x2009, 0x0042,
++      0x1078, 0x775c, 0x007c, 0x87ff, 0x00c0, 0x5b8a, 0x2009, 0x0043,
++      0x1078, 0x775c, 0x007c, 0xd0fc, 0x0040, 0x5b96, 0xa084, 0x0003,
++      0x0040, 0x5b96, 0xa086, 0x0003, 0x00c0, 0x5bbc, 0x87ff, 0x00c0,
++      0x5b9d, 0x2009, 0x0042, 0x1078, 0x775c, 0x007c, 0xd0fc, 0x0040,
++      0x5baf, 0xa084, 0x0003, 0xa08e, 0x0002, 0x0040, 0x5bb3, 0x87ff,
++      0x00c0, 0x5bae, 0x2009, 0x0041, 0x1078, 0x775c, 0x007c, 0x1078,
++      0x5bc1, 0x0078, 0x5bae, 0x87ff, 0x00c0, 0x5bae, 0x2009, 0x0043,
++      0x1078, 0x775c, 0x0078, 0x5bae, 0x2009, 0x0004, 0x1078, 0x5bc3,
++      0x007c, 0x2009, 0x0001, 0x0d7e, 0x6010, 0xa0ec, 0xf000, 0x0040,
++      0x5bef, 0x2068, 0x6952, 0x6800, 0x6012, 0xa186, 0x0001, 0x00c0,
++      0x5be5, 0x694c, 0xa18c, 0x8100, 0xa18e, 0x8100, 0x00c0, 0x5be5,
++      0x0c7e, 0x2061, 0xa933, 0x6200, 0xd28c, 0x00c0, 0x5be4, 0x6204,
++      0x8210, 0x0048, 0x5be4, 0x6206, 0x0c7f, 0x1078, 0x4a73, 0x6010,
++      0xa06d, 0x077e, 0x2039, 0x0000, 0x10c0, 0x5b27, 0x077f, 0x0d7f,
++      0x007c, 0x157e, 0x0c7e, 0x2061, 0xa933, 0x6000, 0x81ff, 0x0040,
++      0x5bfc, 0xa205, 0x0078, 0x5bfd, 0xa204, 0x6002, 0x0c7f, 0x157f,
++      0x007c, 0x6800, 0xd08c, 0x00c0, 0x5c0d, 0x6808, 0xa005, 0x0040,
++      0x5c0d, 0x8001, 0x680a, 0xa085, 0x0001, 0x007c, 0x20a9, 0x0010,
++      0xa006, 0x8004, 0x8086, 0x818e, 0x00c8, 0x5c17, 0xa200, 0x00f0,
++      0x5c12, 0x8086, 0x818e, 0x007c, 0x157e, 0x20a9, 0x0010, 0xa005,
++      0x0040, 0x5c3d, 0xa11a, 0x00c8, 0x5c3d, 0x8213, 0x818d, 0x0048,
++      0x5c30, 0xa11a, 0x00c8, 0x5c31, 0x00f0, 0x5c25, 0x0078, 0x5c35,
++      0xa11a, 0x2308, 0x8210, 0x00f0, 0x5c25, 0x007e, 0x3200, 0xa084,
++      0xf7ff, 0x2080, 0x007f, 0x157f, 0x007c, 0x007e, 0x3200, 0xa085,
++      0x0800, 0x0078, 0x5c39, 0x127e, 0x2091, 0x2200, 0x2079, 0xa8b1,
++      0x127f, 0x0d7e, 0x2069, 0xa8b1, 0x6803, 0x0005, 0x2069, 0x0004,
++      0x2d04, 0xa085, 0x8001, 0x206a, 0x0d7f, 0x007c, 0x0c7e, 0x6027,
++      0x0001, 0x7804, 0xa084, 0x0007, 0x0079, 0x5c5e, 0x5c68, 0x5c8d,
++      0x5ce8, 0x5c6e, 0x5c8d, 0x5c68, 0x5c66, 0x5c66, 0x1078, 0x1332,
++      0x1078, 0x5acb, 0x1078, 0x62d1, 0x0c7f, 0x007c, 0x62c0, 0x82ff,
++      0x00c0, 0x5c74, 0x0c7f, 0x007c, 0x2011, 0x41dc, 0x1078, 0x5a45,
++      0x7828, 0xa092, 0x00c8, 0x00c8, 0x5c83, 0x8000, 0x782a, 0x1078,
++      0x421b, 0x0078, 0x5c72, 0x1078, 0x41dc, 0x7807, 0x0003, 0x7827,
++      0x0000, 0x782b, 0x0000, 0x0078, 0x5c72, 0x1078, 0x5acb, 0x3c00,
++      0x007e, 0x2011, 0x0209, 0x20e1, 0x4000, 0x2214, 0x007f, 0x20e0,
++      0x82ff, 0x0040, 0x5cab, 0x62c0, 0x82ff, 0x00c0, 0x5cab, 0x782b,
++      0x0000, 0x7824, 0xa065, 0x1040, 0x1332, 0x2009, 0x0013, 0x1078,
++      0x775c, 0x0c7f, 0x007c, 0x3900, 0xa082, 0xa9e3, 0x00c8, 0x5cb2,
++      0x1078, 0x747a, 0x0c7e, 0x7824, 0xa065, 0x1040, 0x1332, 0x7804,
++      0xa086, 0x0004, 0x0040, 0x5d2d, 0x7828, 0xa092, 0x2710, 0x00c8,
++      0x5cc8, 0x8000, 0x782a, 0x0c7f, 0x1078, 0x6e01, 0x0078, 0x5ca9,
++      0x6104, 0xa186, 0x0003, 0x00c0, 0x5cdf, 0x0e7e, 0x2071, 0xa600,
++      0x70d8, 0x0e7f, 0xd08c, 0x0040, 0x5cdf, 0x0c7e, 0x0e7e, 0x2061,
++      0x0100, 0x2071, 0xa600, 0x1078, 0x4224, 0x0e7f, 0x0c7f, 0x1078,
++      0xa5c4, 0x2009, 0x0014, 0x1078, 0x775c, 0x0c7f, 0x0078, 0x5ca9,
++      0x2001, 0xa8cd, 0x2003, 0x0000, 0x62c0, 0x82ff, 0x00c0, 0x5cfc,
++      0x782b, 0x0000, 0x7824, 0xa065, 0x1040, 0x1332, 0x2009, 0x0013,
++      0x1078, 0x77b3, 0x0c7f, 0x007c, 0x0c7e, 0x0d7e, 0x3900, 0xa082,
++      0xa9e3, 0x00c8, 0x5d05, 0x1078, 0x747a, 0x7824, 0xa005, 0x1040,
++      0x1332, 0x781c, 0xa06d, 0x1040, 0x1332, 0x6800, 0xc0dc, 0x6802,
++      0x7924, 0x2160, 0x1078, 0x772d, 0x693c, 0x81ff, 0x1040, 0x1332,
++      0x8109, 0x693e, 0x6854, 0xa015, 0x0040, 0x5d21, 0x7a1e, 0x0078,
++      0x5d23, 0x7918, 0x791e, 0x7807, 0x0000, 0x7827, 0x0000, 0x0d7f,
++      0x0c7f, 0x1078, 0x62d1, 0x0078, 0x5cfa, 0x6104, 0xa186, 0x0002,
++      0x0040, 0x5d38, 0xa186, 0x0004, 0x0040, 0x5d38, 0x0078, 0x5cbc,
++      0x7808, 0xac06, 0x0040, 0x5cbc, 0x1078, 0x61cd, 0x1078, 0x5dd7,
++      0x0c7f, 0x1078, 0x62d1, 0x0078, 0x5ca9, 0x0c7e, 0x6027, 0x0002,
++      0x62c8, 0x82ff, 0x00c0, 0x5d61, 0x62c4, 0x82ff, 0x00c0, 0x5d61,
++      0x793c, 0xa1e5, 0x0000, 0x0040, 0x5d5b, 0x2009, 0x0049, 0x1078,
++      0x775c, 0x0c7f, 0x007c, 0x2011, 0xa8d0, 0x2013, 0x0000, 0x0078,
++      0x5d59, 0x3908, 0xa192, 0xa9e3, 0x00c8, 0x5d68, 0x1078, 0x747a,
++      0x6017, 0x0010, 0x793c, 0x81ff, 0x0040, 0x5d5b, 0x7944, 0xa192,
++      0x7530, 0x00c8, 0x5d85, 0x8108, 0x7946, 0x793c, 0xa188, 0x0007,
++      0x210c, 0xa18e, 0x0006, 0x00c0, 0x5d81, 0x6017, 0x0012, 0x0078,
++      0x5d59, 0x6017, 0x0016, 0x0078, 0x5d59, 0x7848, 0xc085, 0x784a,
++      0x0078, 0x5d59, 0x007e, 0x017e, 0x0c7e, 0x127e, 0x2091, 0x8000,
++      0x600f, 0x0000, 0x2c08, 0x2061, 0xa8b1, 0x6020, 0x8000, 0x6022,
++      0x6010, 0xa005, 0x0040, 0x5da5, 0xa080, 0x0003, 0x2102, 0x6112,
++      0x127f, 0x0c7f, 0x017f, 0x007f, 0x007c, 0x6116, 0x6112, 0x0078,
++      0x5da0, 0x0d7e, 0x2069, 0xa8b1, 0x6000, 0xd0d4, 0x0040, 0x5dbe,
++      0x6820, 0x8000, 0x6822, 0xa086, 0x0001, 0x00c0, 0x5db9, 0x2c00,
++      0x681e, 0x6804, 0xa084, 0x0007, 0x0079, 0x62d9, 0xc0d5, 0x6002,
++      0x6818, 0xa005, 0x0040, 0x5dd0, 0x6056, 0x605b, 0x0000, 0x007e,
++      0x2c00, 0x681a, 0x0d7f, 0x685a, 0x2069, 0xa8b1, 0x0078, 0x5db0,
++      0x6056, 0x605a, 0x2c00, 0x681a, 0x681e, 0x0078, 0x5db0, 0x007e,
++      0x017e, 0x0c7e, 0x127e, 0x2091, 0x8000, 0x600f, 0x0000, 0x2c08,
++      0x2061, 0xa8b1, 0x6020, 0x8000, 0x6022, 0x6008, 0xa005, 0x0040,
++      0x5df2, 0xa080, 0x0003, 0x2102, 0x610a, 0x127f, 0x0c7f, 0x017f,
++      0x007f, 0x007c, 0x610e, 0x610a, 0x0078, 0x5ded, 0x0c7e, 0x600f,
++      0x0000, 0x2c08, 0x2061, 0xa8b1, 0x6034, 0xa005, 0x0040, 0x5e06,
++      0xa080, 0x0003, 0x2102, 0x6136, 0x0c7f, 0x007c, 0x613a, 0x6136,
++      0x0078, 0x5e04, 0x0f7e, 0x0e7e, 0x0d7e, 0x0c7e, 0x067e, 0x057e,
++      0x037e, 0x027e, 0x017e, 0x007e, 0x127e, 0xa02e, 0x2071, 0xa8b1,
++      0x7638, 0x2660, 0x2678, 0x2091, 0x8000, 0x8cff, 0x0040, 0x5e8c,
++      0x6018, 0xa080, 0x0028, 0x2004, 0xa206, 0x00c0, 0x5e87, 0x87ff,
++      0x0040, 0x5e2e, 0x6020, 0xa106, 0x00c0, 0x5e87, 0x703c, 0xac06,
++      0x00c0, 0x5e44, 0x037e, 0x2019, 0x0001, 0x1078, 0x7058, 0x7033,
++      0x0000, 0x703f, 0x0000, 0x7043, 0x0000, 0x7047, 0x0000, 0x704b,
++      0x0000, 0x037f, 0x2029, 0x0001, 0x7038, 0xac36, 0x00c0, 0x5e4a,
++      0x660c, 0x763a, 0x7034, 0xac36, 0x00c0, 0x5e58, 0x2c00, 0xaf36,
++      0x0040, 0x5e56, 0x2f00, 0x7036, 0x0078, 0x5e58, 0x7037, 0x0000,
++      0x660c, 0x067e, 0x2c00, 0xaf06, 0x0040, 0x5e61, 0x7e0e, 0x0078,
++      0x5e62, 0x2678, 0x600f, 0x0000, 0x1078, 0x8d06, 0x0040, 0x5e82,
++      0x6010, 0x2068, 0x601c, 0xa086, 0x0003, 0x00c0, 0x5e9d, 0x6837,
++      0x0103, 0x6b4a, 0x6847, 0x0000, 0x017e, 0x037e, 0x077e, 0x1078,
++      0x8f7d, 0x1078, 0xa4e2, 0x1078, 0x4a73, 0x077f, 0x037f, 0x017f,
++      0x1078, 0x8eb9, 0x1078, 0x8ec6, 0x0c7f, 0x0078, 0x5e1d, 0x2c78,
++      0x600c, 0x2060, 0x0078, 0x5e1d, 0x85ff, 0x0040, 0x5e91, 0x1078,
++      0x639b, 0x127f, 0x007f, 0x017f, 0x027f, 0x037f, 0x057f, 0x067f,
++      0x0c7f, 0x0d7f, 0x0e7f, 0x0f7f, 0x007c, 0x601c, 0xa086, 0x0006,
++      0x00c0, 0x5e6f, 0x017e, 0x037e, 0x077e, 0x1078, 0xa4e2, 0x1078,
++      0xa1ca, 0x077f, 0x037f, 0x017f, 0x0078, 0x5e82, 0x007e, 0x067e,
++      0x0c7e, 0x0d7e, 0x0f7e, 0x2031, 0x0000, 0x127e, 0x2091, 0x8000,
++      0x2079, 0xa8b1, 0x7838, 0xa065, 0x0040, 0x5eef, 0x600c, 0x007e,
++      0x600f, 0x0000, 0x783c, 0xac06, 0x00c0, 0x5ed6, 0x037e, 0x2019,
++      0x0001, 0x1078, 0x7058, 0x7833, 0x0000, 0x783f, 0x0000, 0x7843,
++      0x0000, 0x7847, 0x0000, 0x784b, 0x0000, 0x037f, 0x1078, 0x8d06,
++      0x0040, 0x5eea, 0x6010, 0x2068, 0x601c, 0xa086, 0x0003, 0x00c0,
++      0x5ef8, 0x6837, 0x0103, 0x6b4a, 0x6847, 0x0000, 0x1078, 0x4a73,
++      0x1078, 0x8eb9, 0x1078, 0x8ec6, 0x007f, 0x0078, 0x5ebb, 0x7e3a,
++      0x7e36, 0x127f, 0x0f7f, 0x0d7f, 0x0c7f, 0x067f, 0x007f, 0x007c,
++      0x601c, 0xa086, 0x0006, 0x00c0, 0x5ee1, 0x1078, 0xa1ca, 0x0078,
++      0x5eea, 0x017e, 0x027e, 0x087e, 0x2041, 0x0000, 0x1078, 0x5f1b,
++      0x1078, 0x5fdb, 0x087f, 0x027f, 0x017f, 0x007c, 0x0f7e, 0x127e,
++      0x2079, 0xa8b1, 0x2091, 0x8000, 0x1078, 0x6076, 0x1078, 0x60ec,
++      0x127f, 0x0f7f, 0x007c, 0x0f7e, 0x0e7e, 0x0d7e, 0x0c7e, 0x067e,
++      0x017e, 0x007e, 0x127e, 0x2091, 0x8000, 0x2071, 0xa8b1, 0x7614,
++      0x2660, 0x2678, 0x8cff, 0x0040, 0x5fb5, 0x6018, 0xa080, 0x0028,
++      0x2004, 0xa206, 0x00c0, 0x5fb0, 0x88ff, 0x0040, 0x5f3b, 0x6020,
++      0xa106, 0x00c0, 0x5fb0, 0x7024, 0xac06, 0x00c0, 0x5f6b, 0x2069,
++      0x0100, 0x68c0, 0xa005, 0x0040, 0x5f66, 0x1078, 0x5acb, 0x1078,
++      0x6e0f, 0x68c3, 0x0000, 0x1078, 0x7378, 0x7027, 0x0000, 0x037e,
++      0x2069, 0x0140, 0x6b04, 0xa384, 0x1000, 0x0040, 0x5f5b, 0x6803,
++      0x0100, 0x6803, 0x0000, 0x2069, 0x0100, 0x6824, 0xd084, 0x0040,
++      0x5f63, 0x6827, 0x0001, 0x037f, 0x0078, 0x5f6b, 0x6003, 0x0009,
++      0x630a, 0x0078, 0x5fb0, 0x7014, 0xac36, 0x00c0, 0x5f71, 0x660c,
++      0x7616, 0x7010, 0xac36, 0x00c0, 0x5f7f, 0x2c00, 0xaf36, 0x0040,
++      0x5f7d, 0x2f00, 0x7012, 0x0078, 0x5f7f, 0x7013, 0x0000, 0x660c,
++      0x067e, 0x2c00, 0xaf06, 0x0040, 0x5f88, 0x7e0e, 0x0078, 0x5f89,
++      0x2678, 0x600f, 0x0000, 0x6010, 0x2068, 0x1078, 0x8d06, 0x0040,
++      0x5fa9, 0x601c, 0xa086, 0x0003, 0x00c0, 0x5fbe, 0x6837, 0x0103,
++      0x6b4a, 0x6847, 0x0000, 0x017e, 0x037e, 0x087e, 0x1078, 0x8f7d,
++      0x1078, 0xa4e2, 0x1078, 0x4a73, 0x087f, 0x037f, 0x017f, 0x1078,
++      0x8eb9, 0x1078, 0x8ec6, 0x1078, 0x7233, 0x0c7f, 0x0078, 0x5f2a,
++      0x2c78, 0x600c, 0x2060, 0x0078, 0x5f2a, 0x127f, 0x007f, 0x017f,
++      0x067f, 0x0c7f, 0x0d7f, 0x0e7f, 0x0f7f, 0x007c, 0x601c, 0xa086,
++      0x0006, 0x00c0, 0x5fcf, 0x017e, 0x037e, 0x087e, 0x1078, 0xa4e2,
++      0x1078, 0xa1ca, 0x087f, 0x037f, 0x017f, 0x0078, 0x5fa9, 0x601c,
++      0xa086, 0x0002, 0x00c0, 0x5fa9, 0x6004, 0xa086, 0x0085, 0x0040,
++      0x5f96, 0x0078, 0x5fa9, 0x0c7e, 0x007e, 0x127e, 0x2091, 0x8000,
++      0xa280, 0xa735, 0x2004, 0xa065, 0x0040, 0x6072, 0x0f7e, 0x0e7e,
++      0x0d7e, 0x067e, 0x2071, 0xa8b1, 0x6654, 0x7018, 0xac06, 0x00c0,
++      0x5ff2, 0x761a, 0x701c, 0xac06, 0x00c0, 0x5ffe, 0x86ff, 0x00c0,
++      0x5ffd, 0x7018, 0x701e, 0x0078, 0x5ffe, 0x761e, 0x6058, 0xa07d,
++      0x0040, 0x6003, 0x7e56, 0xa6ed, 0x0000, 0x0040, 0x6009, 0x2f00,
++      0x685a, 0x6057, 0x0000, 0x605b, 0x0000, 0x6000, 0xc0d4, 0xc0dc,
++      0x6002, 0x1078, 0x44d3, 0x0040, 0x606e, 0x7624, 0x86ff, 0x0040,
++      0x605c, 0xa680, 0x0004, 0x2004, 0xad06, 0x00c0, 0x605c, 0x0d7e,
++      0x2069, 0x0100, 0x68c0, 0xa005, 0x0040, 0x6053, 0x1078, 0x5acb,
++      0x1078, 0x6e0f, 0x68c3, 0x0000, 0x1078, 0x7378, 0x7027, 0x0000,
++      0x037e, 0x2069, 0x0140, 0x6b04, 0xa384, 0x1000, 0x0040, 0x603c,
++      0x6803, 0x0100, 0x6803, 0x0000, 0x2069, 0x0100, 0x6824, 0xd084,
++      0x0040, 0x6044, 0x6827, 0x0001, 0x037f, 0x0d7f, 0x0c7e, 0x603c,
++      0xa005, 0x0040, 0x604d, 0x8001, 0x603e, 0x2660, 0x1078, 0x8ec6,
++      0x0c7f, 0x0078, 0x605c, 0x0d7f, 0x0c7e, 0x2660, 0x6003, 0x0009,
++      0x630a, 0x0c7f, 0x0078, 0x6011, 0x8dff, 0x0040, 0x606a, 0x6837,
++      0x0103, 0x6b4a, 0x6847, 0x0000, 0x1078, 0x8f7d, 0x1078, 0xa4e2,
++      0x1078, 0x4a73, 0x1078, 0x7233, 0x0078, 0x6011, 0x067f, 0x0d7f,
++      0x0e7f, 0x0f7f, 0x127f, 0x007f, 0x0c7f, 0x007c, 0x007e, 0x067e,
++      0x0c7e, 0x0d7e, 0x2031, 0x0000, 0x7814, 0xa065, 0x0040, 0x60d0,
++      0x600c, 0x007e, 0x600f, 0x0000, 0x7824, 0xac06, 0x00c0, 0x60b5,
++      0x2069, 0x0100, 0x68c0, 0xa005, 0x0040, 0x60af, 0x1078, 0x5acb,
++      0x1078, 0x6e0f, 0x68c3, 0x0000, 0x1078, 0x7378, 0x7827, 0x0000,
++      0x037e, 0x2069, 0x0140, 0x6b04, 0xa384, 0x1000, 0x0040, 0x60a4,
++      0x6803, 0x0100, 0x6803, 0x0000, 0x2069, 0x0100, 0x6824, 0xd084,
++      0x0040, 0x60ac, 0x6827, 0x0001, 0x037f, 0x0078, 0x60b5, 0x6003,
++      0x0009, 0x630a, 0x2c30, 0x0078, 0x60cd, 0x6010, 0x2068, 0x1078,
++      0x8d06, 0x0040, 0x60c9, 0x601c, 0xa086, 0x0003, 0x00c0, 0x60d7,
++      0x6837, 0x0103, 0x6b4a, 0x6847, 0x0000, 0x1078, 0x4a73, 0x1078,
++      0x8eb9, 0x1078, 0x8ec6, 0x1078, 0x7233, 0x007f, 0x0078, 0x607d,
++      0x7e16, 0x7e12, 0x0d7f, 0x0c7f, 0x067f, 0x007f, 0x007c, 0x601c,
++      0xa086, 0x0006, 0x00c0, 0x60e0, 0x1078, 0xa1ca, 0x0078, 0x60c9,
++      0x601c, 0xa086, 0x0002, 0x00c0, 0x60c9, 0x6004, 0xa086, 0x0085,
++      0x0040, 0x60c0, 0x0078, 0x60c9, 0x007e, 0x067e, 0x0c7e, 0x0d7e,
++      0x7818, 0xa065, 0x0040, 0x615a, 0x6054, 0x007e, 0x6057, 0x0000,
++      0x605b, 0x0000, 0x6000, 0xc0d4, 0xc0dc, 0x6002, 0x1078, 0x44d3,
++      0x0040, 0x6157, 0x7e24, 0x86ff, 0x0040, 0x6149, 0xa680, 0x0004,
++      0x2004, 0xad06, 0x00c0, 0x6149, 0x0d7e, 0x2069, 0x0100, 0x68c0,
++      0xa005, 0x0040, 0x6140, 0x1078, 0x5acb, 0x1078, 0x6e0f, 0x68c3,
++      0x0000, 0x1078, 0x7378, 0x7827, 0x0000, 0x037e, 0x2069, 0x0140,
++      0x6b04, 0xa384, 0x1000, 0x0040, 0x6129, 0x6803, 0x0100, 0x6803,
++      0x0000, 0x2069, 0x0100, 0x6824, 0xd084, 0x0040, 0x6131, 0x6827,
++      0x0001, 0x037f, 0x0d7f, 0x0c7e, 0x603c, 0xa005, 0x0040, 0x613a,
++      0x8001, 0x603e, 0x2660, 0x1078, 0x8ec6, 0x0c7f, 0x0078, 0x6149,
++      0x0d7f, 0x0c7e, 0x2660, 0x6003, 0x0009, 0x630a, 0x0c7f, 0x0078,
++      0x60fe, 0x8dff, 0x0040, 0x6153, 0x6837, 0x0103, 0x6b4a, 0x6847,
++      0x0000, 0x1078, 0x4a73, 0x1078, 0x7233, 0x0078, 0x60fe, 0x007f,
++      0x0078, 0x60f1, 0x781e, 0x781a, 0x0d7f, 0x0c7f, 0x067f, 0x007f,
++      0x007c, 0x0e7e, 0x0d7e, 0x067e, 0x6000, 0xd0dc, 0x0040, 0x6181,
++      0x604c, 0xa06d, 0x0040, 0x6181, 0x6848, 0xa606, 0x00c0, 0x6181,
++      0x2071, 0xa8b1, 0x7024, 0xa035, 0x0040, 0x6181, 0xa080, 0x0004,
++      0x2004, 0xad06, 0x00c0, 0x6181, 0x6000, 0xc0dc, 0x6002, 0x1078,
++      0x6185, 0x067f, 0x0d7f, 0x0e7f, 0x007c, 0x0f7e, 0x2079, 0x0100,
++      0x78c0, 0xa005, 0x00c0, 0x6194, 0x0c7e, 0x2660, 0x6003, 0x0009,
++      0x630a, 0x0c7f, 0x0078, 0x61cb, 0x1078, 0x6e0f, 0x78c3, 0x0000,
++      0x1078, 0x7378, 0x7027, 0x0000, 0x037e, 0x2079, 0x0140, 0x7b04,
++      0xa384, 0x1000, 0x0040, 0x61a8, 0x7803, 0x0100, 0x7803, 0x0000,
++      0x2079, 0x0100, 0x7824, 0xd084, 0x0040, 0x61b0, 0x7827, 0x0001,
++      0x1078, 0x7378, 0x037f, 0x1078, 0x44d3, 0x0c7e, 0x603c, 0xa005,
++      0x0040, 0x61bc, 0x8001, 0x603e, 0x2660, 0x1078, 0x772d, 0x0c7f,
++      0x6837, 0x0103, 0x6b4a, 0x6847, 0x0000, 0x1078, 0x8f7d, 0x1078,
++      0x4a73, 0x1078, 0x7233, 0x0f7f, 0x007c, 0x0e7e, 0x0c7e, 0x2071,
++      0xa8b1, 0x7004, 0xa084, 0x0007, 0x0079, 0x61d6, 0x61e0, 0x61e3,
++      0x61fc, 0x6218, 0x6262, 0x61e0, 0x61e0, 0x61de, 0x1078, 0x1332,
++      0x0c7f, 0x0e7f, 0x007c, 0x7024, 0xa065, 0x0040, 0x61f1, 0x7020,
++      0x8001, 0x7022, 0x600c, 0xa015, 0x0040, 0x61f8, 0x7216, 0x600f,
++      0x0000, 0x7007, 0x0000, 0x7027, 0x0000, 0x0c7f, 0x0e7f, 0x007c,
++      0x7216, 0x7212, 0x0078, 0x61f1, 0x6018, 0x2060, 0x1078, 0x44d3,
++      0x6000, 0xc0dc, 0x6002, 0x7020, 0x8001, 0x7022, 0x0040, 0x620d,
++      0x6054, 0xa015, 0x0040, 0x6214, 0x721e, 0x7007, 0x0000, 0x7027,
++      0x0000, 0x0c7f, 0x0e7f, 0x007c, 0x7218, 0x721e, 0x0078, 0x620d,
++      0x7024, 0xa065, 0x0040, 0x625f, 0x700c, 0xac06, 0x00c0, 0x622f,
++      0x1078, 0x7233, 0x600c, 0xa015, 0x0040, 0x622b, 0x720e, 0x600f,
++      0x0000, 0x0078, 0x625d, 0x720e, 0x720a, 0x0078, 0x625d, 0x7014,
++      0xac06, 0x00c0, 0x6242, 0x1078, 0x7233, 0x600c, 0xa015, 0x0040,
++      0x623e, 0x7216, 0x600f, 0x0000, 0x0078, 0x625d, 0x7216, 0x7212,
++      0x0078, 0x625d, 0x601c, 0xa086, 0x0003, 0x00c0, 0x625d, 0x6018,
++      0x2060, 0x1078, 0x44d3, 0x6000, 0xc0dc, 0x6002, 0x1078, 0x7233,
++      0x701c, 0xa065, 0x0040, 0x625d, 0x6054, 0xa015, 0x0040, 0x625b,
++      0x721e, 0x0078, 0x625d, 0x7218, 0x721e, 0x7027, 0x0000, 0x0c7f,
++      0x0e7f, 0x007c, 0x7024, 0xa065, 0x0040, 0x626f, 0x1078, 0x7233,
++      0x600c, 0xa015, 0x0040, 0x6276, 0x720e, 0x600f, 0x0000, 0x1078,
++      0x7378, 0x7027, 0x0000, 0x0c7f, 0x0e7f, 0x007c, 0x720e, 0x720a,
++      0x0078, 0x626f, 0x0d7e, 0x2069, 0xa8b1, 0x6830, 0xa084, 0x0003,
++      0x0079, 0x6282, 0x6288, 0x628a, 0x62b4, 0x6288, 0x1078, 0x1332,
++      0x0d7f, 0x007c, 0x0c7e, 0x6840, 0xa086, 0x0001, 0x0040, 0x62aa,
++      0x683c, 0xa065, 0x0040, 0x629b, 0x600c, 0xa015, 0x0040, 0x62a6,
++      0x6a3a, 0x600f, 0x0000, 0x6833, 0x0000, 0x683f, 0x0000, 0x2011,
++      0xa8d0, 0x2013, 0x0000, 0x0c7f, 0x0d7f, 0x007c, 0x683a, 0x6836,
++      0x0078, 0x629b, 0x6843, 0x0000, 0x6838, 0xa065, 0x0040, 0x629b,
++      0x6003, 0x0003, 0x0078, 0x629b, 0x0c7e, 0x6843, 0x0000, 0x6847,
++      0x0000, 0x684b, 0x0000, 0x683c, 0xa065, 0x0040, 0x62ce, 0x600c,
++      0xa015, 0x0040, 0x62ca, 0x6a3a, 0x600f, 0x0000, 0x683f, 0x0000,
++      0x0078, 0x62ce, 0x683f, 0x0000, 0x683a, 0x6836, 0x0c7f, 0x0d7f,
++      0x007c, 0x0d7e, 0x2069, 0xa8b1, 0x6804, 0xa084, 0x0007, 0x0079,
++      0x62d9, 0x62e3, 0x638a, 0x638a, 0x638a, 0x638a, 0x638c, 0x638a,
++      0x62e1, 0x1078, 0x1332, 0x6820, 0xa005, 0x00c0, 0x62e9, 0x0d7f,
++      0x007c, 0x0c7e, 0x680c, 0xa065, 0x0040, 0x62f8, 0x6807, 0x0004,
++      0x6826, 0x682b, 0x0000, 0x1078, 0x63d4, 0x0c7f, 0x0d7f, 0x007c,
++      0x6814, 0xa065, 0x0040, 0x6306, 0x6807, 0x0001, 0x6826, 0x682b,
++      0x0000, 0x1078, 0x63d4, 0x0c7f, 0x0d7f, 0x007c, 0x0e7e, 0x037e,
++      0x6a1c, 0xa2f5, 0x0000, 0x0040, 0x6385, 0x704c, 0xa00d, 0x0040,
++      0x6315, 0x7088, 0xa005, 0x0040, 0x632d, 0x7054, 0xa075, 0x0040,
++      0x631e, 0xa20e, 0x0040, 0x6385, 0x0078, 0x6323, 0x6818, 0xa20e,
++      0x0040, 0x6385, 0x2070, 0x704c, 0xa00d, 0x0040, 0x6315, 0x7088,
++      0xa005, 0x00c0, 0x6315, 0x2e00, 0x681e, 0x733c, 0x7038, 0xa302,
++      0x00c8, 0x6315, 0x1078, 0x76fc, 0x0040, 0x6385, 0x8318, 0x733e,
++      0x6112, 0x2e10, 0x621a, 0xa180, 0x0014, 0x2004, 0xa084, 0x00ff,
++      0x6032, 0xa180, 0x0014, 0x2003, 0x0000, 0xa180, 0x0015, 0x2004,
++      0xa08a, 0x199a, 0x0048, 0x634e, 0x2001, 0x1999, 0x8003, 0x801b,
++      0x831b, 0xa318, 0x6316, 0x037f, 0x0f7e, 0x2c78, 0x71a0, 0xd1bc,
++      0x0040, 0x6367, 0x7100, 0xd1f4, 0x0040, 0x6363, 0x7114, 0xa18c,
++      0x00ff, 0x0078, 0x636c, 0x2009, 0x0000, 0x0078, 0x636c, 0xa1e0,
++      0x29c0, 0x2c0c, 0xa18c, 0x00ff, 0x2061, 0x0100, 0x619a, 0x1078,
++      0x6965, 0x7300, 0xc3dd, 0x7302, 0x6807, 0x0002, 0x2f18, 0x6b26,
++      0x682b, 0x0000, 0x781f, 0x0003, 0x7803, 0x0001, 0x7807, 0x0040,
++      0x0f7f, 0x0e7f, 0x0c7f, 0x0d7f, 0x007c, 0x037f, 0x0e7f, 0x0c7f,
++      0x0078, 0x6383, 0x0d7f, 0x007c, 0x0c7e, 0x680c, 0xa065, 0x0040,
++      0x6398, 0x6807, 0x0004, 0x6826, 0x682b, 0x0000, 0x1078, 0x63d4,
++      0x0c7f, 0x0d7f, 0x007c, 0x0f7e, 0x0d7e, 0x2069, 0xa8b1, 0x6830,
++      0xa086, 0x0000, 0x00c0, 0x63bb, 0x6838, 0xa07d, 0x0040, 0x63bb,
++      0x6833, 0x0001, 0x683e, 0x6847, 0x0000, 0x684b, 0x0000, 0x127e,
++      0x0f7e, 0x2091, 0x2200, 0x027f, 0x1078, 0x1d6d, 0x00c0, 0x63be,
++      0x127f, 0x1078, 0x6cb3, 0x0d7f, 0x0f7f, 0x007c, 0x127f, 0x6843,
++      0x0000, 0x7803, 0x0002, 0x780c, 0xa015, 0x0040, 0x63d0, 0x6a3a,
++      0x780f, 0x0000, 0x6833, 0x0000, 0x683f, 0x0000, 0x0078, 0x63bb,
++      0x683a, 0x6836, 0x0078, 0x63ca, 0x601c, 0xa084, 0x000f, 0x1079,
++      0x63da, 0x007c, 0x63e3, 0x63e8, 0x6809, 0x6922, 0x63e8, 0x6809,
++      0x6922, 0x63e3, 0x63e8, 0x1078, 0x61cd, 0x1078, 0x62d1, 0x007c,
++      0x157e, 0x137e, 0x147e, 0x0c7e, 0x0f7e, 0x6004, 0xa08a, 0x0044,
++      0x10c8, 0x1332, 0x6118, 0x2178, 0x79a0, 0xd1bc, 0x0040, 0x6405,
++      0x7900, 0xd1f4, 0x0040, 0x6401, 0x7914, 0xa18c, 0x00ff, 0x0078,
++      0x640a, 0x2009, 0x0000, 0x0078, 0x640a, 0xa1f8, 0x29c0, 0x2f0c,
++      0xa18c, 0x00ff, 0x2c78, 0x2061, 0x0100, 0x619a, 0xa08a, 0x0040,
++      0x00c8, 0x645c, 0x1079, 0x641a, 0x0f7f, 0x0c7f, 0x147f, 0x137f,
++      0x157f, 0x007c, 0x64c2, 0x650a, 0x6532, 0x65cd, 0x65fd, 0x6605,
++      0x662c, 0x663d, 0x664e, 0x6656, 0x666e, 0x6656, 0x66d9, 0x663d,
++      0x66fa, 0x6702, 0x664e, 0x6702, 0x6713, 0x645a, 0x645a, 0x645a,
++      0x645a, 0x645a, 0x645a, 0x645a, 0x645a, 0x645a, 0x645a, 0x645a,
++      0x6eef, 0x6f14, 0x6f29, 0x6f4c, 0x6f6d, 0x662c, 0x645a, 0x662c,
++      0x6656, 0x645a, 0x6532, 0x65cd, 0x645a, 0x749c, 0x6656, 0x645a,
++      0x74bc, 0x6656, 0x645a, 0x645a, 0x64bd, 0x646b, 0x645a, 0x74e1,
++      0x7558, 0x7640, 0x645a, 0x7651, 0x6626, 0x766d, 0x645a, 0x6f82,
++      0x645a, 0x645a, 0x1078, 0x1332, 0x2100, 0x1079, 0x6465, 0x0f7f,
++      0x0c7f, 0x147f, 0x137f, 0x157f, 0x007c, 0x6469, 0x6469, 0x6469,
++      0x649f, 0x1078, 0x1332, 0x0d7e, 0x20a1, 0x020b, 0x1078, 0x6731,
++      0x7810, 0x2068, 0x20a3, 0x2414, 0x20a3, 0x0018, 0x20a3, 0x0800,
++      0x683c, 0x20a2, 0x20a3, 0x0000, 0x20a3, 0x0000, 0x20a3, 0x0000,
++      0x20a3, 0x0000, 0x6850, 0x20a2, 0x6854, 0x20a2, 0x20a3, 0x0000,
++      0x20a3, 0x0000, 0x60c3, 0x0018, 0x1078, 0x6dfb, 0x0d7f, 0x007c,
++      0x0d7e, 0x7818, 0x2068, 0x68a0, 0xa082, 0x007e, 0x0048, 0x649c,
++      0xa085, 0x0001, 0x0d7f, 0x007c, 0xa006, 0x0078, 0x649a, 0x0d7e,
++      0x20a1, 0x020b, 0x1078, 0x6731, 0x20a3, 0x0500, 0x20a3, 0x0000,
++      0x7810, 0xa0e8, 0x000f, 0x6808, 0x20a2, 0x680c, 0x20a2, 0x6810,
++      0x20a2, 0x6814, 0x20a2, 0x6818, 0x20a2, 0x681c, 0x20a2, 0x60c3,
++      0x0010, 0x1078, 0x6dfb, 0x0d7f, 0x007c, 0x6030, 0x609a, 0x1078,
++      0x6dfb, 0x007c, 0x20a1, 0x020b, 0x1078, 0x6731, 0x20a3, 0x5200,
++      0x20a3, 0x0000, 0x0d7e, 0x2069, 0xa652, 0x6804, 0xd084, 0x0040,
++      0x64dc, 0x6828, 0x20a3, 0x0000, 0x017e, 0x1078, 0x2564, 0x21a2,
++      0x017f, 0x0d7f, 0x0078, 0x64e1, 0x0d7f, 0x20a3, 0x0000, 0x20a3,
++      0x0000, 0x20a9, 0x0004, 0x2099, 0xa605, 0x53a6, 0x20a9, 0x0004,
++      0x2099, 0xa601, 0x53a6, 0x7818, 0xa080, 0x0028, 0x2004, 0xa082,
++      0x007f, 0x0048, 0x64fb, 0x2001, 0xa61b, 0x20a6, 0x2001, 0xa61c,
++      0x20a6, 0x0078, 0x6501, 0x20a3, 0x0000, 0x6030, 0xa084, 0x00ff,
++      0x20a2, 0x20a3, 0x0000, 0x20a3, 0x0000, 0x60c3, 0x001c, 0x1078,
++      0x6dfb, 0x007c, 0x20a1, 0x020b, 0x1078, 0x6731, 0x20a3, 0x0500,
++      0x20a3, 0x0000, 0x7818, 0xa080, 0x0028, 0x2004, 0xa082, 0x007f,
++      0x0048, 0x6522, 0x2001, 0xa61b, 0x20a6, 0x2001, 0xa61c, 0x20a6,
++      0x0078, 0x6528, 0x20a3, 0x0000, 0x6030, 0xa084, 0x00ff, 0x20a2,
++      0x20a9, 0x0004, 0x2099, 0xa605, 0x53a6, 0x60c3, 0x0010, 0x1078,
++      0x6dfb, 0x007c, 0x20a1, 0x020b, 0x1078, 0x6731, 0x0c7e, 0x7818,
++      0x2060, 0x2001, 0x0000, 0x1078, 0x4972, 0x0c7f, 0x7818, 0xa080,
++      0x0028, 0x2004, 0xa086, 0x007e, 0x00c0, 0x654d, 0x20a3, 0x0400,
++      0x620c, 0xc2b4, 0x620e, 0x0078, 0x654f, 0x20a3, 0x0300, 0x20a3,
++      0x0000, 0x7818, 0xa080, 0x0028, 0x2004, 0xa086, 0x007e, 0x00c0,
++      0x659c, 0x2099, 0xa88d, 0x33a6, 0x9398, 0x33a6, 0x9398, 0x3304,
++      0xa084, 0x3fff, 0x20a2, 0x9398, 0x33a6, 0x20a3, 0x0000, 0x20a3,
++      0x0000, 0x20a3, 0x0000, 0x20a3, 0x0000, 0x20a9, 0x0004, 0x2099,
++      0xa605, 0x53a6, 0x20a9, 0x0004, 0x2099, 0xa601, 0x53a6, 0x20a9,
++      0x0010, 0x20a3, 0x0000, 0x00f0, 0x6579, 0x2099, 0xa895, 0x3304,
++      0xc0dd, 0x20a2, 0x2001, 0xa672, 0x2004, 0xd0e4, 0x0040, 0x6594,
++      0x20a3, 0x0000, 0x20a3, 0x0000, 0x9398, 0x9398, 0x9398, 0x33a6,
++      0x20a9, 0x0004, 0x0078, 0x6596, 0x20a9, 0x0007, 0x20a3, 0x0000,
++      0x00f0, 0x6596, 0x0078, 0x65bc, 0x2099, 0xa88d, 0x20a9, 0x0008,
++      0x53a6, 0x20a9, 0x0004, 0x2099, 0xa605, 0x53a6, 0x20a9, 0x0004,
++      0x2099, 0xa601, 0x53a6, 0x20a9, 0x0008, 0x20a3, 0x0000, 0x00f0,
++      0x65ad, 0x20a9, 0x0008, 0x20a3, 0x0000, 0x00f0, 0x65b3, 0x2099,
++      0xa895, 0x20a9, 0x0008, 0x53a6, 0x20a9, 0x0008, 0x20a3, 0x0000,
++      0x00f0, 0x65be, 0x20a9, 0x000a, 0x20a3, 0x0000, 0x00f0, 0x65c4,
++      0x60c3, 0x0074, 0x1078, 0x6dfb, 0x007c, 0x20a1, 0x020b, 0x1078,
++      0x6731, 0x20a3, 0x2010, 0x20a3, 0x0014, 0x20a3, 0x0800, 0x20a3,
++      0x2000, 0xa006, 0x20a2, 0x20a2, 0x20a2, 0x20a2, 0x20a2, 0x0f7e,
++      0x2079, 0xa652, 0x7904, 0x0f7f, 0xd1ac, 0x00c0, 0x65e9, 0xa085,
++      0x0020, 0xd1a4, 0x0040, 0x65ee, 0xa085, 0x0010, 0xa085, 0x0002,
++      0x0d7e, 0x0078, 0x66b7, 0x20a2, 0x20a3, 0x0000, 0x20a3, 0x0000,
++      0x60c3, 0x0014, 0x1078, 0x6dfb, 0x007c, 0x20a1, 0x020b, 0x1078,
++      0x6731, 0x20a3, 0x5000, 0x0078, 0x654f, 0x20a1, 0x020b, 0x1078,
++      0x6731, 0x20a3, 0x2110, 0x20a3, 0x0014, 0x20a3, 0x0000, 0x20a3,
++      0x0000, 0x20a3, 0x0000, 0x20a3, 0x0000, 0x20a3, 0x0000, 0x20a3,
++      0x0000, 0x20a3, 0x0000, 0x20a3, 0x0000, 0x20a3, 0x0000, 0x20a3,
++      0x0000, 0x60c3, 0x0014, 0x1078, 0x6dfb, 0x007c, 0x20a1, 0x020b,
++      0x1078, 0x67b9, 0x0078, 0x6630, 0x20a1, 0x020b, 0x1078, 0x67c2,
++      0x20a3, 0x0200, 0x20a3, 0x0000, 0x20a3, 0x0000, 0x20a3, 0x0000,
++      0x60c3, 0x0004, 0x1078, 0x6dfb, 0x007c, 0x20a1, 0x020b, 0x1078,
++      0x67c2, 0x20a3, 0x0100, 0x20a3, 0x0000, 0x20a3, 0x0003, 0x20a3,
++      0x2a00, 0x60c3, 0x0008, 0x1078, 0x6dfb, 0x007c, 0x20a1, 0x020b,
++      0x1078, 0x67c2, 0x20a3, 0x0200, 0x0078, 0x654f, 0x20a1, 0x020b,
++      0x1078, 0x67c2, 0x20a3, 0x0100, 0x20a3, 0x0000, 0x7828, 0xa005,
++      0x0040, 0x6665, 0x20a2, 0x0078, 0x6667, 0x20a3, 0x0003, 0x7810,
++      0x20a2, 0x60c3, 0x0008, 0x1078, 0x6dfb, 0x007c, 0x0d7e, 0x20a1,
++      0x020b, 0x1078, 0x67c2, 0x20a3, 0x0210, 0x20a3, 0x0014, 0x20a3,
++      0x0800, 0x7818, 0x2068, 0x6894, 0xa086, 0x0014, 0x00c0, 0x6694,
++      0x6998, 0xa184, 0xc000, 0x00c0, 0x6690, 0xd1ec, 0x0040, 0x668c,
++      0x20a3, 0x2100, 0x0078, 0x6696, 0x20a3, 0x0100, 0x0078, 0x6696,
++      0x20a3, 0x0400, 0x0078, 0x6696, 0x20a3, 0x0700, 0xa006, 0x20a2,
++      0x20a2, 0x20a2, 0x20a2, 0x20a2, 0x0f7e, 0x2079, 0xa652, 0x7904,
++      0x0f7f, 0xd1ac, 0x00c0, 0x66a6, 0xa085, 0x0020, 0xd1a4, 0x0040,
++      0x66ab, 0xa085, 0x0010, 0x2009, 0xa674, 0x210c, 0xd184, 0x0040,
++      0x66b5, 0x699c, 0xd18c, 0x0040, 0x66b7, 0xa085, 0x0002, 0x027e,
++      0x2009, 0xa672, 0x210c, 0xd1e4, 0x0040, 0x66c5, 0xc0c5, 0xa094,
++      0x0030, 0xa296, 0x0010, 0x0040, 0x66cf, 0xd1ec, 0x0040, 0x66cf,
++      0xa094, 0x0030, 0xa296, 0x0010, 0x0040, 0x66cf, 0xc0bd, 0x027f,
++      0x20a2, 0x20a2, 0x20a2, 0x60c3, 0x0014, 0x1078, 0x6dfb, 0x0d7f,
++      0x007c, 0x20a1, 0x020b, 0x1078, 0x67c2, 0x20a3, 0x0210, 0x20a3,
++      0x0014, 0x20a3, 0x0000, 0x20a3, 0x0100, 0x20a3, 0x0000, 0x20a3,
++      0x0000, 0x20a3, 0x0000, 0x20a3, 0x0000, 0x20a3, 0x0000, 0x20a3,
++      0x0000, 0x20a3, 0x0000, 0x20a3, 0x0000, 0x60c3, 0x0014, 0x1078,
++      0x6dfb, 0x007c, 0x20a1, 0x020b, 0x1078, 0x67c2, 0x20a3, 0x0200,
++      0x0078, 0x64c8, 0x20a1, 0x020b, 0x1078, 0x67c2, 0x20a3, 0x0100,
++      0x20a3, 0x0000, 0x20a3, 0x0003, 0x20a3, 0x2a00, 0x60c3, 0x0008,
++      0x1078, 0x6dfb, 0x007c, 0x20e1, 0x9080, 0x20e1, 0x4000, 0x20a1,
++      0x020b, 0x1078, 0x67c2, 0x20a3, 0x0100, 0x20a3, 0x0000, 0x20a3,
++      0x000b, 0x20a3, 0x0000, 0x60c3, 0x0008, 0x1078, 0x6dfb, 0x007c,
++      0x027e, 0x037e, 0x047e, 0x2019, 0x3200, 0x2021, 0x0800, 0x0078,
++      0x6738, 0x027e, 0x037e, 0x047e, 0x2019, 0x2200, 0x2021, 0x0100,
++      0x20e1, 0x9080, 0x20e1, 0x4000, 0x7818, 0xa080, 0x0028, 0x2014,
++      0xa286, 0x007e, 0x00c0, 0x674b, 0xa385, 0x00ff, 0x20a2, 0x20a3,
++      0xfffe, 0x0078, 0x6780, 0xa286, 0x007f, 0x00c0, 0x6757, 0x0d7e,
++      0xa385, 0x00ff, 0x20a2, 0x20a3, 0xfffd, 0x0078, 0x676e, 0xd2bc,
++      0x0040, 0x6776, 0xa286, 0x0080, 0x0d7e, 0x00c0, 0x6766, 0xa385,
++      0x00ff, 0x20a2, 0x20a3, 0xfffc, 0x0078, 0x676e, 0xa2e8, 0xa735,
++      0x2d6c, 0x6810, 0xa305, 0x20a2, 0x6814, 0x20a2, 0x2069, 0xa61b,
++      0x2da6, 0x8d68, 0x2da6, 0x0d7f, 0x0078, 0x6784, 0x0d7e, 0xa2e8,
++      0xa735, 0x2d6c, 0x6810, 0xa305, 0x20a2, 0x6814, 0x20a2, 0x0d7f,
++      0x20a3, 0x0000, 0x6230, 0x22a2, 0xa485, 0x0029, 0x20a2, 0x047f,
++      0x037f, 0x20a3, 0x0000, 0x1078, 0x6dea, 0x22a2, 0x20a3, 0x0000,
++      0x2fa2, 0x20a3, 0xffff, 0x20a3, 0x0000, 0x20a3, 0x0000, 0x027f,
++      0x007c, 0x027e, 0x20e1, 0x9080, 0x20e1, 0x4000, 0x20a3, 0x02ff,
++      0x2011, 0xfffc, 0x22a2, 0x0d7e, 0x2069, 0xa61b, 0x2da6, 0x8d68,
++      0x2da6, 0x0d7f, 0x20a3, 0x2029, 0x20a3, 0x0000, 0x0078, 0x678b,
++      0x20a3, 0x0100, 0x20a3, 0x0000, 0x20a3, 0xfc02, 0x20a3, 0x0000,
++      0x007c, 0x027e, 0x037e, 0x047e, 0x2019, 0x3300, 0x2021, 0x0800,
++      0x0078, 0x67c9, 0x027e, 0x037e, 0x047e, 0x2019, 0x2300, 0x2021,
++      0x0100, 0x20e1, 0x9080, 0x20e1, 0x4000, 0x7818, 0xa080, 0x0028,
++      0x2004, 0xa092, 0x007e, 0x0048, 0x67e6, 0x0d7e, 0xa0e8, 0xa735,
++      0x2d6c, 0x6810, 0xa305, 0x20a2, 0x6814, 0x20a2, 0x2069, 0xa61b,
++      0x2da6, 0x8d68, 0x2da6, 0x0d7f, 0x0078, 0x67f4, 0x0d7e, 0xa0e8,
++      0xa735, 0x2d6c, 0x6810, 0xa305, 0x20a2, 0x6814, 0x20a2, 0x0d7f,
++      0x20a3, 0x0000, 0x6230, 0x22a2, 0xa485, 0x0098, 0x20a2, 0x20a3,
++      0x0000, 0x047f, 0x037f, 0x1078, 0x6dea, 0x22a2, 0x20a3, 0x0000,
++      0x7a08, 0x22a2, 0x2fa2, 0x20a3, 0x0000, 0x20a3, 0x0000, 0x027f,
++      0x007c, 0x0c7e, 0x0f7e, 0x6004, 0xa08a, 0x0085, 0x1048, 0x1332,
++      0xa08a, 0x008c, 0x10c8, 0x1332, 0x6118, 0x2178, 0x79a0, 0xd1bc,
++      0x0040, 0x6827, 0x7900, 0xd1f4, 0x0040, 0x6823, 0x7914, 0xa18c,
++      0x00ff, 0x0078, 0x682c, 0x2009, 0x0000, 0x0078, 0x682c, 0xa1f8,
++      0x29c0, 0x2f0c, 0xa18c, 0x00ff, 0x2c78, 0x2061, 0x0100, 0x619a,
++      0xa082, 0x0085, 0x1079, 0x6837, 0x0f7f, 0x0c7f, 0x007c, 0x6840,
++      0x684b, 0x6866, 0x683e, 0x683e, 0x683e, 0x6840, 0x1078, 0x1332,
++      0x147e, 0x20a1, 0x020b, 0x1078, 0x6879, 0x60c3, 0x0000, 0x1078,
++      0x6dfb, 0x147f, 0x007c, 0x147e, 0x20a1, 0x020b, 0x1078, 0x68ad,
++      0x20a3, 0x0000, 0x20a3, 0x0000, 0x7808, 0x20a2, 0x7810, 0x20a2,
++      0x20a3, 0x0000, 0x20a3, 0xffff, 0x20a3, 0x0000, 0x20a3, 0x0000,
++      0x60c3, 0x000c, 0x1078, 0x6dfb, 0x147f, 0x007c, 0x147e, 0x20a1,
++      0x020b, 0x1078, 0x68ee, 0x20a3, 0x0003, 0x20a3, 0x0300, 0x20a3,
++      0x0000, 0x20a3, 0x0000, 0x60c3, 0x0004, 0x1078, 0x6dfb, 0x147f,
++      0x007c, 0x027e, 0x20e1, 0x9080, 0x20e1, 0x4000, 0x7818, 0xa080,
++      0x0028, 0x2004, 0xa092, 0x007e, 0x0048, 0x6898, 0x0d7e, 0xa0e8,
++      0xa735, 0x2d6c, 0x6810, 0xa085, 0x8100, 0x20a2, 0x6814, 0x20a2,
++      0x2069, 0xa61b, 0x2da6, 0x8d68, 0x2da6, 0x0d7f, 0x0078, 0x68a7,
++      0x0d7e, 0xa0e8, 0xa735, 0x2d6c, 0x6810, 0xa085, 0x8100, 0x20a2,
++      0x6814, 0x20a2, 0x0d7f, 0x20a3, 0x0000, 0x6230, 0x22a2, 0x20a3,
++      0x0009, 0x20a3, 0x0000, 0x0078, 0x678b, 0x027e, 0x20e1, 0x9080,
++      0x20e1, 0x4000, 0x7818, 0xa080, 0x0028, 0x2004, 0xa092, 0x007e,
++      0x0048, 0x68cc, 0x0d7e, 0xa0e8, 0xa735, 0x2d6c, 0x6810, 0xa085,
++      0x8400, 0x20a2, 0x6814, 0x20a2, 0x2069, 0xa61b, 0x2da6, 0x8d68,
++      0x2da6, 0x0d7f, 0x0078, 0x68db, 0x0d7e, 0xa0e8, 0xa735, 0x2d6c,
++      0x6810, 0xa085, 0x8400, 0x20a2, 0x6814, 0x20a2, 0x0d7f, 0x20a3,
++      0x0000, 0x6230, 0x22a2, 0x20a3, 0x0099, 0x20a3, 0x0000, 0x1078,
++      0x6dea, 0x22a2, 0x20a3, 0x0000, 0x7a08, 0x22a2, 0x7a10, 0x22a2,
++      0x20a3, 0x0000, 0x20a3, 0x0000, 0x027f, 0x007c, 0x027e, 0x20e1,
++      0x9080, 0x20e1, 0x4000, 0x7818, 0xa080, 0x0028, 0x2004, 0xa092,
++      0x007e, 0x0048, 0x690d, 0x0d7e, 0xa0e8, 0xa735, 0x2d6c, 0x6810,
++      0xa085, 0x8500, 0x20a2, 0x6814, 0x20a2, 0x2069, 0xa61b, 0x2da6,
++      0x8d68, 0x2da6, 0x0d7f, 0x0078, 0x691c, 0x0d7e, 0xa0e8, 0xa735,
++      0x2d6c, 0x6810, 0xa085, 0x8500, 0x20a2, 0x6814, 0x20a2, 0x0d7f,
++      0x20a3, 0x0000, 0x6230, 0x22a2, 0x20a3, 0x0099, 0x20a3, 0x0000,
++      0x0078, 0x68df, 0x0c7e, 0x0f7e, 0x2c78, 0x7804, 0xa08a, 0x0040,
++      0x1048, 0x1332, 0xa08a, 0x0053, 0x10c8, 0x1332, 0x7918, 0x2160,
++      0x61a0, 0xd1bc, 0x0040, 0x6941, 0x6100, 0xd1f4, 0x0040, 0x693d,
++      0x6114, 0xa18c, 0x00ff, 0x0078, 0x6946, 0x2009, 0x0000, 0x0078,
++      0x6946, 0xa1e0, 0x29c0, 0x2c0c, 0xa18c, 0x00ff, 0x2061, 0x0100,
++      0x619a, 0xa082, 0x0040, 0x1079, 0x6950, 0x0f7f, 0x0c7f, 0x007c,
++      0x6965, 0x6a73, 0x6a14, 0x6c27, 0x6963, 0x6963, 0x6963, 0x6963,
++      0x6963, 0x6963, 0x6963, 0x714c, 0x715d, 0x716e, 0x717f, 0x6963,
++      0x767e, 0x6963, 0x713b, 0x1078, 0x1332, 0x0d7e, 0x157e, 0x147e,
++      0x780b, 0xffff, 0x20a1, 0x020b, 0x1078, 0x69d0, 0x7910, 0x2168,
++      0x6948, 0x7922, 0x21a2, 0xa016, 0x22a2, 0x22a2, 0x22a2, 0x694c,
++      0xa184, 0x000f, 0x00c0, 0x6980, 0x2001, 0x0005, 0x0078, 0x698a,
++      0xd184, 0x0040, 0x6987, 0x2001, 0x0004, 0x0078, 0x698a, 0xa084,
++      0x0006, 0x8004, 0x017e, 0x2008, 0x7830, 0xa084, 0x00ff, 0x8007,
++      0xa105, 0x017f, 0x20a2, 0xd1ac, 0x0040, 0x699a, 0x20a3, 0x0002,
++      0x0078, 0x69a6, 0xd1b4, 0x0040, 0x69a1, 0x20a3, 0x0001, 0x0078,
++      0x69a6, 0x20a3, 0x0000, 0x2230, 0x0078, 0x69a8, 0x6a80, 0x6e7c,
++      0x20a9, 0x0008, 0xad80, 0x0017, 0x200c, 0x810f, 0x21a2, 0x8000,
++      0x00f0, 0x69ac, 0x22a2, 0x26a2, 0x60c3, 0x0020, 0x20e1, 0x9080,
++      0x6014, 0xa084, 0x0004, 0xa085, 0x0009, 0x6016, 0x2001, 0xa8cd,
++      0x2003, 0x07d0, 0x2001, 0xa8cc, 0x2003, 0x0009, 0x2001, 0xa8d2,
++      0x2003, 0x0002, 0x1078, 0x158c, 0x147f, 0x157f, 0x0d7f, 0x007c,
++      0x20e1, 0x9080, 0x20e1, 0x4000, 0x7a18, 0xa280, 0x0023, 0x2014,
++      0x8210, 0xa294, 0x00ff, 0x2202, 0x8217, 0x7818, 0xa080, 0x0028,
++      0x2004, 0xd0bc, 0x0040, 0x69f6, 0x0d7e, 0xa0e8, 0xa735, 0x2d6c,
++      0x6810, 0xa085, 0x0600, 0x20a2, 0x6814, 0x20a2, 0x2069, 0xa61b,
++      0x2da6, 0x8d68, 0x2da6, 0x0d7f, 0x0078, 0x6a05, 0x0d7e, 0xa0e8,
++      0xa735, 0x2d6c, 0x6810, 0xa085, 0x0600, 0x20a2, 0x6814, 0x20a2,
++      0x0d7f, 0x20a3, 0x0000, 0x6130, 0x21a2, 0x20a3, 0x0829, 0x20a3,
++      0x0000, 0x22a2, 0x20a3, 0x0000, 0x2fa2, 0x20a3, 0xffff, 0x20a3,
++      0x0000, 0x20a3, 0x0000, 0x007c, 0x0d7e, 0x157e, 0x137e, 0x147e,
++      0x20a1, 0x020b, 0x1078, 0x6a34, 0x7810, 0x2068, 0x6860, 0x20a2,
++      0x685c, 0x20a2, 0x6880, 0x20a2, 0x687c, 0x20a2, 0xa006, 0x20a2,
++      0x20a2, 0x20a2, 0x20a2, 0x60c3, 0x000c, 0x1078, 0x6dfb, 0x147f,
++      0x137f, 0x157f, 0x0d7f, 0x007c, 0x027e, 0x20e1, 0x9080, 0x20e1,
++      0x4000, 0x7818, 0xa080, 0x0028, 0x2004, 0xd0bc, 0x0040, 0x6a52,
++      0x0d7e, 0xa0e8, 0xa735, 0x2d6c, 0x6810, 0xa085, 0x0500, 0x20a2,
++      0x6814, 0x20a2, 0x2069, 0xa61b, 0x2da6, 0x8d68, 0x2da6, 0x0d7f,
++      0x0078, 0x6a61, 0x0d7e, 0xa0e8, 0xa735, 0x2d6c, 0x6810, 0xa085,
++      0x0500, 0x20a2, 0x6814, 0x20a2, 0x0d7f, 0x20a3, 0x0000, 0x6230,
++      0x22a2, 0x20a3, 0x0889, 0x20a3, 0x0000, 0x1078, 0x6dea, 0x22a2,
++      0x20a3, 0x0000, 0x7a08, 0x22a2, 0x2fa2, 0x20a3, 0x0000, 0x20a3,
++      0x0000, 0x027f, 0x007c, 0x0d7e, 0x157e, 0x137e, 0x147e, 0x7810,
++      0xa0ec, 0xf000, 0x0040, 0x6a8b, 0xa06d, 0x1078, 0x495f, 0x0040,
++      0x6a8b, 0x684c, 0xa084, 0x2020, 0xa086, 0x2020, 0x00c0, 0x6a8b,
++      0x7824, 0xc0cd, 0x7826, 0x20a1, 0x020b, 0x1078, 0x6be0, 0xa016,
++      0x22a2, 0x22a2, 0x22a2, 0x22a2, 0x22a2, 0x7810, 0xa084, 0xf000,
++      0x00c0, 0x6aa2, 0x7810, 0xa084, 0x0700, 0x8007, 0x1079, 0x6aaa,
++      0x0078, 0x6aa5, 0xa006, 0x1079, 0x6aaa, 0x147f, 0x137f, 0x157f,
++      0x0d7f, 0x007c, 0x6ab4, 0x6b4c, 0x6b57, 0x6b81, 0x6b95, 0x6bb1,
++      0x6bbc, 0x6ab2, 0x1078, 0x1332, 0x017e, 0x037e, 0x694c, 0xa18c,
++      0x0003, 0x0040, 0x6abf, 0xa186, 0x0003, 0x00c0, 0x6ace, 0x6b78,
++      0x7824, 0xd0cc, 0x0040, 0x6ac5, 0xc3e5, 0x23a2, 0x6868, 0x20a2,
++      0x6864, 0x20a2, 0x037f, 0x017f, 0x0078, 0x6b8c, 0xa186, 0x0001,
++      0x10c0, 0x1332, 0x6b78, 0x7824, 0xd0cc, 0x0040, 0x6ad8, 0xc3e5,
++      0x23a2, 0x6868, 0x20a2, 0x6864, 0x20a2, 0x22a2, 0x6874, 0x20a2,
++      0x22a2, 0x687c, 0x20a2, 0x2009, 0x0018, 0xa384, 0x0300, 0x0040,
++      0x6b46, 0xd3c4, 0x0040, 0x6aee, 0x687c, 0xa108, 0xd3cc, 0x0040,
++      0x6af3, 0x6874, 0xa108, 0x157e, 0x20a9, 0x000d, 0xad80, 0x0020,
++      0x201c, 0x831f, 0x23a2, 0x8000, 0x00f0, 0x6af8, 0x157f, 0x22a2,
++      0x22a2, 0x22a2, 0xa184, 0x0003, 0x0040, 0x6b46, 0x20a1, 0x020b,
++      0x20e1, 0x9080, 0x20e1, 0x4000, 0x007e, 0x7818, 0xa080, 0x0028,
++      0x2004, 0xd0bc, 0x0040, 0x6b26, 0x0d7e, 0xa0e8, 0xa735, 0x2d6c,
++      0x6810, 0xa085, 0x0700, 0x20a2, 0x6814, 0x20a2, 0x2069, 0xa61b,
++      0x2da6, 0x8d68, 0x2da6, 0x0d7f, 0x0078, 0x6b35, 0x0d7e, 0xa0e8,
++      0xa735, 0x2d6c, 0x6810, 0xa085, 0x0700, 0x20a2, 0x6814, 0x20a2,
++      0x0d7f, 0x20a3, 0x0000, 0x6230, 0x22a2, 0x007f, 0x7b24, 0xd3cc,
++      0x0040, 0x6b3e, 0x20a3, 0x0889, 0x0078, 0x6b40, 0x20a3, 0x0898,
++      0x20a2, 0x1078, 0x6dea, 0x22a2, 0x20a3, 0x0000, 0x61c2, 0x037f,
++      0x017f, 0x1078, 0x6dfb, 0x007c, 0x2011, 0x0008, 0x7824, 0xd0cc,
++      0x0040, 0x6b53, 0xc2e5, 0x22a2, 0xa016, 0x0078, 0x6b8a, 0x2011,
++      0x0302, 0x7824, 0xd0cc, 0x0040, 0x6b5e, 0xc2e5, 0x22a2, 0xa016,
++      0x22a2, 0x22a2, 0x22a2, 0x20a3, 0x0012, 0x22a2, 0x20a3, 0x0008,
++      0x22a2, 0x22a2, 0x22a2, 0x22a2, 0x20a3, 0x7000, 0x20a3, 0x0500,
++      0x22a2, 0x20a3, 0x000a, 0x22a2, 0x22a2, 0x20a3, 0x2500, 0x22a2,
++      0x22a2, 0x22a2, 0x22a2, 0x22a2, 0x60c3, 0x0032, 0x1078, 0x6dfb,
++      0x007c, 0x2011, 0x0028, 0x7824, 0xd0cc, 0x0040, 0x6b88, 0xc2e5,
++      0x22a2, 0xa016, 0x22a2, 0x22a2, 0x22a2, 0x22a2, 0x22a2, 0x22a2,
++      0x60c3, 0x0018, 0x1078, 0x6dfb, 0x007c, 0x2011, 0x0100, 0x7824,
++      0xd0cc, 0x0040, 0x6b9c, 0xc2e5, 0x22a2, 0xa016, 0x22a2, 0x22a2,
++      0x22a2, 0x22a2, 0x22a2, 0x20a3, 0x0008, 0x22a2, 0x7834, 0xa084,
++      0x00ff, 0x20a2, 0x22a2, 0x22a2, 0x60c3, 0x0020, 0x1078, 0x6dfb,
++      0x007c, 0x2011, 0x0008, 0x7824, 0xd0cc, 0x0040, 0x6bb8, 0xc2e5,
++      0x22a2, 0xa016, 0x0078, 0x6b8a, 0x037e, 0x7b10, 0xa384, 0xff00,
++      0x7812, 0xa384, 0x00ff, 0x8001, 0x00c0, 0x6bcf, 0x7824, 0xd0cc,
++      0x0040, 0x6bcb, 0xc2e5, 0x22a2, 0x037f, 0x0078, 0x6b8a, 0x047e,
++      0x2021, 0x0800, 0x007e, 0x7824, 0xd0cc, 0x007f, 0x0040, 0x6bd9,
++      0xc4e5, 0x24a2, 0x047f, 0x22a2, 0x20a2, 0x037f, 0x0078, 0x6b8c,
++      0x027e, 0x20e1, 0x9080, 0x20e1, 0x4000, 0x7818, 0xa080, 0x0028,
++      0x2004, 0xd0bc, 0x0040, 0x6bfe, 0x0d7e, 0xa0e8, 0xa735, 0x2d6c,
++      0x6810, 0xa085, 0x0700, 0x20a2, 0x6814, 0x20a2, 0x2069, 0xa61b,
++      0x2da6, 0x8d68, 0x2da6, 0x0d7f, 0x0078, 0x6c0d, 0x0d7e, 0xa0e8,
++      0xa735, 0x2d6c, 0x6810, 0xa085, 0x0700, 0x20a2, 0x6814, 0x20a2,
++      0x0d7f, 0x20a3, 0x0000, 0x6230, 0x22a2, 0x7824, 0xd0cc, 0x0040,
++      0x6c15, 0x20a3, 0x0889, 0x0078, 0x6c17, 0x20a3, 0x0898, 0x20a3,
++      0x0000, 0x1078, 0x6dea, 0x22a2, 0x20a3, 0x0000, 0x7a08, 0x22a2,
++      0x2fa2, 0x20a3, 0x0000, 0x20a3, 0x0000, 0x027f, 0x007c, 0x0d7e,
++      0x157e, 0x137e, 0x147e, 0x017e, 0x037e, 0x7810, 0xa084, 0x0700,
++      0x8007, 0x1079, 0x6c3a, 0x037f, 0x017f, 0x147f, 0x137f, 0x157f,
++      0x0d7f, 0x007c, 0x6c42, 0x6c42, 0x6c44, 0x6c42, 0x6c42, 0x6c42,
++      0x6c69, 0x6c42, 0x1078, 0x1332, 0x7910, 0xa18c, 0xf8ff, 0xa18d,
++      0x0600, 0x7912, 0x20a1, 0x020b, 0x2009, 0x0003, 0x1078, 0x6c73,
++      0x0d7e, 0x2069, 0xa652, 0x6804, 0xd0bc, 0x0040, 0x6c5e, 0x682c,
++      0xa084, 0x00ff, 0x8007, 0x20a2, 0x0078, 0x6c60, 0x20a3, 0x3f00,
++      0x0d7f, 0x22a2, 0x22a2, 0x22a2, 0x60c3, 0x0001, 0x1078, 0x6dfb,
++      0x007c, 0x20a1, 0x020b, 0x2009, 0x0003, 0x1078, 0x6c73, 0x20a3,
++      0x7f00, 0x0078, 0x6c61, 0x027e, 0x20e1, 0x9080, 0x20e1, 0x4000,
++      0x7818, 0xa080, 0x0028, 0x2004, 0xd0bc, 0x0040, 0x6c91, 0x0d7e,
++      0xa0e8, 0xa735, 0x2d6c, 0x6810, 0xa085, 0x0100, 0x20a2, 0x6814,
++      0x20a2, 0x2069, 0xa61b, 0x2da6, 0x8d68, 0x2da6, 0x0d7f, 0x0078,
++      0x6ca0, 0x0d7e, 0xa0e8, 0xa735, 0x2d6c, 0x6810, 0xa085, 0x0100,
++      0x20a2, 0x6814, 0x20a2, 0x0d7f, 0x20a3, 0x0000, 0x6230, 0x22a2,
++      0x20a3, 0x0888, 0xa18d, 0x0008, 0x21a2, 0x1078, 0x6dea, 0x22a2,
++      0x20a3, 0x0000, 0x7a08, 0x22a2, 0x2fa2, 0x20a3, 0x0000, 0x20a3,
++      0x0000, 0x027f, 0x007c, 0x0e7e, 0x0d7e, 0x0c7e, 0x057e, 0x047e,
++      0x037e, 0x2061, 0x0100, 0x2071, 0xa600, 0x6130, 0x7818, 0x2068,
++      0x68a0, 0x2028, 0xd0bc, 0x00c0, 0x6cca, 0x6910, 0x6a14, 0x6430,
++      0x0078, 0x6cce, 0x6910, 0x6a14, 0x736c, 0x7470, 0x781c, 0xa086,
++      0x0006, 0x0040, 0x6d2d, 0xd5bc, 0x0040, 0x6cde, 0xa185, 0x0100,
++      0x6062, 0x6266, 0x636a, 0x646e, 0x0078, 0x6ce5, 0xa185, 0x0100,
++      0x6062, 0x6266, 0x606b, 0x0000, 0x646e, 0x6073, 0x0809, 0x6077,
++      0x0008, 0x688c, 0x8000, 0xa084, 0x00ff, 0x688e, 0x8007, 0x607a,
++      0x607f, 0x0000, 0x2f00, 0x6082, 0x7808, 0x6086, 0x7810, 0x2070,
++      0x7014, 0x608a, 0x7010, 0x608e, 0x700c, 0x60c6, 0x7008, 0x60ca,
++      0x686c, 0x60ce, 0x60ab, 0x0036, 0x60af, 0x95d5, 0x60d7, 0x0000,
++      0xa582, 0x0080, 0x0048, 0x6d17, 0x6a00, 0xd2f4, 0x0040, 0x6d15,
++      0x6a14, 0xa294, 0x00ff, 0x0078, 0x6d17, 0x2011, 0x0000, 0x629e,
++      0x6017, 0x0016, 0x2009, 0x07d0, 0x60c4, 0xa084, 0xfff0, 0xa005,
++      0x0040, 0x6d24, 0x2009, 0x1b58, 0x1078, 0x5ad0, 0x037f, 0x047f,
++      0x057f, 0x0c7f, 0x0d7f, 0x0e7f, 0x007c, 0x7810, 0x2070, 0x704c,
++      0xa084, 0x0003, 0xa086, 0x0002, 0x0040, 0x6d85, 0xd5bc, 0x0040,
++      0x6d41, 0xa185, 0x0100, 0x6062, 0x6266, 0x636a, 0x646e, 0x0078,
++      0x6d48, 0xa185, 0x0100, 0x6062, 0x6266, 0x606b, 0x0000, 0x646e,
++      0x6073, 0x0880, 0x6077, 0x0008, 0x688c, 0x8000, 0xa084, 0x00ff,
++      0x688e, 0x8007, 0x607a, 0x607f, 0x0000, 0x2f00, 0x6086, 0x7808,
++      0x6082, 0x7060, 0x608a, 0x705c, 0x608e, 0x7080, 0x60c6, 0x707c,
++      0x60ca, 0x707c, 0x792c, 0xa108, 0x792e, 0x7080, 0x7928, 0xa109,
++      0x792a, 0x686c, 0x60ce, 0x60ab, 0x0036, 0x60af, 0x95d5, 0x60d7,
++      0x0000, 0xa582, 0x0080, 0x0048, 0x6d80, 0x6a00, 0xd2f4, 0x0040,
++      0x6d7e, 0x6a14, 0xa294, 0x00ff, 0x0078, 0x6d80, 0x2011, 0x0000,
++      0x629e, 0x6017, 0x0012, 0x0078, 0x6d1a, 0xd5bc, 0x0040, 0x6d90,
++      0xa185, 0x0700, 0x6062, 0x6266, 0x636a, 0x646e, 0x0078, 0x6d97,
++      0xa185, 0x0700, 0x6062, 0x6266, 0x606b, 0x0000, 0x646e, 0x1078,
++      0x495f, 0x0040, 0x6dad, 0x0d7e, 0x7810, 0xa06d, 0x684c, 0x0d7f,
++      0xa084, 0x2020, 0xa086, 0x2020, 0x00c0, 0x6dad, 0x7824, 0xc0cd,
++      0x7826, 0x6073, 0x0889, 0x0078, 0x6daf, 0x6073, 0x0898, 0x6077,
++      0x0000, 0x688c, 0x8000, 0xa084, 0x00ff, 0x688e, 0x8007, 0x607a,
++      0x607f, 0x0000, 0x2f00, 0x6086, 0x7808, 0x6082, 0x7014, 0x608a,
++      0x7010, 0x608e, 0x700c, 0x60c6, 0x7008, 0x60ca, 0x686c, 0x60ce,
++      0x60ab, 0x0036, 0x60af, 0x95d5, 0x60d7, 0x0000, 0xa582, 0x0080,
++      0x0048, 0x6ddd, 0x6a00, 0xd2f4, 0x0040, 0x6ddb, 0x6a14, 0xa294,
++      0x00ff, 0x0078, 0x6ddd, 0x2011, 0x0000, 0x629e, 0x7824, 0xd0cc,
++      0x0040, 0x6de6, 0x6017, 0x0016, 0x0078, 0x6d1a, 0x6017, 0x0012,
++      0x0078, 0x6d1a, 0x7a18, 0xa280, 0x0023, 0x2014, 0x8210, 0xa294,
++      0x00ff, 0x2202, 0x8217, 0x007c, 0x0d7e, 0x2069, 0xa8b1, 0x6843,
++      0x0001, 0x0d7f, 0x007c, 0x20e1, 0x9080, 0x60a3, 0x0056, 0x60a7,
++      0x9575, 0x1078, 0x6e06, 0x1078, 0x5ac0, 0x007c, 0x007e, 0x6014,
++      0xa084, 0x0004, 0xa085, 0x0009, 0x6016, 0x007f, 0x007c, 0x007e,
++      0x0c7e, 0x2061, 0x0100, 0x6014, 0xa084, 0x0004, 0xa085, 0x0008,
++      0x6016, 0x0c7f, 0x007f, 0x007c, 0x0c7e, 0x0d7e, 0x017e, 0x027e,
++      0x2061, 0x0100, 0x2069, 0x0140, 0x6904, 0xa194, 0x4000, 0x0040,
++      0x6e59, 0x1078, 0x6e0f, 0x6803, 0x1000, 0x6803, 0x0000, 0x0c7e,
++      0x2061, 0xa8b1, 0x6128, 0xa192, 0x00c8, 0x00c8, 0x6e44, 0x8108,
++      0x612a, 0x6124, 0x0c7f, 0x81ff, 0x0040, 0x6e54, 0x1078, 0x5ac0,
++      0x1078, 0x6e06, 0x0078, 0x6e54, 0x6124, 0xa1e5, 0x0000, 0x0040,
++      0x6e51, 0x1078, 0xa5c4, 0x1078, 0x5acb, 0x2009, 0x0014, 0x1078,
++      0x775c, 0x0c7f, 0x0078, 0x6e54, 0x027f, 0x017f, 0x0d7f, 0x0c7f,
++      0x007c, 0x2001, 0xa8cd, 0x2004, 0xa005, 0x00c0, 0x6e54, 0x0c7e,
++      0x2061, 0xa8b1, 0x6128, 0xa192, 0x0003, 0x00c8, 0x6e44, 0x8108,
++      0x612a, 0x0c7f, 0x1078, 0x5ac0, 0x1078, 0x4224, 0x0078, 0x6e54,
++      0x0c7e, 0x0d7e, 0x0e7e, 0x017e, 0x027e, 0x1078, 0x5ad8, 0x2071,
++      0xa8b1, 0x713c, 0x81ff, 0x0040, 0x6e9a, 0x2061, 0x0100, 0x2069,
++      0x0140, 0x6904, 0xa194, 0x4000, 0x0040, 0x6ea0, 0x6803, 0x1000,
++      0x6803, 0x0000, 0x037e, 0x2019, 0x0001, 0x1078, 0x7058, 0x037f,
++      0x713c, 0x2160, 0x1078, 0xa5c4, 0x2009, 0x004a, 0x1078, 0x775c,
++      0x0078, 0x6e9a, 0x027f, 0x017f, 0x0e7f, 0x0d7f, 0x0c7f, 0x007c,
++      0x0078, 0x6e8a, 0x0e7e, 0x2071, 0xa8b1, 0x7048, 0xd084, 0x0040,
++      0x6ebc, 0x713c, 0x81ff, 0x0040, 0x6ebc, 0x2071, 0x0100, 0xa188,
++      0x0007, 0x210c, 0xa18e, 0x0006, 0x00c0, 0x6eba, 0x7017, 0x0012,
++      0x0078, 0x6ebc, 0x7017, 0x0016, 0x0e7f, 0x007c, 0x0e7e, 0x0d7e,
++      0x0c7e, 0x067e, 0x057e, 0x047e, 0x007e, 0x127e, 0x2091, 0x8000,
++      0x6018, 0x2068, 0x6ca0, 0x2071, 0xa8b1, 0x7018, 0x2068, 0x8dff,
++      0x0040, 0x6ee6, 0x68a0, 0xa406, 0x0040, 0x6eda, 0x6854, 0x2068,
++      0x0078, 0x6ecf, 0x6010, 0x2060, 0x643c, 0x6540, 0x6648, 0x2d60,
++      0x1078, 0x4736, 0x0040, 0x6ee6, 0xa085, 0x0001, 0x127f, 0x007f,
++      0x047f, 0x057f, 0x067f, 0x0c7f, 0x0d7f, 0x0e7f, 0x007c, 0x20a1,
++      0x020b, 0x1078, 0x6731, 0x20a3, 0x1200, 0x20a3, 0x0000, 0x20a3,
++      0x0000, 0x781c, 0xa086, 0x0004, 0x00c0, 0x6f01, 0x6098, 0x0078,
++      0x6f02, 0x6030, 0x20a2, 0x7834, 0x20a2, 0x7838, 0x20a2, 0x20a9,
++      0x0010, 0xa006, 0x20a2, 0x00f0, 0x6f0a, 0x20a2, 0x20a2, 0x60c3,
++      0x002c, 0x1078, 0x6dfb, 0x007c, 0x157e, 0x147e, 0x20a1, 0x020b,
++      0x1078, 0x6731, 0x20a3, 0x0f00, 0x20a3, 0x0000, 0x20a3, 0x0000,
++      0x7808, 0x20a2, 0x60c3, 0x0008, 0x1078, 0x6dfb, 0x147f, 0x157f,
++      0x007c, 0x157e, 0x147e, 0x20a1, 0x020b, 0x1078, 0x67c2, 0x20a3,
++      0x0200, 0x20a3, 0x0000, 0x20a9, 0x0006, 0x2011, 0xa640, 0x2019,
++      0xa641, 0x23a6, 0x22a6, 0xa398, 0x0002, 0xa290, 0x0002, 0x00f0,
++      0x6f39, 0x20a3, 0x0000, 0x20a3, 0x0000, 0x60c3, 0x001c, 0x1078,
++      0x6dfb, 0x147f, 0x157f, 0x007c, 0x157e, 0x147e, 0x017e, 0x027e,
++      0x20a1, 0x020b, 0x1078, 0x6799, 0x1078, 0x67b0, 0x7810, 0xa080,
++      0x0000, 0x2004, 0xa080, 0x0015, 0x2098, 0x7808, 0xa088, 0x0002,
++      0x21a8, 0x53a6, 0xa080, 0x0004, 0x8003, 0x60c2, 0x1078, 0x6dfb,
++      0x027f, 0x017f, 0x147f, 0x157f, 0x007c, 0x157e, 0x147e, 0x20a1,
++      0x020b, 0x1078, 0x6731, 0x20a3, 0x6200, 0x20a3, 0x0000, 0x20a3,
++      0x0000, 0x7808, 0x20a2, 0x60c3, 0x0008, 0x1078, 0x6dfb, 0x147f,
++      0x157f, 0x007c, 0x157e, 0x147e, 0x017e, 0x027e, 0x20a1, 0x020b,
++      0x1078, 0x6731, 0x7810, 0xa080, 0x0000, 0x2004, 0xa080, 0x0017,
++      0x2098, 0x7808, 0xa088, 0x0002, 0x21a8, 0x53a6, 0x8003, 0x60c2,
++      0x1078, 0x6dfb, 0x027f, 0x017f, 0x147f, 0x157f, 0x007c, 0x0e7e,
++      0x0c7e, 0x007e, 0x127e, 0x2091, 0x8000, 0x2071, 0xa8b1, 0x700c,
++      0x2060, 0x8cff, 0x0040, 0x6fbb, 0x1078, 0x8f00, 0x00c0, 0x6fb2,
++      0x1078, 0x7c83, 0x600c, 0x007e, 0x1078, 0x772d, 0x1078, 0x7233,
++      0x0c7f, 0x0078, 0x6fa9, 0x700f, 0x0000, 0x700b, 0x0000, 0x127f,
++      0x007f, 0x0c7f, 0x0e7f, 0x007c, 0x127e, 0x157e, 0x0f7e, 0x0e7e,
++      0x0d7e, 0x0c7e, 0x027e, 0x017e, 0x007e, 0x2091, 0x8000, 0x2069,
++      0x0100, 0x2079, 0x0140, 0x2071, 0xa8b1, 0x7024, 0x2060, 0x8cff,
++      0x0040, 0x7014, 0x1078, 0x6e0f, 0x68c3, 0x0000, 0x1078, 0x5acb,
++      0x2009, 0x0013, 0x1078, 0x775c, 0x20a9, 0x01f4, 0x6824, 0xd094,
++      0x0040, 0x6ff7, 0x6827, 0x0004, 0x7804, 0xa084, 0x4000, 0x0040,
++      0x7009, 0x7803, 0x1000, 0x7803, 0x0000, 0x0078, 0x7009, 0xd084,
++      0x0040, 0x6ffe, 0x6827, 0x0001, 0x0078, 0x7000, 0x00f0, 0x6fe6,
++      0x7804, 0xa084, 0x1000, 0x0040, 0x7009, 0x7803, 0x0100, 0x7803,
++      0x0000, 0x6824, 0x007f, 0x017f, 0x027f, 0x0c7f, 0x0d7f, 0x0e7f,
++      0x0f7f, 0x157f, 0x127f, 0x007c, 0x2001, 0xa600, 0x2004, 0xa096,
++      0x0001, 0x0040, 0x704e, 0xa096, 0x0004, 0x0040, 0x704e, 0x1078,
++      0x5acb, 0x6817, 0x0008, 0x68c3, 0x0000, 0x2011, 0x41dc, 0x1078,
++      0x5a45, 0x20a9, 0x01f4, 0x6824, 0xd094, 0x0040, 0x703c, 0x6827,
++      0x0004, 0x7804, 0xa084, 0x4000, 0x0040, 0x704e, 0x7803, 0x1000,
++      0x7803, 0x0000, 0x0078, 0x704e, 0xd084, 0x0040, 0x7043, 0x6827,
++      0x0001, 0x0078, 0x7045, 0x00f0, 0x702b, 0x7804, 0xa084, 0x1000,
++      0x0040, 0x704e, 0x7803, 0x0100, 0x7803, 0x0000, 0x007f, 0x017f,
++      0x027f, 0x0c7f, 0x0d7f, 0x0e7f, 0x0f7f, 0x157f, 0x127f, 0x007c,
++      0x127e, 0x157e, 0x0f7e, 0x0e7e, 0x0d7e, 0x0c7e, 0x027e, 0x017e,
++      0x007e, 0x2091, 0x8000, 0x2069, 0x0100, 0x2079, 0x0140, 0x2071,
++      0xa8b1, 0x703c, 0x2060, 0x8cff, 0x0040, 0x70d6, 0x68af, 0x95f5,
++      0x6817, 0x0010, 0x2009, 0x00fa, 0x8109, 0x00c0, 0x7074, 0x68c7,
++      0x0000, 0x68cb, 0x0008, 0x1078, 0x5ad8, 0x1078, 0x1f7e, 0x047e,
++      0x057e, 0x2009, 0x017f, 0x212c, 0x200b, 0x00a5, 0x2021, 0x0169,
++      0x2404, 0xa084, 0x000f, 0xa086, 0x0004, 0x00c0, 0x70a5, 0x68c7,
++      0x0000, 0x68cb, 0x0008, 0x0e7e, 0x0f7e, 0x2079, 0x0020, 0x2071,
++      0xa908, 0x6814, 0xa084, 0x0004, 0xa085, 0x0012, 0x6816, 0x7803,
++      0x0008, 0x7003, 0x0000, 0x0f7f, 0x0e7f, 0x250a, 0x057f, 0x047f,
++      0xa39d, 0x0000, 0x00c0, 0x70b0, 0x2009, 0x0049, 0x1078, 0x775c,
++      0x20a9, 0x03e8, 0x6824, 0xd094, 0x0040, 0x70c3, 0x6827, 0x0004,
++      0x7804, 0xa084, 0x4000, 0x0040, 0x70d5, 0x7803, 0x1000, 0x7803,
++      0x0000, 0x0078, 0x70d5, 0xd08c, 0x0040, 0x70ca, 0x6827, 0x0002,
++      0x0078, 0x70cc, 0x00f0, 0x70b2, 0x7804, 0xa084, 0x1000, 0x0040,
++      0x70d5, 0x7803, 0x0100, 0x7803, 0x0000, 0x6824, 0x007f, 0x017f,
++      0x027f, 0x0c7f, 0x0d7f, 0x0e7f, 0x0f7f, 0x157f, 0x127f, 0x007c,
++      0x0d7e, 0x127e, 0x2091, 0x8000, 0x2069, 0xa8b1, 0x6a06, 0x127f,
++      0x0d7f, 0x007c, 0x0d7e, 0x127e, 0x2091, 0x8000, 0x2069, 0xa8b1,
++      0x6a32, 0x127f, 0x0d7f, 0x007c, 0x0f7e, 0x0e7e, 0x0c7e, 0x067e,
++      0x007e, 0x127e, 0x2071, 0xa8b1, 0x7614, 0x2660, 0x2678, 0x2091,
++      0x8000, 0x8cff, 0x0040, 0x7134, 0x601c, 0xa206, 0x00c0, 0x712f,
++      0x7014, 0xac36, 0x00c0, 0x710e, 0x660c, 0x7616, 0x7010, 0xac36,
++      0x00c0, 0x711c, 0x2c00, 0xaf36, 0x0040, 0x711a, 0x2f00, 0x7012,
++      0x0078, 0x711c, 0x7013, 0x0000, 0x660c, 0x067e, 0x2c00, 0xaf06,
++      0x0040, 0x7125, 0x7e0e, 0x0078, 0x7126, 0x2678, 0x600f, 0x0000,
++      0x1078, 0x8ec6, 0x1078, 0x7233, 0x0c7f, 0x0078, 0x7101, 0x2c78,
++      0x600c, 0x2060, 0x0078, 0x7101, 0x127f, 0x007f, 0x067f, 0x0c7f,
++      0x0e7f, 0x0f7f, 0x007c, 0x157e, 0x147e, 0x20a1, 0x020b, 0x1078,
++      0x69d0, 0x7810, 0x20a2, 0xa006, 0x20a2, 0x20a2, 0x20a2, 0x20a2,
++      0x20a3, 0x1000, 0x0078, 0x718e, 0x157e, 0x147e, 0x20a1, 0x020b,
++      0x1078, 0x69d0, 0x7810, 0x20a2, 0xa006, 0x20a2, 0x20a2, 0x20a2,
++      0x20a2, 0x20a3, 0x4000, 0x0078, 0x718e, 0x157e, 0x147e, 0x20a1,
++      0x020b, 0x1078, 0x69d0, 0x7810, 0x20a2, 0xa006, 0x20a2, 0x20a2,
++      0x20a2, 0x20a2, 0x20a3, 0x2000, 0x0078, 0x718e, 0x157e, 0x147e,
++      0x20a1, 0x020b, 0x1078, 0x69d0, 0x7810, 0x20a2, 0xa006, 0x20a2,
++      0x20a2, 0x20a2, 0x20a2, 0x20a3, 0x0400, 0x0078, 0x718e, 0x157e,
++      0x147e, 0x20a1, 0x020b, 0x1078, 0x69d0, 0x7810, 0x20a2, 0xa006,
++      0x20a2, 0x20a2, 0x20a2, 0x20a2, 0x20a3, 0x0200, 0x1078, 0x723e,
++      0x60c3, 0x0020, 0x1078, 0x6dfb, 0x147f, 0x157f, 0x007c, 0x127e,
++      0x0c7e, 0x2091, 0x8000, 0x2061, 0x0100, 0x6120, 0xd1b4, 0x00c0,
++      0x71a6, 0xd1bc, 0x00c0, 0x71f0, 0x0078, 0x7230, 0x2009, 0x017f,
++      0x200b, 0x00a1, 0x157e, 0x007e, 0x0d7e, 0x2069, 0x0140, 0x20a9,
++      0x001e, 0x2009, 0x0169, 0x6804, 0xa084, 0x4000, 0x0040, 0x71e7,
++      0x6020, 0xd0b4, 0x0040, 0x71e7, 0x6024, 0xd094, 0x00c0, 0x71e7,
++      0x2104, 0xa084, 0x000f, 0xa086, 0x0004, 0x00c0, 0x71e7, 0x00f0,
++      0x71b3, 0x027e, 0x6198, 0xa18c, 0x00ff, 0x8107, 0x6130, 0xa18c,
++      0x00ff, 0xa10d, 0x6088, 0x628c, 0x618e, 0x608b, 0xbc91, 0x6043,
++      0x0001, 0x6043, 0x0000, 0x608a, 0x628e, 0x6024, 0xd094, 0x00c0,
++      0x71e6, 0x6a04, 0xa294, 0x4000, 0x00c0, 0x71dd, 0x027f, 0x0d7f,
++      0x007f, 0x157f, 0x2009, 0x017f, 0x200b, 0x0000, 0x0078, 0x7230,
++      0x2009, 0x017f, 0x200b, 0x00a1, 0x157e, 0x007e, 0x0d7e, 0x2069,
++      0x0140, 0x20a9, 0x001e, 0x2009, 0x0169, 0x6804, 0xa084, 0x4000,
++      0x0040, 0x7229, 0x6020, 0xd0bc, 0x0040, 0x7229, 0x2104, 0xa084,
++      0x000f, 0xa086, 0x0004, 0x00c0, 0x7229, 0x00f0, 0x71fd, 0x027e,
++      0x6164, 0xa18c, 0x00ff, 0x8107, 0x6130, 0xa18c, 0x00ff, 0xa10d,
++      0x6088, 0x628c, 0x608b, 0xbc91, 0x618e, 0x6043, 0x0001, 0x6043,
++      0x0000, 0x608a, 0x628e, 0x6a04, 0xa294, 0x4000, 0x00c0, 0x7223,
++      0x027f, 0x0d7f, 0x007f, 0x157f, 0x2009, 0x017f, 0x200b, 0x0000,
++      0x0c7f, 0x127f, 0x007c, 0x0e7e, 0x2071, 0xa8b1, 0x7020, 0xa005,
++      0x0040, 0x723c, 0x8001, 0x7022, 0x0e7f, 0x007c, 0x20a9, 0x0008,
++      0x20a2, 0x00f0, 0x7240, 0x20a2, 0x20a2, 0x007c, 0x0f7e, 0x0e7e,
++      0x0d7e, 0x0c7e, 0x077e, 0x067e, 0x007e, 0x127e, 0x2091, 0x8000,
++      0x2071, 0xa8b1, 0x7614, 0x2660, 0x2678, 0x2039, 0x0001, 0x87ff,
++      0x0040, 0x72e2, 0x8cff, 0x0040, 0x72e2, 0x601c, 0xa086, 0x0006,
++      0x00c0, 0x72dd, 0x88ff, 0x0040, 0x726d, 0x2800, 0xac06, 0x00c0,
++      0x72dd, 0x2039, 0x0000, 0x0078, 0x7278, 0x6018, 0xa206, 0x00c0,
++      0x72dd, 0x85ff, 0x0040, 0x7278, 0x6020, 0xa106, 0x00c0, 0x72dd,
++      0x7024, 0xac06, 0x00c0, 0x72a8, 0x2069, 0x0100, 0x68c0, 0xa005,
++      0x0040, 0x72a3, 0x1078, 0x5acb, 0x6817, 0x0008, 0x68c3, 0x0000,
++      0x1078, 0x7378, 0x7027, 0x0000, 0x037e, 0x2069, 0x0140, 0x6b04,
++      0xa384, 0x1000, 0x0040, 0x7298, 0x6803, 0x0100, 0x6803, 0x0000,
++      0x2069, 0x0100, 0x6824, 0xd084, 0x0040, 0x72a0, 0x6827, 0x0001,
++      0x037f, 0x0078, 0x72a8, 0x6003, 0x0009, 0x630a, 0x0078, 0x72dd,
++      0x7014, 0xac36, 0x00c0, 0x72ae, 0x660c, 0x7616, 0x7010, 0xac36,
++      0x00c0, 0x72bc, 0x2c00, 0xaf36, 0x0040, 0x72ba, 0x2f00, 0x7012,
++      0x0078, 0x72bc, 0x7013, 0x0000, 0x660c, 0x067e, 0x2c00, 0xaf06,
++      0x0040, 0x72c5, 0x7e0e, 0x0078, 0x72c6, 0x2678, 0x89ff, 0x00c0,
++      0x72d5, 0x600f, 0x0000, 0x6010, 0x2068, 0x1078, 0x8d06, 0x0040,
++      0x72d3, 0x1078, 0xa1ca, 0x1078, 0x8ec6, 0x1078, 0x7233, 0x88ff,
++      0x00c0, 0x72ec, 0x0c7f, 0x0078, 0x7257, 0x2c78, 0x600c, 0x2060,
++      0x0078, 0x7257, 0xa006, 0x127f, 0x007f, 0x067f, 0x077f, 0x0c7f,
++      0x0d7f, 0x0e7f, 0x0f7f, 0x007c, 0x6017, 0x0000, 0x0c7f, 0xa8c5,
++      0x0001, 0x0078, 0x72e3, 0x0f7e, 0x0e7e, 0x0d7e, 0x0c7e, 0x067e,
++      0x027e, 0x007e, 0x127e, 0x2091, 0x8000, 0x2071, 0xa8b1, 0x7638,
++      0x2660, 0x2678, 0x8cff, 0x0040, 0x7367, 0x601c, 0xa086, 0x0006,
++      0x00c0, 0x7362, 0x87ff, 0x0040, 0x7313, 0x2700, 0xac06, 0x00c0,
++      0x7362, 0x0078, 0x731e, 0x6018, 0xa206, 0x00c0, 0x7362, 0x85ff,
++      0x0040, 0x731e, 0x6020, 0xa106, 0x00c0, 0x7362, 0x703c, 0xac06,
++      0x00c0, 0x7332, 0x037e, 0x2019, 0x0001, 0x1078, 0x7058, 0x7033,
++      0x0000, 0x703f, 0x0000, 0x7043, 0x0000, 0x7047, 0x0000, 0x704b,
++      0x0000, 0x037f, 0x7038, 0xac36, 0x00c0, 0x7338, 0x660c, 0x763a,
++      0x7034, 0xac36, 0x00c0, 0x7346, 0x2c00, 0xaf36, 0x0040, 0x7344,
++      0x2f00, 0x7036, 0x0078, 0x7346, 0x7037, 0x0000, 0x660c, 0x067e,
++      0x2c00, 0xaf06, 0x0040, 0x734f, 0x7e0e, 0x0078, 0x7350, 0x2678,
++      0x600f, 0x0000, 0x6010, 0x2068, 0x1078, 0x8d06, 0x0040, 0x735a,
++      0x1078, 0xa1ca, 0x1078, 0x8ec6, 0x87ff, 0x00c0, 0x7371, 0x0c7f,
++      0x0078, 0x7302, 0x2c78, 0x600c, 0x2060, 0x0078, 0x7302, 0xa006,
++      0x127f, 0x007f, 0x027f, 0x067f, 0x0c7f, 0x0d7f, 0x0e7f, 0x0f7f,
++      0x007c, 0x6017, 0x0000, 0x0c7f, 0xa7bd, 0x0001, 0x0078, 0x7368,
++      0x0e7e, 0x2071, 0xa8b1, 0x2001, 0xa600, 0x2004, 0xa086, 0x0002,
++      0x00c0, 0x7386, 0x7007, 0x0005, 0x0078, 0x7388, 0x7007, 0x0000,
++      0x0e7f, 0x007c, 0x0f7e, 0x0e7e, 0x0c7e, 0x067e, 0x027e, 0x007e,
++      0x127e, 0x2091, 0x8000, 0x2071, 0xa8b1, 0x2c10, 0x7638, 0x2660,
++      0x2678, 0x8cff, 0x0040, 0x73c8, 0x2200, 0xac06, 0x00c0, 0x73c3,
++      0x7038, 0xac36, 0x00c0, 0x73a6, 0x660c, 0x763a, 0x7034, 0xac36,
++      0x00c0, 0x73b4, 0x2c00, 0xaf36, 0x0040, 0x73b2, 0x2f00, 0x7036,
++      0x0078, 0x73b4, 0x7037, 0x0000, 0x660c, 0x2c00, 0xaf06, 0x0040,
++      0x73bc, 0x7e0e, 0x0078, 0x73bd, 0x2678, 0x600f, 0x0000, 0xa085,
++      0x0001, 0x0078, 0x73c8, 0x2c78, 0x600c, 0x2060, 0x0078, 0x7399,
++      0x127f, 0x007f, 0x027f, 0x067f, 0x0c7f, 0x0e7f, 0x0f7f, 0x007c,
++      0x0f7e, 0x0e7e, 0x0d7e, 0x0c7e, 0x067e, 0x007e, 0x127e, 0x2091,
++      0x8000, 0x2071, 0xa8b1, 0x760c, 0x2660, 0x2678, 0x8cff, 0x0040,
++      0x7469, 0x6018, 0xa080, 0x0028, 0x2004, 0xa206, 0x00c0, 0x7464,
++      0x7024, 0xac06, 0x00c0, 0x740f, 0x2069, 0x0100, 0x68c0, 0xa005,
++      0x0040, 0x743d, 0x1078, 0x6e0f, 0x68c3, 0x0000, 0x1078, 0x7378,
++      0x7027, 0x0000, 0x037e, 0x2069, 0x0140, 0x6b04, 0xa384, 0x1000,
++      0x0040, 0x7406, 0x6803, 0x0100, 0x6803, 0x0000, 0x2069, 0x0100,
++      0x6824, 0xd084, 0x0040, 0x740e, 0x6827, 0x0001, 0x037f, 0x700c,
++      0xac36, 0x00c0, 0x7415, 0x660c, 0x760e, 0x7008, 0xac36, 0x00c0,
++      0x7423, 0x2c00, 0xaf36, 0x0040, 0x7421, 0x2f00, 0x700a, 0x0078,
++      0x7423, 0x700b, 0x0000, 0x660c, 0x067e, 0x2c00, 0xaf06, 0x0040,
++      0x742c, 0x7e0e, 0x0078, 0x742d, 0x2678, 0x600f, 0x0000, 0x1078,
++      0x8eec, 0x00c0, 0x7441, 0x1078, 0x28a6, 0x1078, 0x8f00, 0x00c0,
++      0x745d, 0x1078, 0x7c83, 0x0078, 0x745d, 0x1078, 0x7378, 0x0078,
++      0x740f, 0x1078, 0x8f00, 0x00c0, 0x7449, 0x1078, 0x7c83, 0x0078,
++      0x745d, 0x6010, 0x2068, 0x1078, 0x8d06, 0x0040, 0x745d, 0x601c,
++      0xa086, 0x0003, 0x00c0, 0x7471, 0x6837, 0x0103, 0x6b4a, 0x6847,
++      0x0000, 0x1078, 0x4a73, 0x1078, 0x8eb9, 0x1078, 0x8ec6, 0x1078,
++      0x7233, 0x0c7f, 0x0078, 0x73de, 0x2c78, 0x600c, 0x2060, 0x0078,
++      0x73de, 0x127f, 0x007f, 0x067f, 0x0c7f, 0x0d7f, 0x0e7f, 0x0f7f,
++      0x007c, 0x601c, 0xa086, 0x0006, 0x00c0, 0x745d, 0x1078, 0xa1ca,
++      0x0078, 0x745d, 0x037e, 0x157e, 0x137e, 0x147e, 0x3908, 0xa006,
++      0xa190, 0x0020, 0x221c, 0xa39e, 0x2676, 0x00c0, 0x748b, 0x8210,
++      0x8000, 0x0078, 0x7482, 0xa005, 0x0040, 0x7497, 0x20a9, 0x0020,
++      0x2198, 0x8211, 0xa282, 0x0020, 0x20c8, 0x20a0, 0x53a3, 0x147f,
++      0x137f, 0x157f, 0x037f, 0x007c, 0x0d7e, 0x20a1, 0x020b, 0x1078,
++      0x67c2, 0x20a3, 0x0200, 0x20a3, 0x0014, 0x60c3, 0x0014, 0x20a3,
++      0x0000, 0x20a3, 0x0000, 0x2099, 0xa8a5, 0x20a9, 0x0004, 0x53a6,
++      0x20a3, 0x0004, 0x20a3, 0x7878, 0x20a3, 0x0000, 0x20a3, 0x0000,
++      0x1078, 0x6dfb, 0x0d7f, 0x007c, 0x20a1, 0x020b, 0x1078, 0x67c2,
++      0x20a3, 0x0214, 0x20a3, 0x0018, 0x20a3, 0x0800, 0x7810, 0xa084,
++      0xff00, 0x20a2, 0x20a3, 0x0000, 0x20a3, 0x0000, 0x20a3, 0x0000,
++      0x20a3, 0x0000, 0x7810, 0xa084, 0x00ff, 0x20a2, 0x7828, 0x20a2,
++      0x20a3, 0x0000, 0x20a3, 0x0000, 0x60c3, 0x0018, 0x1078, 0x6dfb,
++      0x007c, 0x0d7e, 0x017e, 0x2f68, 0x2009, 0x0035, 0x1078, 0x91bc,
++      0x00c0, 0x7551, 0x20a1, 0x020b, 0x1078, 0x6731, 0x20a3, 0x1300,
++      0x20a3, 0x0000, 0x7828, 0x2068, 0x681c, 0xa086, 0x0003, 0x0040,
++      0x752d, 0x7818, 0xa080, 0x0028, 0x2014, 0xa286, 0x007e, 0x00c0,
++      0x7507, 0x20a3, 0x00ff, 0x20a3, 0xfffe, 0x0078, 0x7542, 0xa286,
++      0x007f, 0x00c0, 0x7511, 0x20a3, 0x00ff, 0x20a3, 0xfffd, 0x0078,
++      0x7542, 0xd2bc, 0x0040, 0x7527, 0xa286, 0x0080, 0x00c0, 0x751e,
++      0x20a3, 0x00ff, 0x20a3, 0xfffc, 0x0078, 0x7542, 0xa2e8, 0xa735,
++      0x2d6c, 0x6810, 0x20a2, 0x6814, 0x20a2, 0x0078, 0x7542, 0x20a3,
++      0x0000, 0x6098, 0x20a2, 0x0078, 0x7542, 0x7818, 0xa080, 0x0028,
++      0x2004, 0xa082, 0x007e, 0x0048, 0x753e, 0x0d7e, 0x2069, 0xa61b,
++      0x2da6, 0x8d68, 0x2da6, 0x0d7f, 0x0078, 0x7542, 0x20a3, 0x0000,
++      0x6030, 0x20a2, 0x7834, 0x20a2, 0x7838, 0x20a2, 0x20a3, 0x0000,
++      0x20a3, 0x0000, 0x60c3, 0x000c, 0x1078, 0x6dfb, 0x017f, 0x0d7f,
++      0x007c, 0x7817, 0x0001, 0x7803, 0x0006, 0x017f, 0x0d7f, 0x007c,
++      0x0d7e, 0x027e, 0x7928, 0x2168, 0x691c, 0xa186, 0x0006, 0x0040,
++      0x757a, 0xa186, 0x0003, 0x0040, 0x75d5, 0xa186, 0x0005, 0x0040,
++      0x75b8, 0xa186, 0x0004, 0x0040, 0x75a8, 0xa186, 0x0008, 0x0040,
++      0x75c2, 0x7807, 0x0037, 0x7813, 0x1700, 0x1078, 0x7640, 0x027f,
++      0x0d7f, 0x007c, 0x1078, 0x75fd, 0x2009, 0x4000, 0x6800, 0x0079,
++      0x7581, 0x7594, 0x75a2, 0x7596, 0x75a2, 0x759d, 0x7594, 0x7594,
++      0x75a2, 0x75a2, 0x75a2, 0x75a2, 0x7594, 0x7594, 0x7594, 0x7594,
++      0x7594, 0x75a2, 0x7594, 0x75a2, 0x1078, 0x1332, 0x6824, 0xd0e4,
++      0x0040, 0x759d, 0xd0cc, 0x0040, 0x75a0, 0xa00e, 0x0078, 0x75a2,
++      0x2009, 0x2000, 0x6828, 0x20a2, 0x682c, 0x20a2, 0x0078, 0x75f3,
++      0x1078, 0x75fd, 0x20a3, 0x0000, 0x20a3, 0x0000, 0x2009, 0x4000,
++      0x6a00, 0xa286, 0x0002, 0x00c0, 0x75b6, 0xa00e, 0x0078, 0x75f3,
++      0x1078, 0x75fd, 0x20a3, 0x0000, 0x20a3, 0x0000, 0x2009, 0x4000,
++      0x0078, 0x75f3, 0x1078, 0x75fd, 0x20a3, 0x0000, 0x20a3, 0x0000,
++      0x2009, 0x4000, 0xa286, 0x0005, 0x0040, 0x75d2, 0xa286, 0x0002,
++      0x00c0, 0x75d3, 0xa00e, 0x0078, 0x75f3, 0x1078, 0x75fd, 0x6810,
++      0x2068, 0x697c, 0x6810, 0xa112, 0x6980, 0x6814, 0xa103, 0x20a2,
++      0x22a2, 0x7928, 0xa180, 0x0000, 0x2004, 0xa08e, 0x0002, 0x0040,
++      0x75f1, 0xa08e, 0x0004, 0x0040, 0x75f1, 0x2009, 0x4000, 0x0078,
++      0x75f3, 0x2009, 0x0000, 0x21a2, 0x20a3, 0x0000, 0x60c3, 0x0018,
++      0x1078, 0x6dfb, 0x027f, 0x0d7f, 0x007c, 0x037e, 0x047e, 0x057e,
++      0x067e, 0x20a1, 0x020b, 0x1078, 0x67c2, 0xa006, 0x20a3, 0x0200,
++      0x20a2, 0x7934, 0x21a2, 0x7938, 0x21a2, 0x7818, 0xa080, 0x0028,
++      0x2004, 0xa092, 0x007e, 0x0048, 0x7623, 0x0d7e, 0x2069, 0xa61b,
++      0x2d2c, 0x8d68, 0x2d34, 0xa0e8, 0xa735, 0x2d6c, 0x6b10, 0x6c14,
++      0x0d7f, 0x0078, 0x7629, 0x2019, 0x0000, 0x6498, 0x2029, 0x0000,
++      0x6630, 0x7828, 0xa080, 0x0007, 0x2004, 0xa086, 0x0003, 0x00c0,
++      0x7637, 0x25a2, 0x26a2, 0x23a2, 0x24a2, 0x0078, 0x763b, 0x23a2,
++      0x24a2, 0x25a2, 0x26a2, 0x067f, 0x057f, 0x047f, 0x037f, 0x007c,
++      0x20a1, 0x020b, 0x1078, 0x67c2, 0x20a3, 0x0100, 0x20a3, 0x0000,
++      0x20a3, 0x0009, 0x7810, 0x20a2, 0x60c3, 0x0008, 0x1078, 0x6dfb,
++      0x007c, 0x20a1, 0x020b, 0x1078, 0x6728, 0x20a3, 0x1400, 0x20a3,
++      0x0000, 0x7834, 0x20a2, 0x7838, 0x20a2, 0x7828, 0x20a2, 0x782c,
++      0x20a2, 0x7830, 0xa084, 0x00ff, 0x8007, 0x20a2, 0x20a3, 0x0000,
++      0x60c3, 0x0010, 0x1078, 0x6dfb, 0x007c, 0x20a1, 0x020b, 0x1078,
++      0x67b9, 0x20a3, 0x0100, 0x20a3, 0x0000, 0x7828, 0x20a2, 0x7810,
++      0x20a2, 0x60c3, 0x0008, 0x1078, 0x6dfb, 0x007c, 0x147e, 0x20a1,
++      0x020b, 0x1078, 0x7689, 0x60c3, 0x0000, 0x1078, 0x6dfb, 0x147f,
++      0x007c, 0x20e1, 0x9080, 0x20e1, 0x4000, 0x7818, 0xa080, 0x0028,
++      0x2004, 0xd0bc, 0x0040, 0x76a6, 0x0d7e, 0xa0e8, 0xa735, 0x2d6c,
++      0x6810, 0xa085, 0x0300, 0x20a2, 0x6814, 0x20a2, 0x2069, 0xa61b,
++      0x2da6, 0x8d68, 0x2da6, 0x0d7f, 0x0078, 0x76ae, 0x20a3, 0x0300,
++      0x6298, 0x22a2, 0x20a3, 0x0000, 0x6230, 0x22a2, 0x20a3, 0x0819,
++      0x20a3, 0x0000, 0x1078, 0x6dea, 0x22a2, 0x20a3, 0x0000, 0x2fa2,
++      0x7a08, 0x22a2, 0x20a3, 0x0000, 0x20a3, 0x0000, 0x007c, 0x2061,
++      0xad00, 0x2a70, 0x7064, 0x704a, 0x704f, 0xad00, 0x007c, 0x0e7e,
++      0x127e, 0x2071, 0xa600, 0x2091, 0x8000, 0x7548, 0xa582, 0x0010,
++      0x0048, 0x76f9, 0x704c, 0x2060, 0x6000, 0xa086, 0x0000, 0x0040,
++      0x76e5, 0xace0, 0x0010, 0x7058, 0xac02, 0x00c8, 0x76e1, 0x0078,
++      0x76d4, 0x2061, 0xad00, 0x0078, 0x76d4, 0x6003, 0x0008, 0x8529,
++      0x754a, 0xaca8, 0x0010, 0x7058, 0xa502, 0x00c8, 0x76f5, 0x754e,
++      0xa085, 0x0001, 0x127f, 0x0e7f, 0x007c, 0x704f, 0xad00, 0x0078,
++      0x76f0, 0xa006, 0x0078, 0x76f2, 0x0e7e, 0x2071, 0xa600, 0x7548,
++      0xa582, 0x0010, 0x0048, 0x772a, 0x704c, 0x2060, 0x6000, 0xa086,
++      0x0000, 0x0040, 0x7717, 0xace0, 0x0010, 0x7058, 0xac02, 0x00c8,
++      0x7713, 0x0078, 0x7706, 0x2061, 0xad00, 0x0078, 0x7706, 0x6003,
++      0x0008, 0x8529, 0x754a, 0xaca8, 0x0010, 0x7058, 0xa502, 0x00c8,
++      0x7726, 0x754e, 0xa085, 0x0001, 0x0e7f, 0x007c, 0x704f, 0xad00,
++      0x0078, 0x7722, 0xa006, 0x0078, 0x7724, 0xac82, 0xad00, 0x1048,
++      0x1332, 0x2001, 0xa616, 0x2004, 0xac02, 0x10c8, 0x1332, 0xa006,
++      0x6006, 0x600a, 0x600e, 0x6012, 0x6016, 0x601a, 0x601f, 0x0000,
++      0x6003, 0x0000, 0x6022, 0x6026, 0x602a, 0x602e, 0x6032, 0x6036,
++      0x603a, 0x603e, 0x2061, 0xa600, 0x6048, 0x8000, 0x604a, 0xa086,
++      0x0001, 0x0040, 0x7754, 0x007c, 0x127e, 0x2091, 0x8000, 0x1078,
++      0x62d1, 0x127f, 0x0078, 0x7753, 0x601c, 0xa084, 0x000f, 0x0079,
++      0x7761, 0x776a, 0x777b, 0x7797, 0x77b3, 0x920e, 0x922a, 0x9246,
++      0x776a, 0x777b, 0xa186, 0x0013, 0x00c0, 0x7773, 0x1078, 0x61cd,
++      0x1078, 0x62d1, 0x007c, 0xa18e, 0x0047, 0x00c0, 0x777a, 0xa016,
++      0x1078, 0x15fa, 0x007c, 0x067e, 0x6000, 0xa0b2, 0x0010, 0x10c8,
++      0x1332, 0x1079, 0x7785, 0x067f, 0x007c, 0x7795, 0x7b00, 0x7cb2,
++      0x7795, 0x7d36, 0x77cf, 0x7795, 0x7795, 0x7a92, 0x80f6, 0x7795,
++      0x7795, 0x7795, 0x7795, 0x7795, 0x7795, 0x1078, 0x1332, 0x067e,
++      0x6000, 0xa0b2, 0x0010, 0x10c8, 0x1332, 0x1079, 0x77a1, 0x067f,
++      0x007c, 0x77b1, 0x87c3, 0x77b1, 0x77b1, 0x77b1, 0x77b1, 0x77b1,
++      0x77b1, 0x8766, 0x8951, 0x77b1, 0x87f3, 0x8879, 0x87f3, 0x8879,
++      0x77b1, 0x1078, 0x1332, 0x067e, 0x6000, 0xa0b2, 0x0010, 0x10c8,
++      0x1332, 0x1079, 0x77bd, 0x067f, 0x007c, 0x77cd, 0x813d, 0x820e,
++      0x8368, 0x84e4, 0x77cd, 0x77cd, 0x77cd, 0x8116, 0x870e, 0x8712,
++      0x77cd, 0x77cd, 0x77cd, 0x77cd, 0x8742, 0x1078, 0x1332, 0xa1b6,
++      0x0015, 0x00c0, 0x77d7, 0x1078, 0x772d, 0x0078, 0x77dd, 0xa1b6,
++      0x0016, 0x10c0, 0x1332, 0x1078, 0x772d, 0x007c, 0x20a9, 0x000e,
++      0x2e98, 0x6010, 0x20a0, 0x53a3, 0x20a9, 0x0006, 0x3310, 0x3420,
++      0x9398, 0x94a0, 0x3318, 0x3428, 0x222e, 0x2326, 0xa290, 0x0002,
++      0xa5a8, 0x0002, 0xa398, 0x0002, 0xa4a0, 0x0002, 0x00f0, 0x77ec,
++      0x0e7e, 0x1078, 0x8d06, 0x0040, 0x7803, 0x6010, 0x2070, 0x7007,
++      0x0000, 0x7037, 0x0103, 0x0e7f, 0x1078, 0x772d, 0x007c, 0x0d7e,
++      0x037e, 0x7330, 0xa386, 0x0200, 0x00c0, 0x7814, 0x6018, 0x2068,
++      0x6813, 0x00ff, 0x6817, 0xfffd, 0x6010, 0xa005, 0x0040, 0x781e,
++      0x2068, 0x6807, 0x0000, 0x6837, 0x0103, 0x6b32, 0x1078, 0x772d,
++      0x037f, 0x0d7f, 0x007c, 0x017e, 0x20a9, 0x002a, 0xae80, 0x000c,
++      0x2098, 0x6010, 0xa080, 0x0002, 0x20a0, 0x53a3, 0x20a9, 0x002a,
++      0x6010, 0xa080, 0x0001, 0x2004, 0xa080, 0x0002, 0x20a0, 0x53a3,
++      0x0e7e, 0x6010, 0x2004, 0x2070, 0x7037, 0x0103, 0x0e7f, 0x1078,
++      0x772d, 0x017f, 0x007c, 0x0e7e, 0x0d7e, 0x603f, 0x0000, 0x2c68,
++      0x017e, 0x2009, 0x0035, 0x1078, 0x91bc, 0x017f, 0x00c0, 0x785f,
++      0x027e, 0x6228, 0x2268, 0x027f, 0x2071, 0xab8c, 0x6b1c, 0xa386,
++      0x0003, 0x0040, 0x7863, 0xa386, 0x0006, 0x0040, 0x7867, 0x1078,
++      0x772d, 0x0078, 0x7869, 0x1078, 0x786c, 0x0078, 0x7869, 0x1078,
++      0x7938, 0x0d7f, 0x0e7f, 0x007c, 0x0f7e, 0x6810, 0x2078, 0xa186,
++      0x0015, 0x0040, 0x791d, 0xa18e, 0x0016, 0x00c0, 0x7936, 0x700c,
++      0xa08c, 0xff00, 0xa186, 0x1700, 0x0040, 0x7882, 0xa186, 0x0300,
++      0x00c0, 0x78f8, 0x8fff, 0x00c0, 0x788c, 0x6800, 0xa086, 0x000f,
++      0x0040, 0x78db, 0x0078, 0x7934, 0x6808, 0xa086, 0xffff, 0x00c0,
++      0x7921, 0x784c, 0xa084, 0x0060, 0xa086, 0x0020, 0x00c0, 0x78a2,
++      0x797c, 0x7810, 0xa106, 0x00c0, 0x7921, 0x7980, 0x7814, 0xa106,
++      0x00c0, 0x7921, 0x1078, 0x8eb9, 0x6830, 0x7852, 0x784c, 0xc0dc,
++      0xc0f4, 0xc0d4, 0x784e, 0x027e, 0xa00e, 0x6a14, 0x2001, 0x000a,
++      0x1078, 0x5c1c, 0x7854, 0xa20a, 0x0048, 0x78b7, 0x8011, 0x7a56,
++      0x82ff, 0x027f, 0x00c0, 0x78c3, 0x0c7e, 0x2d60, 0x1078, 0x8ae0,
++      0x0c7f, 0x0078, 0x7934, 0x0c7e, 0x0d7e, 0x2f68, 0x6838, 0xd0fc,
++      0x00c0, 0x78ce, 0x1078, 0x4353, 0x0078, 0x78d0, 0x1078, 0x4431,
++      0x0d7f, 0x0c7f, 0x00c0, 0x7921, 0x0c7e, 0x2d60, 0x1078, 0x772d,
++      0x0c7f, 0x0078, 0x7934, 0x0c7e, 0x1078, 0x9187, 0x0040, 0x78f1,
++      0x6013, 0x0000, 0x6818, 0x601a, 0x601f, 0x0003, 0x6904, 0x0c7e,
++      0x2d60, 0x1078, 0x772d, 0x0c7f, 0x1078, 0x775c, 0x0c7f, 0x0078,
++      0x7934, 0x2001, 0xa8a4, 0x2004, 0x683e, 0x0c7f, 0x0078, 0x7934,
++      0x7008, 0xa086, 0x000b, 0x00c0, 0x7912, 0x6018, 0x200c, 0xc1bc,
++      0x2102, 0x0c7e, 0x2d60, 0x7853, 0x0003, 0x6007, 0x0085, 0x6003,
++      0x000b, 0x601f, 0x0002, 0x1078, 0x5d8a, 0x1078, 0x62d1, 0x0c7f,
++      0x0078, 0x7934, 0x700c, 0xa086, 0x2a00, 0x00c0, 0x7921, 0x2001,
++      0xa8a4, 0x2004, 0x683e, 0x0078, 0x7934, 0x1078, 0x7953, 0x0078,
++      0x7936, 0x8fff, 0x1040, 0x1332, 0x0c7e, 0x0d7e, 0x2d60, 0x2f68,
++      0x6837, 0x0103, 0x684b, 0x0003, 0x1078, 0x89cf, 0x1078, 0x8eb9,
++      0x1078, 0x8ec6, 0x0d7f, 0x0c7f, 0x1078, 0x772d, 0x0f7f, 0x007c,
++      0xa186, 0x0015, 0x00c0, 0x7942, 0x2001, 0xa8a4, 0x2004, 0x683e,
++      0x0078, 0x7950, 0xa18e, 0x0016, 0x00c0, 0x7952, 0x0c7e, 0x2d00,
++      0x2060, 0x1078, 0xa495, 0x1078, 0x5bc1, 0x1078, 0x772d, 0x0c7f,
++      0x1078, 0x772d, 0x007c, 0x027e, 0x037e, 0x047e, 0x7228, 0x7c80,
++      0x7b7c, 0xd2f4, 0x0040, 0x7962, 0x2001, 0xa8a4, 0x2004, 0x683e,
++      0x0078, 0x79c6, 0x0c7e, 0x2d60, 0x1078, 0x89f3, 0x0c7f, 0x6804,
++      0xa086, 0x0050, 0x00c0, 0x797a, 0x0c7e, 0x2d00, 0x2060, 0x6003,
++      0x0001, 0x6007, 0x0050, 0x1078, 0x5d8a, 0x1078, 0x62d1, 0x0c7f,
++      0x0078, 0x79c6, 0x6800, 0xa086, 0x000f, 0x0040, 0x799c, 0x8fff,
++      0x1040, 0x1332, 0x6824, 0xd0dc, 0x00c0, 0x799c, 0x6800, 0xa086,
++      0x0004, 0x00c0, 0x79a1, 0x784c, 0xd0ac, 0x0040, 0x79a1, 0x784c,
++      0xc0dc, 0xc0f4, 0x784e, 0x7850, 0xc0f4, 0xc0fc, 0x7852, 0x2001,
++      0x0001, 0x682e, 0x0078, 0x79c0, 0x2001, 0x0007, 0x682e, 0x0078,
++      0x79c0, 0x784c, 0xd0b4, 0x00c0, 0x79ae, 0xd0ac, 0x0040, 0x799c,
++      0x784c, 0xd0f4, 0x00c0, 0x799c, 0x0078, 0x798f, 0xd2ec, 0x00c0,
++      0x799c, 0x7024, 0xa306, 0x00c0, 0x79b9, 0x7020, 0xa406, 0x0040,
++      0x799c, 0x7020, 0x6836, 0x7024, 0x683a, 0x2001, 0x0005, 0x682e,
++      0x1078, 0x8ff0, 0x1078, 0x62d1, 0x0078, 0x79c8, 0x1078, 0x772d,
++      0x047f, 0x037f, 0x027f, 0x007c, 0x0e7e, 0x0d7e, 0x027e, 0x6034,
++      0x2068, 0x6a1c, 0xa286, 0x0007, 0x0040, 0x7a35, 0xa286, 0x0002,
++      0x0040, 0x7a35, 0xa286, 0x0000, 0x0040, 0x7a35, 0x6808, 0x6338,
++      0xa306, 0x00c0, 0x7a35, 0x2071, 0xab8c, 0xa186, 0x0015, 0x0040,
++      0x7a2f, 0xa18e, 0x0016, 0x00c0, 0x7a02, 0x6030, 0xa084, 0x00ff,
++      0xa086, 0x0001, 0x00c0, 0x7a02, 0x700c, 0xa086, 0x2a00, 0x00c0,
++      0x7a02, 0x6034, 0xa080, 0x0009, 0x200c, 0xc1dd, 0xc1f5, 0x2102,
++      0x0078, 0x7a2f, 0x0c7e, 0x6034, 0x2060, 0x6104, 0xa186, 0x004b,
++      0x0040, 0x7a22, 0xa186, 0x004c, 0x0040, 0x7a22, 0xa186, 0x004d,
++      0x0040, 0x7a22, 0xa186, 0x004e, 0x0040, 0x7a22, 0xa186, 0x0052,
++      0x0040, 0x7a22, 0x6010, 0x2068, 0x1078, 0x8d06, 0x1040, 0x1332,
++      0x6853, 0x0003, 0x6007, 0x0085, 0x6003, 0x000b, 0x601f, 0x0002,
++      0x1078, 0x5d8a, 0x1078, 0x62d1, 0x0c7f, 0x0078, 0x7a35, 0x6034,
++      0x2068, 0x2001, 0xa8a4, 0x2004, 0x683e, 0x1078, 0x772d, 0x027f,
++      0x0d7f, 0x0e7f, 0x007c, 0x0d7e, 0x20a9, 0x000e, 0x2e98, 0x6010,
++      0x20a0, 0x53a3, 0xa1b6, 0x0015, 0x00c0, 0x7a73, 0x6018, 0x2068,
++      0x157e, 0x037e, 0x027e, 0xae90, 0x000c, 0xa290, 0x0004, 0x20a9,
++      0x0004, 0xad98, 0x000a, 0x1078, 0x80de, 0x027f, 0x037f, 0x157f,
++      0x00c0, 0x7a76, 0x157e, 0x037e, 0x027e, 0xae90, 0x000c, 0xa290,
++      0x0008, 0x20a9, 0x0004, 0xad98, 0x0006, 0x1078, 0x80de, 0x027f,
++      0x037f, 0x157f, 0x00c0, 0x7a76, 0x7038, 0x680a, 0x703c, 0x680e,
++      0x6800, 0xc08d, 0x6802, 0x0d7f, 0x0078, 0x77f8, 0x1078, 0x2880,
++      0x0c7e, 0x1078, 0x76c7, 0x2f00, 0x601a, 0x6013, 0x0000, 0x601f,
++      0x0001, 0x6007, 0x0001, 0x6003, 0x0001, 0x2001, 0x0007, 0x1078,
++      0x4502, 0x1078, 0x4535, 0x1078, 0x5dd7, 0x1078, 0x62d1, 0x0c7f,
++      0x0078, 0x7a73, 0x2100, 0xa1b2, 0x0044, 0x10c8, 0x1332, 0xa1b2,
++      0x0040, 0x00c8, 0x7af7, 0x0079, 0x7a9d, 0x7aeb, 0x7adf, 0x7aeb,
++      0x7aeb, 0x7aeb, 0x7aeb, 0x7add, 0x7add, 0x7add, 0x7add, 0x7add,
++      0x7add, 0x7add, 0x7add, 0x7add, 0x7add, 0x7add, 0x7add, 0x7add,
++      0x7add, 0x7add, 0x7add, 0x7add, 0x7add, 0x7add, 0x7add, 0x7add,
++      0x7add, 0x7add, 0x7add, 0x7add, 0x7aeb, 0x7add, 0x7aeb, 0x7aeb,
++      0x7add, 0x7add, 0x7add, 0x7add, 0x7add, 0x7aeb, 0x7add, 0x7add,
++      0x7add, 0x7add, 0x7add, 0x7add, 0x7add, 0x7add, 0x7add, 0x7aeb,
++      0x7aeb, 0x7add, 0x7add, 0x7add, 0x7add, 0x7add, 0x7add, 0x7add,
++      0x7add, 0x7add, 0x7aeb, 0x7add, 0x7add, 0x1078, 0x1332, 0x6003,
++      0x0001, 0x6106, 0x1078, 0x5dd7, 0x127e, 0x2091, 0x8000, 0x1078,
++      0x62d1, 0x127f, 0x007c, 0x6003, 0x0001, 0x6106, 0x1078, 0x5dd7,
++      0x127e, 0x2091, 0x8000, 0x1078, 0x62d1, 0x127f, 0x007c, 0x2600,
++      0x0079, 0x7afa, 0x7afe, 0x7afe, 0x7afe, 0x7aeb, 0x1078, 0x1332,
++      0x6004, 0xa0b2, 0x0044, 0x10c8, 0x1332, 0xa1b6, 0x0013, 0x00c0,
++      0x7b10, 0xa0b2, 0x0040, 0x00c8, 0x7c79, 0x2008, 0x0079, 0x7bbf,
++      0xa1b6, 0x0027, 0x00c0, 0x7b7c, 0x1078, 0x61cd, 0x6004, 0x1078,
++      0x8eec, 0x0040, 0x7b2d, 0x1078, 0x8f00, 0x0040, 0x7b74, 0xa08e,
++      0x0021, 0x0040, 0x7b78, 0xa08e, 0x0022, 0x0040, 0x7b74, 0xa08e,
++      0x003d, 0x0040, 0x7b78, 0x0078, 0x7b6f, 0x1078, 0x28a6, 0x2001,
++      0x0007, 0x1078, 0x4502, 0x6018, 0xa080, 0x0028, 0x200c, 0x1078,
++      0x7c83, 0xa186, 0x007e, 0x00c0, 0x7b42, 0x2001, 0xa633, 0x2014,
++      0xc285, 0x2202, 0x017e, 0x027e, 0x037e, 0x2110, 0x027e, 0x2019,
++      0x0028, 0x1078, 0x73d0, 0x027f, 0x1078, 0xa4f1, 0x037f, 0x027f,
++      0x017f, 0x017e, 0x027e, 0x037e, 0x2110, 0x2019, 0x0028, 0x1078,
++      0x5f01, 0x077e, 0x2039, 0x0000, 0x1078, 0x5e0a, 0x0c7e, 0x6018,
++      0xa065, 0x0040, 0x7b65, 0x1078, 0x47e9, 0x0c7f, 0x2c08, 0x1078,
++      0x9f8b, 0x077f, 0x037f, 0x027f, 0x017f, 0x1078, 0x457f, 0x1078,
++      0x772d, 0x1078, 0x62d1, 0x007c, 0x1078, 0x7c83, 0x0078, 0x7b6f,
++      0x1078, 0x7ca6, 0x0078, 0x7b6f, 0xa186, 0x0014, 0x00c0, 0x7b73,
++      0x1078, 0x61cd, 0x1078, 0x2880, 0x1078, 0x8eec, 0x00c0, 0x7b9b,
++      0x1078, 0x28a6, 0x6018, 0xa080, 0x0028, 0x200c, 0x1078, 0x7c83,
++      0xa186, 0x007e, 0x00c0, 0x7b99, 0x2001, 0xa633, 0x200c, 0xc185,
++      0x2102, 0x0078, 0x7b6f, 0x1078, 0x8f00, 0x00c0, 0x7ba3, 0x1078,
++      0x7c83, 0x0078, 0x7b6f, 0x6004, 0xa08e, 0x0032, 0x00c0, 0x7bb4,
++      0x0e7e, 0x0f7e, 0x2071, 0xa682, 0x2079, 0x0000, 0x1078, 0x2bd7,
++      0x0f7f, 0x0e7f, 0x0078, 0x7b6f, 0x6004, 0xa08e, 0x0021, 0x0040,
++      0x7b9f, 0xa08e, 0x0022, 0x1040, 0x7c83, 0x0078, 0x7b6f, 0x7c01,
++      0x7c03, 0x7c07, 0x7c0b, 0x7c0f, 0x7c13, 0x7bff, 0x7bff, 0x7bff,
++      0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff,
++      0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff,
++      0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7c17, 0x7c29, 0x7bff,
++      0x7c2b, 0x7c29, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7c29,
++      0x7c29, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff,
++      0x7bff, 0x7c5c, 0x7c29, 0x7bff, 0x7c23, 0x7bff, 0x7bff, 0x7bff,
++      0x7c25, 0x7bff, 0x7bff, 0x7bff, 0x7c29, 0x7bff, 0x7bff, 0x1078,
++      0x1332, 0x0078, 0x7c29, 0x2001, 0x000b, 0x0078, 0x7c36, 0x2001,
++      0x0003, 0x0078, 0x7c36, 0x2001, 0x0005, 0x0078, 0x7c36, 0x2001,
++      0x0001, 0x0078, 0x7c36, 0x2001, 0x0009, 0x0078, 0x7c36, 0x1078,
++      0x61cd, 0x6003, 0x0005, 0x2001, 0xa8a4, 0x2004, 0x603e, 0x1078,
++      0x62d1, 0x0078, 0x7c35, 0x0078, 0x7c29, 0x0078, 0x7c29, 0x1078,
++      0x4502, 0x0078, 0x7c6e, 0x1078, 0x61cd, 0x6003, 0x0004, 0x2001,
++      0xa8a2, 0x2004, 0x6016, 0x1078, 0x62d1, 0x007c, 0x1078, 0x4502,
++      0x1078, 0x61cd, 0x2001, 0xa8a4, 0x2004, 0x603e, 0x6003, 0x0002,
++      0x037e, 0x2019, 0xa65d, 0x2304, 0xa084, 0xff00, 0x00c0, 0x7c4d,
++      0x2019, 0xa8a2, 0x231c, 0x0078, 0x7c56, 0x8007, 0xa09a, 0x0004,
++      0x0048, 0x7c48, 0x8003, 0x801b, 0x831b, 0xa318, 0x6316, 0x037f,
++      0x1078, 0x62d1, 0x0078, 0x7c35, 0x0e7e, 0x0f7e, 0x2071, 0xa682,
++      0x2079, 0x0000, 0x1078, 0x2bd7, 0x0f7f, 0x0e7f, 0x1078, 0x61cd,
++      0x1078, 0x772d, 0x1078, 0x62d1, 0x0078, 0x7c35, 0x1078, 0x61cd,
++      0x6003, 0x0002, 0x2001, 0xa8a2, 0x2004, 0x6016, 0x1078, 0x62d1,
++      0x007c, 0x2600, 0x2008, 0x0079, 0x7c7d, 0x7c81, 0x7c81, 0x7c81,
++      0x7c6e, 0x1078, 0x1332, 0x0e7e, 0x1078, 0x8d06, 0x0040, 0x7c9f,
++      0x6010, 0x2070, 0x7038, 0xd0fc, 0x0040, 0x7c9f, 0x7007, 0x0000,
++      0x017e, 0x6004, 0xa08e, 0x0021, 0x0040, 0x7ca1, 0xa08e, 0x003d,
++      0x0040, 0x7ca1, 0x017f, 0x7037, 0x0103, 0x7033, 0x0100, 0x0e7f,
++      0x007c, 0x017f, 0x1078, 0x7ca6, 0x0078, 0x7c9f, 0x0e7e, 0xacf0,
++      0x0004, 0x2e74, 0x7000, 0x2070, 0x7037, 0x0103, 0x7023, 0x8001,
++      0x0e7f, 0x007c, 0x0d7e, 0x6618, 0x2668, 0x6804, 0xa084, 0x00ff,
++      0x0d7f, 0xa0b2, 0x000c, 0x10c8, 0x1332, 0x6604, 0xa6b6, 0x0043,
++      0x00c0, 0x7cc6, 0x1078, 0x9134, 0x0078, 0x7d25, 0x6604, 0xa6b6,
++      0x0033, 0x00c0, 0x7ccf, 0x1078, 0x90d8, 0x0078, 0x7d25, 0x6604,
++      0xa6b6, 0x0028, 0x00c0, 0x7cd8, 0x1078, 0x8f2f, 0x0078, 0x7d25,
++      0x6604, 0xa6b6, 0x0029, 0x00c0, 0x7ce1, 0x1078, 0x8f49, 0x0078,
++      0x7d25, 0x6604, 0xa6b6, 0x001f, 0x00c0, 0x7cea, 0x1078, 0x77de,
++      0x0078, 0x7d25, 0x6604, 0xa6b6, 0x0000, 0x00c0, 0x7cf3, 0x1078,
++      0x7a3b, 0x0078, 0x7d25, 0x6604, 0xa6b6, 0x0022, 0x00c0, 0x7cfc,
++      0x1078, 0x7807, 0x0078, 0x7d25, 0x6604, 0xa6b6, 0x0035, 0x00c0,
++      0x7d05, 0x1078, 0x7843, 0x0078, 0x7d25, 0x6604, 0xa6b6, 0x0039,
++      0x00c0, 0x7d0e, 0x1078, 0x79cc, 0x0078, 0x7d25, 0x6604, 0xa6b6,
++      0x003d, 0x00c0, 0x7d17, 0x1078, 0x7823, 0x0078, 0x7d25, 0xa1b6,
++      0x0015, 0x00c0, 0x7d1f, 0x1079, 0x7d2a, 0x0078, 0x7d25, 0xa1b6,
++      0x0016, 0x00c0, 0x7d26, 0x1079, 0x7e7f, 0x007c, 0x1078, 0x7773,
++      0x0078, 0x7d25, 0x7d4e, 0x7d51, 0x7d4e, 0x7d9c, 0x7d4e, 0x7e13,
++      0x7e8b, 0x7d4e, 0x7d4e, 0x7e57, 0x7d4e, 0x7e6d, 0xa1b6, 0x0048,
++      0x0040, 0x7d42, 0x20e1, 0x0005, 0x3d18, 0x3e20, 0x2c10, 0x1078,
++      0x15fa, 0x007c, 0x0e7e, 0xacf0, 0x0004, 0x2e74, 0x7000, 0x2070,
++      0x7037, 0x0103, 0x0e7f, 0x1078, 0x772d, 0x007c, 0x0005, 0x0005,
++      0x007c, 0x0e7e, 0x2071, 0xa600, 0x7080, 0xa086, 0x0074, 0x00c0,
++      0x7d85, 0x1078, 0x9f5f, 0x00c0, 0x7d77, 0x0d7e, 0x6018, 0x2068,
++      0x7030, 0xd08c, 0x0040, 0x7d6a, 0x6800, 0xd0bc, 0x0040, 0x7d6a,
++      0xc0c5, 0x6802, 0x1078, 0x7d89, 0x0d7f, 0x2001, 0x0006, 0x1078,
++      0x4502, 0x1078, 0x28a6, 0x1078, 0x772d, 0x0078, 0x7d87, 0x2001,
++      0x000a, 0x1078, 0x4502, 0x1078, 0x28a6, 0x6003, 0x0001, 0x6007,
++      0x0001, 0x1078, 0x5dd7, 0x0078, 0x7d87, 0x1078, 0x7dff, 0x0e7f,
++      0x007c, 0x6800, 0xd084, 0x0040, 0x7d9b, 0x2001, 0x0000, 0x1078,
++      0x44ee, 0x2069, 0xa652, 0x6804, 0xd0a4, 0x0040, 0x7d9b, 0x2001,
++      0x0006, 0x1078, 0x4535, 0x007c, 0x0d7e, 0x2011, 0xa620, 0x2204,
++      0xa086, 0x0074, 0x00c0, 0x7dfb, 0x6018, 0x2068, 0x6aa0, 0xa286,
++      0x007e, 0x00c0, 0x7daf, 0x1078, 0x7f9b, 0x0078, 0x7dfd, 0x1078,
++      0x7f91, 0x6018, 0x2068, 0xa080, 0x0028, 0x2014, 0xa286, 0x0080,
++      0x00c0, 0x7dd3, 0x6813, 0x00ff, 0x6817, 0xfffc, 0x6010, 0xa005,
++      0x0040, 0x7dc9, 0x2068, 0x6807, 0x0000, 0x6837, 0x0103, 0x6833,
++      0x0200, 0x2001, 0x0006, 0x1078, 0x4502, 0x1078, 0x28a6, 0x1078,
++      0x772d, 0x0078, 0x7dfd, 0x0e7e, 0x2071, 0xa633, 0x2e04, 0xd09c,
++      0x0040, 0x7dee, 0x2071, 0xab80, 0x7108, 0x720c, 0xa18c, 0x00ff,
++      0x00c0, 0x7de6, 0xa284, 0xff00, 0x0040, 0x7dee, 0x6018, 0x2070,
++      0x70a0, 0xd0bc, 0x00c0, 0x7dee, 0x7112, 0x7216, 0x0e7f, 0x2001,
++      0x0004, 0x1078, 0x4502, 0x6003, 0x0001, 0x6007, 0x0003, 0x1078,
++      0x5dd7, 0x0078, 0x7dfd, 0x1078, 0x7dff, 0x0d7f, 0x007c, 0x2001,
++      0x0007, 0x1078, 0x4502, 0x2001, 0xa600, 0x2004, 0xa086, 0x0003,
++      0x00c0, 0x7e0e, 0x2001, 0x0007, 0x1078, 0x4535, 0x1078, 0x28a6,
++      0x1078, 0x772d, 0x007c, 0x0e7e, 0x2071, 0xa600, 0x7080, 0xa086,
++      0x0014, 0x00c0, 0x7e51, 0x7000, 0xa086, 0x0003, 0x00c0, 0x7e26,
++      0x6010, 0xa005, 0x00c0, 0x7e26, 0x1078, 0x3699, 0x0d7e, 0x6018,
++      0x2068, 0x1078, 0x4649, 0x1078, 0x7d89, 0x0d7f, 0x1078, 0x8043,
++      0x00c0, 0x7e51, 0x0d7e, 0x6018, 0x2068, 0x6890, 0x0d7f, 0xa005,
++      0x0040, 0x7e51, 0x2001, 0x0006, 0x1078, 0x4502, 0x0e7e, 0x6010,
++      0xa005, 0x0040, 0x7e4a, 0x2070, 0x7007, 0x0000, 0x7037, 0x0103,
++      0x7033, 0x0200, 0x0e7f, 0x1078, 0x28a6, 0x1078, 0x772d, 0x0078,
++      0x7e55, 0x1078, 0x7c83, 0x1078, 0x7dff, 0x0e7f, 0x007c, 0x2011,
++      0xa620, 0x2204, 0xa086, 0x0014, 0x00c0, 0x7e6a, 0x2001, 0x0002,
++      0x1078, 0x4502, 0x6003, 0x0001, 0x6007, 0x0001, 0x1078, 0x5dd7,
++      0x0078, 0x7e6c, 0x1078, 0x7dff, 0x007c, 0x2011, 0xa620, 0x2204,
++      0xa086, 0x0004, 0x00c0, 0x7e7c, 0x2001, 0x0007, 0x1078, 0x4502,
++      0x1078, 0x772d, 0x0078, 0x7e7e, 0x1078, 0x7dff, 0x007c, 0x7d4e,
++      0x7e97, 0x7d4e, 0x7ed2, 0x7d4e, 0x7f44, 0x7e8b, 0x7d4e, 0x7d4e,
++      0x7f59, 0x7d4e, 0x7f6c, 0x6604, 0xa686, 0x0003, 0x0040, 0x7e13,
++      0xa6b6, 0x001e, 0x00c0, 0x7e96, 0x1078, 0x772d, 0x007c, 0x0d7e,
++      0x0c7e, 0x1078, 0x7f7f, 0x00c0, 0x7ead, 0x2001, 0x0000, 0x1078,
++      0x44ee, 0x2001, 0x0002, 0x1078, 0x4502, 0x6003, 0x0001, 0x6007,
++      0x0002, 0x1078, 0x5dd7, 0x0078, 0x7ecf, 0x2009, 0xab8e, 0x2104,
++      0xa086, 0x0009, 0x00c0, 0x7ec2, 0x6018, 0x2068, 0x6840, 0xa084,
++      0x00ff, 0xa005, 0x0040, 0x7ecd, 0x8001, 0x6842, 0x6017, 0x000a,
++      0x0078, 0x7ecf, 0x2009, 0xab8f, 0x2104, 0xa084, 0xff00, 0xa086,
++      0x1900, 0x00c0, 0x7ecd, 0x0078, 0x7ea1, 0x1078, 0x7dff, 0x0c7f,
++      0x0d7f, 0x007c, 0x1078, 0x7f8e, 0x00c0, 0x7ee6, 0x2001, 0x0000,
++      0x1078, 0x44ee, 0x2001, 0x0002, 0x1078, 0x4502, 0x6003, 0x0001,
++      0x6007, 0x0002, 0x1078, 0x5dd7, 0x0078, 0x7f12, 0x1078, 0x7c83,
++      0x2009, 0xab8e, 0x2134, 0xa6b4, 0x00ff, 0xa686, 0x0005, 0x0040,
++      0x7f13, 0xa686, 0x000b, 0x0040, 0x7f10, 0x2009, 0xab8f, 0x2104,
++      0xa084, 0xff00, 0x00c0, 0x7f00, 0xa686, 0x0009, 0x0040, 0x7f13,
++      0xa086, 0x1900, 0x00c0, 0x7f10, 0xa686, 0x0009, 0x0040, 0x7f13,
++      0x2001, 0x0004, 0x1078, 0x4502, 0x1078, 0x772d, 0x0078, 0x7f12,
++      0x1078, 0x7dff, 0x007c, 0x0d7e, 0x6010, 0x2068, 0x1078, 0x8d06,
++      0x0040, 0x7f21, 0x6838, 0xd0fc, 0x0040, 0x7f21, 0x0d7f, 0x0078,
++      0x7f10, 0x6018, 0x2068, 0x6840, 0xa084, 0x00ff, 0xa005, 0x0040,
++      0x7f32, 0x8001, 0x6842, 0x6017, 0x000a, 0x6007, 0x0016, 0x0d7f,
++      0x0078, 0x7f12, 0x68a0, 0xa086, 0x007e, 0x00c0, 0x7f3f, 0x0e7e,
++      0x2071, 0xa600, 0x1078, 0x42b8, 0x0e7f, 0x0078, 0x7f41, 0x1078,
++      0x2880, 0x0d7f, 0x0078, 0x7f10, 0x1078, 0x7f8e, 0x00c0, 0x7f54,
++      0x2001, 0x0004, 0x1078, 0x4502, 0x6003, 0x0001, 0x6007, 0x0003,
++      0x1078, 0x5dd7, 0x0078, 0x7f58, 0x1078, 0x7c83, 0x1078, 0x7dff,
++      0x007c, 0x1078, 0x7f8e, 0x00c0, 0x7f69, 0x2001, 0x0008, 0x1078,
++      0x4502, 0x6003, 0x0001, 0x6007, 0x0005, 0x1078, 0x5dd7, 0x0078,
++      0x7f6b, 0x1078, 0x7dff, 0x007c, 0x1078, 0x7f8e, 0x00c0, 0x7f7c,
++      0x2001, 0x000a, 0x1078, 0x4502, 0x6003, 0x0001, 0x6007, 0x0001,
++      0x1078, 0x5dd7, 0x0078, 0x7f7e, 0x1078, 0x7dff, 0x007c, 0x2009,
++      0xab8e, 0x2104, 0xa086, 0x0003, 0x00c0, 0x7f8d, 0x2009, 0xab8f,
++      0x2104, 0xa084, 0xff00, 0xa086, 0x2a00, 0x007c, 0xa085, 0x0001,
++      0x007c, 0x0c7e, 0x017e, 0xac88, 0x0006, 0x2164, 0x1078, 0x45d6,
++      0x017f, 0x0c7f, 0x007c, 0x0f7e, 0x0e7e, 0x0d7e, 0x037e, 0x017e,
++      0x6018, 0x2068, 0x2071, 0xa633, 0x2e04, 0xa085, 0x0003, 0x2072,
++      0x1078, 0x8014, 0x0040, 0x7fd9, 0x2009, 0xa633, 0x2104, 0xc0cd,
++      0x200a, 0x2001, 0xa653, 0x2004, 0xd0a4, 0x0040, 0x7fc2, 0xa006,
++      0x2020, 0x2009, 0x002a, 0x1078, 0xa21d, 0x2001, 0xa60c, 0x200c,
++      0xc195, 0x2102, 0x2019, 0x002a, 0x2009, 0x0001, 0x1078, 0x284f,
++      0x2071, 0xa600, 0x1078, 0x2677, 0x0c7e, 0x157e, 0x20a9, 0x0081,
++      0x2009, 0x007f, 0x1078, 0x298e, 0x8108, 0x00f0, 0x7fd2, 0x157f,
++      0x0c7f, 0x1078, 0x7f91, 0x6813, 0x00ff, 0x6817, 0xfffe, 0x2071,
++      0xab80, 0x2079, 0x0100, 0x2e04, 0xa084, 0x00ff, 0x2069, 0xa61b,
++      0x206a, 0x78e6, 0x007e, 0x8e70, 0x2e04, 0x2069, 0xa61c, 0x206a,
++      0x78ea, 0xa084, 0xff00, 0x017f, 0xa105, 0x2009, 0xa626, 0x200a,
++      0x2069, 0xab8e, 0x2071, 0xa89e, 0x6810, 0x2072, 0x6814, 0x7006,
++      0x6818, 0x700a, 0x681c, 0x700e, 0x1078, 0x906e, 0x2001, 0x0006,
++      0x1078, 0x4502, 0x1078, 0x28a6, 0x1078, 0x772d, 0x017f, 0x037f,
++      0x0d7f, 0x0e7f, 0x0f7f, 0x007c, 0x027e, 0x037e, 0x0e7e, 0x157e,
++      0x2019, 0xa626, 0x231c, 0x83ff, 0x0040, 0x803e, 0x2071, 0xab80,
++      0x2e14, 0xa294, 0x00ff, 0x7004, 0xa084, 0xff00, 0xa205, 0xa306,
++      0x00c0, 0x803e, 0x2011, 0xab96, 0xad98, 0x000a, 0x20a9, 0x0004,
++      0x1078, 0x80de, 0x00c0, 0x803e, 0x2011, 0xab9a, 0xad98, 0x0006,
++      0x20a9, 0x0004, 0x1078, 0x80de, 0x00c0, 0x803e, 0x157f, 0x0e7f,
++      0x037f, 0x027f, 0x007c, 0x0e7e, 0x2071, 0xab8c, 0x7004, 0xa086,
++      0x0014, 0x00c0, 0x8066, 0x7008, 0xa086, 0x0800, 0x00c0, 0x8066,
++      0x700c, 0xd0ec, 0x0040, 0x8064, 0xa084, 0x0f00, 0xa086, 0x0100,
++      0x00c0, 0x8064, 0x7024, 0xd0a4, 0x00c0, 0x8061, 0xd0ac, 0x0040,
++      0x8064, 0xa006, 0x0078, 0x8066, 0xa085, 0x0001, 0x0e7f, 0x007c,
++      0x0e7e, 0x0d7e, 0x0c7e, 0x077e, 0x057e, 0x047e, 0x027e, 0x007e,
++      0x127e, 0x2091, 0x8000, 0x2029, 0xa8ba, 0x252c, 0x2021, 0xa8c0,
++      0x2424, 0x2061, 0xad00, 0x2071, 0xa600, 0x7248, 0x7064, 0xa202,
++      0x00c8, 0x80cc, 0x1078, 0xa242, 0x0040, 0x80c4, 0x671c, 0xa786,
++      0x0001, 0x0040, 0x80c4, 0xa786, 0x0007, 0x0040, 0x80c4, 0x2500,
++      0xac06, 0x0040, 0x80c4, 0x2400, 0xac06, 0x0040, 0x80c4, 0x0c7e,
++      0x6000, 0xa086, 0x0004, 0x00c0, 0x809f, 0x1078, 0x1757, 0xa786,
++      0x0008, 0x00c0, 0x80ae, 0x1078, 0x8f00, 0x00c0, 0x80ae, 0x0c7f,
++      0x1078, 0x7c83, 0x1078, 0x8ec6, 0x0078, 0x80c4, 0x6010, 0x2068,
++      0x1078, 0x8d06, 0x0040, 0x80c1, 0xa786, 0x0003, 0x00c0, 0x80d6,
++      0x6837, 0x0103, 0x6b4a, 0x6847, 0x0000, 0x1078, 0x4a73, 0x1078,
++      0x8eb9, 0x1078, 0x8ec6, 0x0c7f, 0xace0, 0x0010, 0x7058, 0xac02,
++      0x00c8, 0x80cc, 0x0078, 0x807d, 0x127f, 0x007f, 0x027f, 0x047f,
++      0x057f, 0x077f, 0x0c7f, 0x0d7f, 0x0e7f, 0x007c, 0xa786, 0x0006,
++      0x00c0, 0x80b8, 0x1078, 0xa1ca, 0x0078, 0x80c1, 0x220c, 0x2304,
++      0xa106, 0x00c0, 0x80e9, 0x8210, 0x8318, 0x00f0, 0x80de, 0xa006,
++      0x007c, 0x2304, 0xa102, 0x0048, 0x80f1, 0x2001, 0x0001, 0x0078,
++      0x80f3, 0x2001, 0x0000, 0xa18d, 0x0001, 0x007c, 0x6004, 0xa08a,
++      0x0044, 0x10c8, 0x1332, 0x1078, 0x8eec, 0x0040, 0x8105, 0x1078,
++      0x8f00, 0x0040, 0x8112, 0x0078, 0x810b, 0x1078, 0x28a6, 0x1078,
++      0x8f00, 0x0040, 0x8112, 0x1078, 0x61cd, 0x1078, 0x772d, 0x1078,
++      0x62d1, 0x007c, 0x1078, 0x7c83, 0x0078, 0x810b, 0xa182, 0x0040,
++      0x0079, 0x811a, 0x812d, 0x812d, 0x812d, 0x812d, 0x812d, 0x812d,
++      0x812d, 0x812d, 0x812d, 0x812d, 0x812d, 0x812f, 0x812f, 0x812f,
++      0x812f, 0x812d, 0x812d, 0x812d, 0x812f, 0x1078, 0x1332, 0x600b,
++      0xffff, 0x6003, 0x0001, 0x6106, 0x1078, 0x5d8a, 0x127e, 0x2091,
++      0x8000, 0x1078, 0x62d1, 0x127f, 0x007c, 0xa186, 0x0013, 0x00c0,
++      0x8146, 0x6004, 0xa082, 0x0040, 0x0079, 0x81d1, 0xa186, 0x0027,
++      0x00c0, 0x8168, 0x1078, 0x61cd, 0x1078, 0x2880, 0x0d7e, 0x6110,
++      0x2168, 0x1078, 0x8d06, 0x0040, 0x8162, 0x6837, 0x0103, 0x684b,
++      0x0029, 0x6847, 0x0000, 0x694c, 0xc1c5, 0x694e, 0x1078, 0x4a73,
++      0x1078, 0x8eb9, 0x0d7f, 0x1078, 0x772d, 0x1078, 0x62d1, 0x007c,
++      0xa186, 0x0014, 0x00c0, 0x8171, 0x6004, 0xa082, 0x0040, 0x0079,
++      0x8199, 0xa186, 0x0046, 0x0040, 0x817d, 0xa186, 0x0045, 0x0040,
++      0x817d, 0xa186, 0x0047, 0x10c0, 0x1332, 0x2001, 0x0109, 0x2004,
++      0xd084, 0x0040, 0x8196, 0x127e, 0x2091, 0x2200, 0x007e, 0x017e,
++      0x027e, 0x1078, 0x5c56, 0x027f, 0x017f, 0x007f, 0x127f, 0x6000,
++      0xa086, 0x0002, 0x00c0, 0x8196, 0x0078, 0x820e, 0x1078, 0x7773,
++      0x007c, 0x81ae, 0x81ac, 0x81ac, 0x81ac, 0x81ac, 0x81ac, 0x81ac,
++      0x81ac, 0x81ac, 0x81ac, 0x81ac, 0x81ca, 0x81ca, 0x81ca, 0x81ca,
++      0x81ac, 0x81ca, 0x81ac, 0x81ca, 0x1078, 0x1332, 0x1078, 0x61cd,
++      0x0d7e, 0x6110, 0x2168, 0x1078, 0x8d06, 0x0040, 0x81c4, 0x6837,
++      0x0103, 0x684b, 0x0006, 0x6847, 0x0000, 0x6850, 0xc0ec, 0x6852,
++      0x1078, 0x4a73, 0x1078, 0x8eb9, 0x0d7f, 0x1078, 0x772d, 0x1078,
++      0x62d1, 0x007c, 0x1078, 0x61cd, 0x1078, 0x772d, 0x1078, 0x62d1,
++      0x007c, 0x81e6, 0x81e4, 0x81e4, 0x81e4, 0x81e4, 0x81e4, 0x81e4,
++      0x81e4, 0x81e4, 0x81e4, 0x81e4, 0x81f8, 0x81f8, 0x81f8, 0x81f8,
++      0x81e4, 0x8207, 0x81e4, 0x81f8, 0x1078, 0x1332, 0x1078, 0x61cd,
++      0x2001, 0xa8a4, 0x2004, 0x603e, 0x6003, 0x0002, 0x1078, 0x62d1,
++      0x6010, 0xa088, 0x0013, 0x2104, 0xa085, 0x0400, 0x200a, 0x007c,
++      0x1078, 0x61cd, 0x2001, 0xa8a2, 0x2004, 0x6016, 0x2001, 0xa8a4,
++      0x2004, 0x603e, 0x6003, 0x000f, 0x1078, 0x62d1, 0x007c, 0x1078,
++      0x61cd, 0x1078, 0x772d, 0x1078, 0x62d1, 0x007c, 0xa182, 0x0040,
++      0x0079, 0x8212, 0x8225, 0x8225, 0x8225, 0x8225, 0x8225, 0x8227,
++      0x8327, 0x8359, 0x8225, 0x8225, 0x8225, 0x8225, 0x8225, 0x8225,
++      0x8225, 0x8225, 0x8225, 0x8225, 0x8225, 0x1078, 0x1332, 0x0e7e,
++      0x0d7e, 0x603f, 0x0000, 0x2071, 0xab80, 0x7124, 0x610a, 0x2071,
++      0xab8c, 0x6110, 0x2168, 0x7614, 0xa6b4, 0x0fff, 0x86ff, 0x0040,
++      0x82e9, 0xa68c, 0x0c00, 0x0040, 0x825e, 0x0f7e, 0x2c78, 0x1078,
++      0x4963, 0x0f7f, 0x0040, 0x825a, 0x684c, 0xd0ac, 0x0040, 0x825a,
++      0x6024, 0xd0dc, 0x00c0, 0x825a, 0x6850, 0xd0bc, 0x00c0, 0x825a,
++      0x7318, 0x6814, 0xa306, 0x00c0, 0x8301, 0x731c, 0x6810, 0xa306,
++      0x00c0, 0x8301, 0x7318, 0x6b62, 0x731c, 0x6b5e, 0xa68c, 0x00ff,
++      0xa186, 0x0002, 0x0040, 0x8291, 0xa186, 0x0028, 0x00c0, 0x826e,
++      0x1078, 0x8eda, 0x684b, 0x001c, 0x0078, 0x8293, 0xd6dc, 0x0040,
++      0x828a, 0x684b, 0x0015, 0x684c, 0xd0ac, 0x0040, 0x8288, 0x6914,
++      0x6a10, 0x2100, 0xa205, 0x0040, 0x8288, 0x7018, 0xa106, 0x00c0,
++      0x8285, 0x701c, 0xa206, 0x0040, 0x8288, 0x6962, 0x6a5e, 0xc6dc,
++      0x0078, 0x8293, 0xd6d4, 0x0040, 0x8291, 0x684b, 0x0007, 0x0078,
++      0x8293, 0x684b, 0x0000, 0x6837, 0x0103, 0x6e46, 0xa01e, 0xd6c4,
++      0x0040, 0x82bc, 0xa686, 0x0100, 0x00c0, 0x82a7, 0x2001, 0xab99,
++      0x2004, 0xa005, 0x00c0, 0x82a7, 0xc6c4, 0x0078, 0x8236, 0x7328,
++      0x732c, 0x6b56, 0x83ff, 0x0040, 0x82bc, 0xa38a, 0x0009, 0x0048,
++      0x82b3, 0x2019, 0x0008, 0x037e, 0x2308, 0x2019, 0xab98, 0xad90,
++      0x0019, 0x1078, 0x89e2, 0x037f, 0xd6cc, 0x0040, 0x8317, 0x7124,
++      0x695a, 0x81ff, 0x0040, 0x8317, 0xa192, 0x0021, 0x00c8, 0x82d5,
++      0x2071, 0xab98, 0x831c, 0x2300, 0xae18, 0xad90, 0x001d, 0x1078,
++      0x89e2, 0x1078, 0x91f4, 0x0078, 0x8317, 0x6838, 0xd0fc, 0x0040,
++      0x82de, 0x2009, 0x0020, 0x695a, 0x0078, 0x82c8, 0x0f7e, 0x2d78,
++      0x1078, 0x897a, 0x0f7f, 0x1078, 0x91f4, 0x1078, 0x89cf, 0x0078,
++      0x8319, 0x0f7e, 0x2c78, 0x1078, 0x4963, 0x0f7f, 0x0040, 0x8307,
++      0x684c, 0xd0ac, 0x0040, 0x8307, 0x6024, 0xd0dc, 0x00c0, 0x8307,
++      0x6850, 0xd0bc, 0x00c0, 0x8307, 0x6810, 0x6914, 0xa105, 0x0040,
++      0x8307, 0x1078, 0x8fbf, 0x0d7f, 0x0e7f, 0x0078, 0x8326, 0x684b,
++      0x0000, 0x6837, 0x0103, 0x6e46, 0x684c, 0xd0ac, 0x0040, 0x8317,
++      0x6810, 0x6914, 0xa115, 0x0040, 0x8317, 0x1078, 0x84d5, 0x1078,
++      0x4a73, 0x6218, 0x2268, 0x6a3c, 0x8211, 0x6a3e, 0x1078, 0x8f89,
++      0x0d7f, 0x0e7f, 0x00c0, 0x8326, 0x1078, 0x772d, 0x007c, 0x0f7e,
++      0x6003, 0x0003, 0x2079, 0xab8c, 0x7c04, 0x7b00, 0x7e0c, 0x7d08,
++      0x6010, 0x2078, 0x784c, 0xd0ac, 0x0040, 0x833e, 0x6003, 0x0002,
++      0x0f7f, 0x007c, 0x2130, 0x2228, 0x0078, 0x834a, 0x2400, 0x797c,
++      0xa10a, 0x2300, 0x7a80, 0xa213, 0x2600, 0xa102, 0x2500, 0xa203,
++      0x0048, 0x833a, 0x7c12, 0x7b16, 0x7e0a, 0x7d0e, 0x0f7f, 0x603f,
++      0x0000, 0x2c10, 0x1078, 0x1cf0, 0x1078, 0x5df6, 0x1078, 0x639b,
++      0x007c, 0x2001, 0xa8a4, 0x2004, 0x603e, 0x6003, 0x0004, 0x6110,
++      0x20e1, 0x0005, 0x3d18, 0x3e20, 0x2c10, 0x1078, 0x15fa, 0x007c,
++      0xa182, 0x0040, 0x0079, 0x836c, 0x837f, 0x837f, 0x837f, 0x837f,
++      0x837f, 0x8381, 0x8424, 0x837f, 0x837f, 0x843a, 0x84ab, 0x837f,
++      0x837f, 0x837f, 0x837f, 0x84ba, 0x837f, 0x837f, 0x837f, 0x1078,
++      0x1332, 0x077e, 0x0f7e, 0x0e7e, 0x0d7e, 0x2071, 0xab8c, 0x6110,
++      0x2178, 0x7614, 0xa6b4, 0x0fff, 0x7e46, 0x7f4c, 0xc7e5, 0x7f4e,
++      0x6218, 0x2268, 0x6a3c, 0x8211, 0x6a3e, 0x86ff, 0x0040, 0x841f,
++      0xa694, 0xff00, 0xa284, 0x0c00, 0x0040, 0x83a2, 0x7018, 0x7862,
++      0x701c, 0x785e, 0xa284, 0x0300, 0x0040, 0x841f, 0x1078, 0x138b,
++      0x1040, 0x1332, 0x2d00, 0x784a, 0x7f4c, 0xc7cd, 0x7f4e, 0x6837,
++      0x0103, 0x7838, 0x683a, 0x783c, 0x683e, 0x7840, 0x6842, 0x6e46,
++      0xa68c, 0x0c00, 0x0040, 0x83c0, 0x7318, 0x6b62, 0x731c, 0x6b5e,
++      0xa68c, 0x00ff, 0xa186, 0x0002, 0x0040, 0x83dc, 0xa186, 0x0028,
++      0x00c0, 0x83ce, 0x684b, 0x001c, 0x0078, 0x83de, 0xd6dc, 0x0040,
++      0x83d5, 0x684b, 0x0015, 0x0078, 0x83de, 0xd6d4, 0x0040, 0x83dc,
++      0x684b, 0x0007, 0x0078, 0x83de, 0x684b, 0x0000, 0x6f4e, 0x7850,
++      0x6852, 0x7854, 0x6856, 0xa01e, 0xd6c4, 0x0040, 0x83fc, 0x7328,
++      0x732c, 0x6b56, 0x83ff, 0x0040, 0x83fc, 0xa38a, 0x0009, 0x0048,
++      0x83f3, 0x2019, 0x0008, 0x037e, 0x2308, 0x2019, 0xab98, 0xad90,
++      0x0019, 0x1078, 0x89e2, 0x037f, 0xd6cc, 0x0040, 0x841f, 0x7124,
++      0x695a, 0x81ff, 0x0040, 0x841f, 0xa192, 0x0021, 0x00c8, 0x8413,
++      0x2071, 0xab98, 0x831c, 0x2300, 0xae18, 0xad90, 0x001d, 0x1078,
++      0x89e2, 0x0078, 0x841f, 0x7838, 0xd0fc, 0x0040, 0x841c, 0x2009,
++      0x0020, 0x695a, 0x0078, 0x8408, 0x2d78, 0x1078, 0x897a, 0x0d7f,
++      0x0e7f, 0x0f7f, 0x077f, 0x007c, 0x0f7e, 0x6003, 0x0003, 0x2079,
++      0xab8c, 0x7c04, 0x7b00, 0x7e0c, 0x7d08, 0x6010, 0x2078, 0x7c12,
++      0x7b16, 0x7e0a, 0x7d0e, 0x0f7f, 0x2c10, 0x1078, 0x1cf0, 0x1078,
++      0x6df4, 0x007c, 0x0d7e, 0x0f7e, 0x2c78, 0x1078, 0x4963, 0x0f7f,
++      0x0040, 0x8446, 0x2001, 0xa8a4, 0x2004, 0x603e, 0x6003, 0x0002,
++      0x1078, 0x627a, 0x1078, 0x639b, 0x6110, 0x2168, 0x694c, 0xd1e4,
++      0x0040, 0x84a9, 0xd1cc, 0x0040, 0x8480, 0x6948, 0x6838, 0xd0fc,
++      0x0040, 0x8478, 0x017e, 0x684c, 0x007e, 0x6850, 0x007e, 0xad90,
++      0x000d, 0xa198, 0x000d, 0x2009, 0x0020, 0x157e, 0x21a8, 0x2304,
++      0x2012, 0x8318, 0x8210, 0x00f0, 0x8467, 0x157f, 0x007f, 0x6852,
++      0x007f, 0x684e, 0x017f, 0x2168, 0x1078, 0x13b4, 0x0078, 0x84a3,
++      0x017e, 0x1078, 0x13b4, 0x0d7f, 0x1078, 0x89cf, 0x0078, 0x84a3,
++      0x6837, 0x0103, 0x6944, 0xa184, 0x00ff, 0xa0b6, 0x0002, 0x0040,
++      0x849f, 0xa086, 0x0028, 0x00c0, 0x8491, 0x684b, 0x001c, 0x0078,
++      0x84a1, 0xd1dc, 0x0040, 0x8498, 0x684b, 0x0015, 0x0078, 0x84a1,
++      0xd1d4, 0x0040, 0x849f, 0x684b, 0x0007, 0x0078, 0x84a1, 0x684b,
++      0x0000, 0x1078, 0x4a73, 0x1078, 0x8f89, 0x00c0, 0x84a9, 0x1078,
++      0x772d, 0x0d7f, 0x007c, 0x2019, 0x0001, 0x1078, 0x7058, 0x6003,
++      0x0002, 0x2001, 0xa8a4, 0x2004, 0x603e, 0x1078, 0x627a, 0x1078,
++      0x639b, 0x007c, 0x1078, 0x627a, 0x1078, 0x2880, 0x0d7e, 0x6110,
++      0x2168, 0x1078, 0x8d06, 0x0040, 0x84cf, 0x6837, 0x0103, 0x684b,
++      0x0029, 0x6847, 0x0000, 0x1078, 0x4a73, 0x1078, 0x8eb9, 0x0d7f,
++      0x1078, 0x772d, 0x1078, 0x639b, 0x007c, 0x684b, 0x0015, 0xd1fc,
++      0x0040, 0x84e1, 0x684b, 0x0007, 0x8002, 0x8000, 0x810a, 0xa189,
++      0x0000, 0x6962, 0x685e, 0x007c, 0xa182, 0x0040, 0x0079, 0x84e8,
++      0x84fb, 0x84fb, 0x84fb, 0x84fb, 0x84fb, 0x84fd, 0x84fb, 0x85d0,
++      0x85dc, 0x84fb, 0x84fb, 0x84fb, 0x84fb, 0x84fb, 0x84fb, 0x84fb,
++      0x84fb, 0x84fb, 0x84fb, 0x1078, 0x1332, 0x077e, 0x0f7e, 0x0e7e,
++      0x0d7e, 0x2071, 0xab8c, 0x6110, 0x2178, 0x7614, 0xa6b4, 0x0fff,
++      0x0f7e, 0x2c78, 0x1078, 0x4963, 0x0f7f, 0x0040, 0x851b, 0xa684,
++      0x00ff, 0x00c0, 0x851b, 0x6024, 0xd0f4, 0x0040, 0x851b, 0x1078,
++      0x8fbf, 0x0078, 0x85cb, 0x7e46, 0x7f4c, 0xc7e5, 0x7f4e, 0x6218,
++      0x2268, 0x6a3c, 0x8211, 0x6a3e, 0x86ff, 0x0040, 0x85c0, 0xa694,
++      0xff00, 0xa284, 0x0c00, 0x0040, 0x8531, 0x7018, 0x7862, 0x701c,
++      0x785e, 0xa284, 0x0300, 0x0040, 0x85bd, 0xa686, 0x0100, 0x00c0,
++      0x8543, 0x2001, 0xab99, 0x2004, 0xa005, 0x00c0, 0x8543, 0xc6c4,
++      0x7e46, 0x0078, 0x8524, 0x1078, 0x138b, 0x1040, 0x1332, 0x2d00,
++      0x784a, 0x7f4c, 0xa7bd, 0x0200, 0x7f4e, 0x6837, 0x0103, 0x7838,
++      0x683a, 0x783c, 0x683e, 0x7840, 0x6842, 0x6e46, 0xa68c, 0x0c00,
++      0x0040, 0x855e, 0x7318, 0x6b62, 0x731c, 0x6b5e, 0xa68c, 0x00ff,
++      0xa186, 0x0002, 0x0040, 0x857a, 0xa186, 0x0028, 0x00c0, 0x856c,
++      0x684b, 0x001c, 0x0078, 0x857c, 0xd6dc, 0x0040, 0x8573, 0x684b,
++      0x0015, 0x0078, 0x857c, 0xd6d4, 0x0040, 0x857a, 0x684b, 0x0007,
++      0x0078, 0x857c, 0x684b, 0x0000, 0x6f4e, 0x7850, 0x6852, 0x7854,
++      0x6856, 0xa01e, 0xd6c4, 0x0040, 0x859a, 0x7328, 0x732c, 0x6b56,
++      0x83ff, 0x0040, 0x859a, 0xa38a, 0x0009, 0x0048, 0x8591, 0x2019,
++      0x0008, 0x037e, 0x2308, 0x2019, 0xab98, 0xad90, 0x0019, 0x1078,
++      0x89e2, 0x037f, 0xd6cc, 0x0040, 0x85bd, 0x7124, 0x695a, 0x81ff,
++      0x0040, 0x85bd, 0xa192, 0x0021, 0x00c8, 0x85b1, 0x2071, 0xab98,
++      0x831c, 0x2300, 0xae18, 0xad90, 0x001d, 0x1078, 0x89e2, 0x0078,
++      0x85bd, 0x7838, 0xd0fc, 0x0040, 0x85ba, 0x2009, 0x0020, 0x695a,
++      0x0078, 0x85a6, 0x2d78, 0x1078, 0x897a, 0xd6dc, 0x00c0, 0x85c3,
++      0xa006, 0x0078, 0x85c9, 0x2001, 0x0001, 0x2071, 0xab8c, 0x7218,
++      0x731c, 0x1078, 0x1653, 0x0d7f, 0x0e7f, 0x0f7f, 0x077f, 0x007c,
++      0x2001, 0xa8a4, 0x2004, 0x603e, 0x20e1, 0x0005, 0x3d18, 0x3e20,
++      0x2c10, 0x1078, 0x15fa, 0x007c, 0x2001, 0xa8a4, 0x2004, 0x603e,
++      0x0d7e, 0x6003, 0x0002, 0x6110, 0x2168, 0x694c, 0xd1e4, 0x0040,
++      0x870c, 0x603f, 0x0000, 0x0f7e, 0x2c78, 0x1078, 0x4963, 0x0f7f,
++      0x0040, 0x8622, 0x6814, 0x6910, 0xa115, 0x0040, 0x8622, 0x6a60,
++      0xa206, 0x00c0, 0x85ff, 0x685c, 0xa106, 0x0040, 0x8622, 0x684c,
++      0xc0e4, 0x684e, 0x6847, 0x0000, 0x6863, 0x0000, 0x685f, 0x0000,
++      0x6024, 0xd0f4, 0x00c0, 0x8617, 0x697c, 0x6810, 0xa102, 0x603a,
++      0x6980, 0x6814, 0xa103, 0x6036, 0x6024, 0xc0f5, 0x6026, 0x0d7e,
++      0x6018, 0x2068, 0x683c, 0x8000, 0x683e, 0x0d7f, 0x1078, 0x8fbf,
++      0x0078, 0x870c, 0x694c, 0xd1cc, 0x0040, 0x86d1, 0x6948, 0x6838,
++      0xd0fc, 0x0040, 0x8689, 0x017e, 0x684c, 0x007e, 0x6850, 0x007e,
++      0x0f7e, 0x2178, 0x7944, 0xa184, 0x00ff, 0xa0b6, 0x0002, 0x0040,
++      0x865c, 0xa086, 0x0028, 0x00c0, 0x8643, 0x684b, 0x001c, 0x784b,
++      0x001c, 0x0078, 0x8667, 0xd1dc, 0x0040, 0x8653, 0x684b, 0x0015,
++      0x784b, 0x0015, 0x1078, 0x916c, 0x0040, 0x8651, 0x7944, 0xc1dc,
++      0x7946, 0x0078, 0x8667, 0xd1d4, 0x0040, 0x865c, 0x684b, 0x0007,
++      0x784b, 0x0007, 0x0078, 0x8667, 0x684c, 0xd0ac, 0x0040, 0x8667,
++      0x6810, 0x6914, 0xa115, 0x0040, 0x8667, 0x1078, 0x84d5, 0x6848,
++      0x784a, 0x6860, 0x7862, 0x685c, 0x785e, 0xad90, 0x000d, 0xaf98,
++      0x000d, 0x2009, 0x0020, 0x157e, 0x21a8, 0x2304, 0x2012, 0x8318,
++      0x8210, 0x00f0, 0x8675, 0x157f, 0x0f7f, 0x007f, 0x6852, 0x007f,
++      0x684e, 0x1078, 0x91f4, 0x017f, 0x2168, 0x1078, 0x13b4, 0x0078,
++      0x8706, 0x017e, 0x0f7e, 0x2178, 0x7944, 0xa184, 0x00ff, 0xa0b6,
++      0x0002, 0x0040, 0x86b6, 0xa086, 0x0028, 0x00c0, 0x869d, 0x684b,
++      0x001c, 0x784b, 0x001c, 0x0078, 0x86c1, 0xd1dc, 0x0040, 0x86ad,
++      0x684b, 0x0015, 0x784b, 0x0015, 0x1078, 0x916c, 0x0040, 0x86ab,
++      0x7944, 0xc1dc, 0x7946, 0x0078, 0x86c1, 0xd1d4, 0x0040, 0x86b6,
++      0x684b, 0x0007, 0x784b, 0x0007, 0x0078, 0x86c1, 0x684c, 0xd0ac,
++      0x0040, 0x86c1, 0x6810, 0x6914, 0xa115, 0x0040, 0x86c1, 0x1078,
++      0x84d5, 0x6860, 0x7862, 0x685c, 0x785e, 0x684c, 0x784e, 0x0f7f,
++      0x1078, 0x13b4, 0x0d7f, 0x1078, 0x91f4, 0x1078, 0x89cf, 0x0078,
++      0x8706, 0x6837, 0x0103, 0x6944, 0xa184, 0x00ff, 0xa0b6, 0x0002,
++      0x0040, 0x86f7, 0xa086, 0x0028, 0x00c0, 0x86e2, 0x684b, 0x001c,
++      0x0078, 0x8704, 0xd1dc, 0x0040, 0x86f0, 0x684b, 0x0015, 0x1078,
++      0x916c, 0x0040, 0x86ee, 0x6944, 0xc1dc, 0x6946, 0x0078, 0x8704,
++      0xd1d4, 0x0040, 0x86f7, 0x684b, 0x0007, 0x0078, 0x8704, 0x684b,
++      0x0000, 0x684c, 0xd0ac, 0x0040, 0x8704, 0x6810, 0x6914, 0xa115,
++      0x0040, 0x8704, 0x1078, 0x84d5, 0x1078, 0x4a73, 0x1078, 0x8f89,
++      0x00c0, 0x870c, 0x1078, 0x772d, 0x0d7f, 0x007c, 0x1078, 0x61cd,
++      0x0078, 0x8714, 0x1078, 0x627a, 0x1078, 0x8d06, 0x0040, 0x8733,
++      0x0d7e, 0x6110, 0x2168, 0x6837, 0x0103, 0x2009, 0xa60c, 0x210c,
++      0xd18c, 0x00c0, 0x873e, 0xd184, 0x00c0, 0x873a, 0x6108, 0x694a,
++      0xa18e, 0x0029, 0x00c0, 0x872e, 0x1078, 0xa4e2, 0x6847, 0x0000,
++      0x1078, 0x4a73, 0x0d7f, 0x1078, 0x772d, 0x1078, 0x62d1, 0x1078,
++      0x639b, 0x007c, 0x684b, 0x0004, 0x0078, 0x872e, 0x684b, 0x0004,
++      0x0078, 0x872e, 0xa182, 0x0040, 0x0079, 0x8746, 0x8759, 0x8759,
++      0x8759, 0x8759, 0x8759, 0x875b, 0x8759, 0x875e, 0x8759, 0x8759,
++      0x8759, 0x8759, 0x8759, 0x8759, 0x8759, 0x8759, 0x8759, 0x8759,
++      0x8759, 0x1078, 0x1332, 0x1078, 0x772d, 0x007c, 0x007e, 0x027e,
++      0xa016, 0x1078, 0x15fa, 0x027f, 0x007f, 0x007c, 0xa182, 0x0085,
++      0x0079, 0x876a, 0x8773, 0x8771, 0x8771, 0x877f, 0x8771, 0x8771,
++      0x8771, 0x1078, 0x1332, 0x6003, 0x0001, 0x6106, 0x1078, 0x5d8a,
++      0x127e, 0x2091, 0x8000, 0x1078, 0x62d1, 0x127f, 0x007c, 0x027e,
++      0x057e, 0x0d7e, 0x0e7e, 0x2071, 0xab80, 0x7224, 0x6212, 0x7220,
++      0x1078, 0x8cf2, 0x0040, 0x87a4, 0x2268, 0x6800, 0xa086, 0x0000,
++      0x0040, 0x87a4, 0x6018, 0x6d18, 0xa52e, 0x00c0, 0x87a4, 0x0c7e,
++      0x2d60, 0x1078, 0x89f3, 0x0c7f, 0x0040, 0x87a4, 0x6803, 0x0002,
++      0x6007, 0x0086, 0x0078, 0x87a6, 0x6007, 0x0087, 0x6003, 0x0001,
++      0x1078, 0x5d8a, 0x1078, 0x62d1, 0x0f7e, 0x2278, 0x1078, 0x4963,
++      0x0f7f, 0x0040, 0x87be, 0x6824, 0xd0ec, 0x0040, 0x87be, 0x0c7e,
++      0x2260, 0x603f, 0x0000, 0x1078, 0x8fbf, 0x0c7f, 0x0e7f, 0x0d7f,
++      0x057f, 0x027f, 0x007c, 0xa186, 0x0013, 0x00c0, 0x87d4, 0x6004,
++      0xa08a, 0x0085, 0x1048, 0x1332, 0xa08a, 0x008c, 0x10c8, 0x1332,
++      0xa082, 0x0085, 0x0079, 0x87e3, 0xa186, 0x0027, 0x0040, 0x87dc,
++      0xa186, 0x0014, 0x10c0, 0x1332, 0x1078, 0x61cd, 0x1078, 0x8ec6,
++      0x1078, 0x62d1, 0x007c, 0x87ea, 0x87ec, 0x87ec, 0x87ea, 0x87ea,
++      0x87ea, 0x87ea, 0x1078, 0x1332, 0x1078, 0x61cd, 0x1078, 0x8ec6,
++      0x1078, 0x62d1, 0x007c, 0xa186, 0x0013, 0x00c0, 0x87fd, 0x6004,
++      0xa082, 0x0085, 0x2008, 0x0078, 0x8838, 0xa186, 0x0027, 0x00c0,
++      0x8820, 0x1078, 0x61cd, 0x1078, 0x2880, 0x0d7e, 0x6010, 0x2068,
++      0x1078, 0x8d06, 0x0040, 0x8816, 0x6837, 0x0103, 0x6847, 0x0000,
++      0x684b, 0x0029, 0x1078, 0x4a73, 0x1078, 0x8eb9, 0x0d7f, 0x1078,
++      0x772d, 0x1078, 0x62d1, 0x007c, 0x1078, 0x7773, 0x0078, 0x881b,
++      0xa186, 0x0014, 0x00c0, 0x881c, 0x1078, 0x61cd, 0x0d7e, 0x6010,
++      0x2068, 0x1078, 0x8d06, 0x0040, 0x8816, 0x6837, 0x0103, 0x6847,
++      0x0000, 0x684b, 0x0006, 0x6850, 0xc0ec, 0x6852, 0x0078, 0x8812,
++      0x0079, 0x883a, 0x8843, 0x8841, 0x8841, 0x8841, 0x8841, 0x8841,
++      0x885e, 0x1078, 0x1332, 0x1078, 0x61cd, 0x6030, 0xa08c, 0xff00,
++      0x810f, 0xa186, 0x0039, 0x0040, 0x8851, 0xa186, 0x0035, 0x00c0,
++      0x8855, 0x2001, 0xa8a2, 0x0078, 0x8857, 0x2001, 0xa8a3, 0x2004,
++      0x6016, 0x6003, 0x000c, 0x1078, 0x62d1, 0x007c, 0x1078, 0x61cd,
++      0x6030, 0xa08c, 0xff00, 0x810f, 0xa186, 0x0039, 0x0040, 0x886c,
++      0xa186, 0x0035, 0x00c0, 0x8870, 0x2001, 0xa8a2, 0x0078, 0x8872,
++      0x2001, 0xa8a3, 0x2004, 0x6016, 0x6003, 0x000e, 0x1078, 0x62d1,
++      0x007c, 0xa182, 0x008c, 0x00c8, 0x8883, 0xa182, 0x0085, 0x0048,
++      0x8883, 0x0079, 0x8886, 0x1078, 0x7773, 0x007c, 0x888d, 0x888d,
++      0x888d, 0x888d, 0x888f, 0x88ec, 0x888d, 0x1078, 0x1332, 0x0f7e,
++      0x2c78, 0x1078, 0x4963, 0x0f7f, 0x0040, 0x88a2, 0x6030, 0xa08c,
++      0xff00, 0x810f, 0xa186, 0x0039, 0x0040, 0x8903, 0xa186, 0x0035,
++      0x0040, 0x8903, 0x0d7e, 0x1078, 0x8d06, 0x00c0, 0x88ab, 0x1078,
++      0x8eb9, 0x0078, 0x88ce, 0x6010, 0x2068, 0x684c, 0xd0e4, 0x00c0,
++      0x88b3, 0x1078, 0x8eb9, 0x6837, 0x0103, 0x6850, 0xd0b4, 0x0040,
++      0x88bf, 0x684b, 0x0006, 0xc0ec, 0x6852, 0x0078, 0x88ca, 0xd0bc,
++      0x0040, 0x88c6, 0x684b, 0x0002, 0x0078, 0x88ca, 0x684b, 0x0005,
++      0x1078, 0x8f85, 0x6847, 0x0000, 0x1078, 0x4a73, 0x2c68, 0x1078,
++      0x76c7, 0x0040, 0x88e7, 0x6003, 0x0001, 0x6007, 0x001e, 0x2009,
++      0xab8e, 0x210c, 0x6136, 0x2009, 0xab8f, 0x210c, 0x613a, 0x6918,
++      0x611a, 0x6920, 0x6122, 0x601f, 0x0001, 0x1078, 0x5d8a, 0x2d60,
++      0x1078, 0x772d, 0x0d7f, 0x007c, 0x0f7e, 0x2c78, 0x1078, 0x4963,
++      0x0f7f, 0x0040, 0x8929, 0x6030, 0xa08c, 0xff00, 0x810f, 0xa186,
++      0x0035, 0x0040, 0x8903, 0xa186, 0x001e, 0x0040, 0x8903, 0xa186,
++      0x0039, 0x00c0, 0x8929, 0x0d7e, 0x2c68, 0x1078, 0x91bc, 0x00c0,
++      0x894d, 0x1078, 0x76c7, 0x0040, 0x8926, 0x6106, 0x6003, 0x0001,
++      0x601f, 0x0001, 0x6918, 0x611a, 0x6928, 0x612a, 0x692c, 0x612e,
++      0x6930, 0xa18c, 0x00ff, 0x6132, 0x6934, 0x6136, 0x6938, 0x613a,
++      0x6920, 0x6122, 0x1078, 0x5d8a, 0x1078, 0x62d1, 0x2d60, 0x0078,
++      0x894d, 0x0d7e, 0x6010, 0x2068, 0x1078, 0x8d06, 0x0040, 0x894d,
++      0x6837, 0x0103, 0x6850, 0xd0b4, 0x0040, 0x893c, 0xc0ec, 0x6852,
++      0x684b, 0x0006, 0x0078, 0x8947, 0xd0bc, 0x0040, 0x8943, 0x684b,
++      0x0002, 0x0078, 0x8947, 0x684b, 0x0005, 0x1078, 0x8f85, 0x6847,
++      0x0000, 0x1078, 0x4a73, 0x1078, 0x8eb9, 0x0d7f, 0x1078, 0x772d,
++      0x007c, 0x017e, 0x0d7e, 0x6010, 0x2068, 0x1078, 0x8d06, 0x0040,
++      0x8961, 0x6837, 0x0103, 0x684b, 0x0028, 0x6847, 0x0000, 0x1078,
++      0x4a73, 0x0d7f, 0x017f, 0xa186, 0x0013, 0x0040, 0x8973, 0xa186,
++      0x0014, 0x0040, 0x8973, 0xa186, 0x0027, 0x0040, 0x8973, 0x1078,
++      0x7773, 0x0078, 0x8979, 0x1078, 0x61cd, 0x1078, 0x8ec6, 0x1078,
++      0x62d1, 0x007c, 0x057e, 0x067e, 0x0d7e, 0x0f7e, 0x2029, 0x0001,
++      0xa182, 0x0101, 0x00c8, 0x8986, 0x0078, 0x8988, 0x2009, 0x0100,
++      0x2130, 0x2069, 0xab98, 0x831c, 0x2300, 0xad18, 0x2009, 0x0020,
++      0xaf90, 0x001d, 0x1078, 0x89e2, 0xa6b2, 0x0020, 0x7804, 0xa06d,
++      0x0040, 0x899c, 0x1078, 0x13b4, 0x1078, 0x138b, 0x0040, 0x89c6,
++      0x8528, 0x6837, 0x0110, 0x683b, 0x0000, 0x2d20, 0x7c06, 0xa68a,
++      0x003d, 0x00c8, 0x89b2, 0x2608, 0xad90, 0x000f, 0x1078, 0x89e2,
++      0x0078, 0x89c6, 0xa6b2, 0x003c, 0x2009, 0x003c, 0x2d78, 0xad90,
++      0x000f, 0x1078, 0x89e2, 0x0078, 0x899c, 0x0f7f, 0x852f, 0xa5ad,
++      0x0003, 0x7d36, 0xa5ac, 0x0000, 0x0078, 0x89cb, 0x0f7f, 0x852f,
++      0xa5ad, 0x0003, 0x7d36, 0x0d7f, 0x067f, 0x057f, 0x007c, 0x0f7e,
++      0x8dff, 0x0040, 0x89e0, 0x6804, 0xa07d, 0x0040, 0x89de, 0x6807,
++      0x0000, 0x1078, 0x4a73, 0x2f68, 0x0078, 0x89d3, 0x1078, 0x4a73,
++      0x0f7f, 0x007c, 0x157e, 0xa184, 0x0001, 0x0040, 0x89e8, 0x8108,
++      0x810c, 0x21a8, 0x2304, 0x8007, 0x2012, 0x8318, 0x8210, 0x00f0,
++      0x89ea, 0x157f, 0x007c, 0x067e, 0x127e, 0x2091, 0x8000, 0x2031,
++      0x0001, 0x601c, 0xa084, 0x000f, 0x1079, 0x8a0f, 0x127f, 0x067f,
++      0x007c, 0x127e, 0x2091, 0x8000, 0x067e, 0x2031, 0x0000, 0x601c,
++      0xa084, 0x000f, 0x1079, 0x8a0f, 0x067f, 0x127f, 0x007c, 0x8a29,
++      0x8a17, 0x8a24, 0x8a45, 0x8a17, 0x8a24, 0x8a45, 0x8a24, 0x1078,
++      0x1332, 0x037e, 0x2019, 0x0010, 0x1078, 0x9dc7, 0x601f, 0x0006,
++      0x6003, 0x0007, 0x037f, 0x007c, 0xa006, 0x007c, 0xa085, 0x0001,
++      0x007c, 0x0d7e, 0x86ff, 0x00c0, 0x8a40, 0x6010, 0x2068, 0x1078,
++      0x8d06, 0x0040, 0x8a42, 0xa00e, 0x2001, 0x0005, 0x1078, 0x4b51,
++      0x1078, 0x8f85, 0x1078, 0x4a73, 0x1078, 0x772d, 0xa085, 0x0001,
++      0x0d7f, 0x007c, 0xa006, 0x0078, 0x8a40, 0x6000, 0xa08a, 0x0010,
++      0x10c8, 0x1332, 0x1079, 0x8a4d, 0x007c, 0x8a5d, 0x8a82, 0x8a5f,
++      0x8aa5, 0x8a7e, 0x8a5d, 0x8a24, 0x8a29, 0x8a29, 0x8a24, 0x8a24,
++      0x8a24, 0x8a24, 0x8a24, 0x8a24, 0x8a24, 0x1078, 0x1332, 0x86ff,
++      0x00c0, 0x8a7b, 0x601c, 0xa086, 0x0006, 0x0040, 0x8a7b, 0x0d7e,
++      0x6010, 0x2068, 0x1078, 0x8d06, 0x0040, 0x8a70, 0x1078, 0x8f85,
++      0x0d7f, 0x6007, 0x0085, 0x6003, 0x000b, 0x601f, 0x0002, 0x1078,
++      0x5d8a, 0x1078, 0x62d1, 0xa085, 0x0001, 0x007c, 0x1078, 0x1757,
++      0x0078, 0x8a5f, 0x0e7e, 0x2071, 0xa8b1, 0x7024, 0xac06, 0x00c0,
++      0x8a8b, 0x1078, 0x6fc4, 0x601c, 0xa084, 0x000f, 0xa086, 0x0006,
++      0x00c0, 0x8a9d, 0x087e, 0x097e, 0x2049, 0x0001, 0x2c40, 0x1078,
++      0x7246, 0x097f, 0x087f, 0x0078, 0x8a9f, 0x1078, 0x6ebe, 0x0e7f,
++      0x00c0, 0x8a5f, 0x1078, 0x8a24, 0x007c, 0x037e, 0x0e7e, 0x2071,
++      0xa8b1, 0x703c, 0xac06, 0x00c0, 0x8ab5, 0x2019, 0x0000, 0x1078,
++      0x7058, 0x0e7f, 0x037f, 0x0078, 0x8a5f, 0x1078, 0x738a, 0x0e7f,
++      0x037f, 0x00c0, 0x8a5f, 0x1078, 0x8a24, 0x007c, 0x0c7e, 0x601c,
++      0xa084, 0x000f, 0x1079, 0x8ac6, 0x0c7f, 0x007c, 0x8ad5, 0x8b47,
++      0x8c7f, 0x8ae0, 0x8ec6, 0x8ad5, 0x9db8, 0x772d, 0x8b47, 0x1078,
++      0x8f00, 0x00c0, 0x8ad5, 0x1078, 0x7c83, 0x007c, 0x1078, 0x61cd,
++      0x1078, 0x62d1, 0x1078, 0x772d, 0x007c, 0x6017, 0x0001, 0x007c,
++      0x1078, 0x8d06, 0x0040, 0x8ae8, 0x6010, 0xa080, 0x0019, 0x2c02,
++      0x6000, 0xa08a, 0x0010, 0x10c8, 0x1332, 0x1079, 0x8af0, 0x007c,
++      0x8b00, 0x8b02, 0x8b24, 0x8b36, 0x8b43, 0x8b00, 0x8ad5, 0x8ad5,
++      0x8ad5, 0x8b36, 0x8b36, 0x8b00, 0x8b00, 0x8b00, 0x8b00, 0x8b40,
++      0x1078, 0x1332, 0x0e7e, 0x6010, 0x2070, 0x7050, 0xc0b5, 0x7052,
++      0x2071, 0xa8b1, 0x7024, 0xac06, 0x0040, 0x8b20, 0x1078, 0x6ebe,
++      0x6007, 0x0085, 0x6003, 0x000b, 0x601f, 0x0002, 0x2001, 0xa8a3,
++      0x2004, 0x6016, 0x1078, 0x5d8a, 0x1078, 0x62d1, 0x0e7f, 0x007c,
++      0x6017, 0x0001, 0x0078, 0x8b1e, 0x0d7e, 0x6010, 0x2068, 0x6850,
++      0xc0b5, 0x6852, 0x0d7f, 0x6007, 0x0085, 0x6003, 0x000b, 0x601f,
++      0x0002, 0x1078, 0x5d8a, 0x1078, 0x62d1, 0x007c, 0x0d7e, 0x6017,
++      0x0001, 0x6010, 0x2068, 0x6850, 0xc0b5, 0x6852, 0x0d7f, 0x007c,
++      0x1078, 0x772d, 0x007c, 0x1078, 0x1757, 0x0078, 0x8b24, 0x6000,
++      0xa08a, 0x0010, 0x10c8, 0x1332, 0x1079, 0x8b4f, 0x007c, 0x8b5f,
++      0x8add, 0x8b61, 0x8b5f, 0x8b61, 0x8b61, 0x8ad6, 0x8b5f, 0x8acf,
++      0x8acf, 0x8b5f, 0x8b5f, 0x8b5f, 0x8b5f, 0x8b5f, 0x8b5f, 0x1078,
++      0x1332, 0x0d7e, 0x6018, 0x2068, 0x6804, 0xa084, 0x00ff, 0x0d7f,
++      0xa08a, 0x000c, 0x10c8, 0x1332, 0x1079, 0x8b6f, 0x007c, 0x8b7b,
++      0x8c23, 0x8b7d, 0x8bbd, 0x8b7d, 0x8bbd, 0x8b7d, 0x8b8a, 0x8b7b,
++      0x8bbd, 0x8b7b, 0x8ba7, 0x1078, 0x1332, 0x6004, 0xa08e, 0x0016,
++      0x0040, 0x8bb8, 0xa08e, 0x0004, 0x0040, 0x8bb8, 0xa08e, 0x0002,
++      0x0040, 0x8bb8, 0x6004, 0x1078, 0x8f00, 0x0040, 0x8c3e, 0xa08e,
++      0x0021, 0x0040, 0x8c42, 0xa08e, 0x0022, 0x0040, 0x8c3e, 0xa08e,
++      0x003d, 0x0040, 0x8c42, 0xa08e, 0x0039, 0x0040, 0x8c46, 0xa08e,
++      0x0035, 0x0040, 0x8c46, 0xa08e, 0x001e, 0x0040, 0x8bba, 0xa08e,
++      0x0001, 0x00c0, 0x8bb6, 0x0d7e, 0x6018, 0x2068, 0x6804, 0xa084,
++      0x00ff, 0x0d7f, 0xa086, 0x0006, 0x0040, 0x8bb8, 0x1078, 0x2880,
++      0x1078, 0x7c83, 0x1078, 0x8ec6, 0x007c, 0x0c7e, 0x0d7e, 0x6104,
++      0xa186, 0x0016, 0x0040, 0x8c13, 0xa186, 0x0002, 0x00c0, 0x8be6,
++      0x6018, 0x2068, 0x68a0, 0xd0bc, 0x00c0, 0x8c6a, 0x6840, 0xa084,
++      0x00ff, 0xa005, 0x0040, 0x8be6, 0x8001, 0x6842, 0x6013, 0x0000,
++      0x601f, 0x0007, 0x6017, 0x0398, 0x1078, 0x76c7, 0x0040, 0x8be6,
++      0x2d00, 0x601a, 0x601f, 0x0001, 0x0078, 0x8c13, 0x0d7f, 0x0c7f,
++      0x6004, 0xa08e, 0x0002, 0x00c0, 0x8c04, 0x6018, 0xa080, 0x0028,
++      0x2004, 0xa086, 0x007e, 0x00c0, 0x8c04, 0x2009, 0xa633, 0x2104,
++      0xc085, 0x200a, 0x0e7e, 0x2071, 0xa600, 0x1078, 0x42b8, 0x0e7f,
++      0x1078, 0x7c83, 0x0078, 0x8c08, 0x1078, 0x7c83, 0x1078, 0x2880,
++      0x0e7e, 0x127e, 0x2091, 0x8000, 0x1078, 0x28a6, 0x127f, 0x0e7f,
++      0x1078, 0x8ec6, 0x007c, 0x2001, 0x0002, 0x1078, 0x4502, 0x6003,
++      0x0001, 0x6007, 0x0002, 0x1078, 0x5dd7, 0x1078, 0x62d1, 0x0d7f,
++      0x0c7f, 0x0078, 0x8c12, 0x0c7e, 0x0d7e, 0x6104, 0xa186, 0x0016,
++      0x0040, 0x8c13, 0x6018, 0x2068, 0x6840, 0xa084, 0x00ff, 0xa005,
++      0x0040, 0x8be6, 0x8001, 0x6842, 0x6003, 0x0001, 0x1078, 0x5dd7,
++      0x1078, 0x62d1, 0x0d7f, 0x0c7f, 0x0078, 0x8c12, 0x1078, 0x7c83,
++      0x0078, 0x8bba, 0x1078, 0x7ca6, 0x0078, 0x8bba, 0x0d7e, 0x2c68,
++      0x6104, 0x1078, 0x91bc, 0x0d7f, 0x0040, 0x8c52, 0x1078, 0x772d,
++      0x0078, 0x8c69, 0x6004, 0x8007, 0x6130, 0xa18c, 0x00ff, 0xa105,
++      0x6032, 0x6007, 0x0085, 0x6003, 0x000b, 0x601f, 0x0002, 0x6038,
++      0x600a, 0x2001, 0xa8a3, 0x2004, 0x6016, 0x1078, 0x5d8a, 0x1078,
++      0x62d1, 0x007c, 0x0d7f, 0x0c7f, 0x1078, 0x7c83, 0x1078, 0x2880,
++      0x0e7e, 0x127e, 0x2091, 0x8000, 0x1078, 0x28a6, 0x6013, 0x0000,
++      0x601f, 0x0007, 0x6017, 0x0398, 0x127f, 0x0e7f, 0x007c, 0x6000,
++      0xa08a, 0x0010, 0x10c8, 0x1332, 0x1079, 0x8c87, 0x007c, 0x8c97,
++      0x8c97, 0x8c97, 0x8c97, 0x8c97, 0x8c97, 0x8c97, 0x8c97, 0x8c97,
++      0x8ad5, 0x8c97, 0x8add, 0x8c99, 0x8add, 0x8ca7, 0x8c97, 0x1078,
++      0x1332, 0x6004, 0xa086, 0x008b, 0x0040, 0x8ca7, 0x6007, 0x008b,
++      0x6003, 0x000d, 0x1078, 0x5d8a, 0x1078, 0x62d1, 0x007c, 0x1078,
++      0x8eb9, 0x1078, 0x8d06, 0x0040, 0x8cdf, 0x1078, 0x2880, 0x0d7e,
++      0x1078, 0x8d06, 0x0040, 0x8cc1, 0x6010, 0x2068, 0x6837, 0x0103,
++      0x684b, 0x0006, 0x6847, 0x0000, 0x6850, 0xc0ed, 0x6852, 0x1078,
++      0x4a73, 0x2c68, 0x1078, 0x76c7, 0x0040, 0x8ccf, 0x6818, 0x601a,
++      0x0c7e, 0x2d60, 0x1078, 0x8ec6, 0x0c7f, 0x0078, 0x8cd0, 0x2d60,
++      0x0d7f, 0x6013, 0x0000, 0x601f, 0x0001, 0x6007, 0x0001, 0x6003,
++      0x0001, 0x1078, 0x5dd7, 0x1078, 0x62d1, 0x0078, 0x8cf1, 0x6030,
++      0xa08c, 0xff00, 0x810f, 0xa186, 0x0039, 0x0040, 0x8ceb, 0xa186,
++      0x0035, 0x00c0, 0x8cef, 0x1078, 0x2880, 0x0078, 0x8cc1, 0x1078,
++      0x8ec6, 0x007c, 0xa284, 0x000f, 0x00c0, 0x8d03, 0xa282, 0xad00,
++      0x0048, 0x8d03, 0x2001, 0xa616, 0x2004, 0xa202, 0x00c8, 0x8d03,
++      0xa085, 0x0001, 0x007c, 0xa006, 0x0078, 0x8d02, 0x027e, 0x0e7e,
++      0x2071, 0xa600, 0x6210, 0x705c, 0xa202, 0x0048, 0x8d18, 0x7060,
++      0xa202, 0x00c8, 0x8d18, 0xa085, 0x0001, 0x0e7f, 0x027f, 0x007c,
++      0xa006, 0x0078, 0x8d15, 0x0e7e, 0x0c7e, 0x037e, 0x007e, 0x127e,
++      0x2091, 0x8000, 0x2061, 0xad00, 0x2071, 0xa600, 0x7348, 0x7064,
++      0xa302, 0x00c8, 0x8d45, 0x601c, 0xa206, 0x00c0, 0x8d3d, 0x1078,
++      0x902b, 0x0040, 0x8d3d, 0x1078, 0x8f00, 0x00c0, 0x8d39, 0x1078,
++      0x7c83, 0x0c7e, 0x1078, 0x772d, 0x0c7f, 0xace0, 0x0010, 0x7058,
++      0xac02, 0x00c8, 0x8d45, 0x0078, 0x8d26, 0x127f, 0x007f, 0x037f,
++      0x0c7f, 0x0e7f, 0x007c, 0x0e7e, 0x0c7e, 0x017e, 0xa188, 0xa735,
++      0x210c, 0x81ff, 0x0040, 0x8d59, 0x2061, 0xa9b3, 0x611a, 0x1078,
++      0x2880, 0xa006, 0x0078, 0x8d5e, 0xa085, 0x0001, 0x017f, 0x0c7f,
++      0x0e7f, 0x007c, 0x0c7e, 0x057e, 0x127e, 0x2091, 0x8000, 0x0c7e,
++      0x1078, 0x76c7, 0x057f, 0x0040, 0x8d7b, 0x6612, 0x651a, 0x601f,
++      0x0003, 0x2009, 0x004b, 0x1078, 0x775c, 0xa085, 0x0001, 0x127f,
++      0x057f, 0x0c7f, 0x007c, 0xa006, 0x0078, 0x8d77, 0x0c7e, 0x057e,
++      0x127e, 0x2091, 0x8000, 0x62a0, 0x0c7e, 0x1078, 0x76c7, 0x057f,
++      0x0040, 0x8da9, 0x6013, 0x0000, 0x651a, 0x601f, 0x0003, 0x0c7e,
++      0x2560, 0x1078, 0x47e9, 0x0c7f, 0x1078, 0x5f01, 0x077e, 0x2039,
++      0x0000, 0x1078, 0x5e0a, 0x2c08, 0x1078, 0x9f8b, 0x077f, 0x2009,
++      0x004c, 0x1078, 0x775c, 0xa085, 0x0001, 0x127f, 0x057f, 0x0c7f,
++      0x007c, 0xa006, 0x0078, 0x8da5, 0x0f7e, 0x0c7e, 0x047e, 0x0c7e,
++      0x1078, 0x76c7, 0x2c78, 0x0c7f, 0x0040, 0x8dc6, 0x7e12, 0x2c00,
++      0x781a, 0x781f, 0x0003, 0x2021, 0x0005, 0x1078, 0x8e11, 0x2f60,
++      0x2009, 0x004d, 0x1078, 0x775c, 0xa085, 0x0001, 0x047f, 0x0c7f,
++      0x0f7f, 0x007c, 0x0f7e, 0x0c7e, 0x047e, 0x0c7e, 0x1078, 0x76c7,
++      0x2c78, 0x0c7f, 0x0040, 0x8de4, 0x7e12, 0x2c00, 0x781a, 0x781f,
++      0x0003, 0x2021, 0x0005, 0x1078, 0x8e11, 0x2f60, 0x2009, 0x004e,
++      0x1078, 0x775c, 0xa085, 0x0001, 0x047f, 0x0c7f, 0x0f7f, 0x007c,
++      0x0f7e, 0x0c7e, 0x047e, 0x0c7e, 0x1078, 0x76c7, 0x2c78, 0x0c7f,
++      0x0040, 0x8e0d, 0x7e12, 0x2c00, 0x781a, 0x781f, 0x0003, 0x2021,
++      0x0004, 0x1078, 0x8e11, 0x2001, 0xa89d, 0x2004, 0xd0fc, 0x0040,
++      0x8e06, 0x2f60, 0x1078, 0x772d, 0x0078, 0x8e0b, 0x2f60, 0x2009,
++      0x0052, 0x1078, 0x775c, 0xa085, 0x0001, 0x047f, 0x0c7f, 0x0f7f,
++      0x007c, 0x097e, 0x077e, 0x127e, 0x2091, 0x8000, 0x1078, 0x4775,
++      0x0040, 0x8e1e, 0x2001, 0x8e16, 0x0078, 0x8e24, 0x1078, 0x4739,
++      0x0040, 0x8e2d, 0x2001, 0x8e1e, 0x007e, 0xa00e, 0x2400, 0x1078,
++      0x4b51, 0x1078, 0x4a73, 0x007f, 0x007a, 0x2418, 0x1078, 0x6161,
++      0x62a0, 0x087e, 0x2041, 0x0001, 0x2039, 0x0001, 0x2608, 0x1078,
++      0x5f1b, 0x087f, 0x1078, 0x5e0a, 0x2f08, 0x2648, 0x1078, 0x9f8b,
++      0x613c, 0x81ff, 0x1040, 0x5fdb, 0x1078, 0x62d1, 0x127f, 0x077f,
++      0x097f, 0x007c, 0x0c7e, 0x127e, 0x2091, 0x8000, 0x0c7e, 0x1078,
++      0x76c7, 0x017f, 0x0040, 0x8e63, 0x660a, 0x611a, 0x601f, 0x0001,
++      0x2d00, 0x6012, 0x2009, 0x001f, 0x1078, 0x775c, 0xa085, 0x0001,
++      0x127f, 0x0c7f, 0x007c, 0xa006, 0x0078, 0x8e60, 0x0c7e, 0x127e,
++      0x2091, 0x8000, 0x0c7e, 0x1078, 0x76c7, 0x017f, 0x0040, 0x8e7f,
++      0x660a, 0x611a, 0x601f, 0x0008, 0x2d00, 0x6012, 0x2009, 0x0021,
++      0x1078, 0x775c, 0xa085, 0x0001, 0x127f, 0x0c7f, 0x007c, 0xa006,
++      0x0078, 0x8e7c, 0x0c7e, 0x127e, 0x2091, 0x8000, 0x0c7e, 0x1078,
++      0x76c7, 0x017f, 0x0040, 0x8e9b, 0x660a, 0x611a, 0x601f, 0x0001,
++      0x2d00, 0x6012, 0x2009, 0x003d, 0x1078, 0x775c, 0xa085, 0x0001,
++      0x127f, 0x0c7f, 0x007c, 0xa006, 0x0078, 0x8e98, 0x0c7e, 0x127e,
++      0x2091, 0x8000, 0x0c7e, 0x1078, 0x76c7, 0x017f, 0x0040, 0x8eb6,
++      0x611a, 0x601f, 0x0001, 0x2d00, 0x6012, 0x2009, 0x0000, 0x1078,
++      0x775c, 0xa085, 0x0001, 0x127f, 0x0c7f, 0x007c, 0xa006, 0x0078,
++      0x8eb3, 0x027e, 0x0d7e, 0x6218, 0x2268, 0x6a3c, 0x82ff, 0x0040,
++      0x8ec3, 0x8211, 0x6a3e, 0x0d7f, 0x027f, 0x007c, 0x007e, 0x6000,
++      0xa086, 0x0000, 0x0040, 0x8ed8, 0x6013, 0x0000, 0x601f, 0x0007,
++      0x2001, 0xa8a3, 0x2004, 0x6016, 0x1078, 0xa495, 0x603f, 0x0000,
++      0x007f, 0x007c, 0x067e, 0x0c7e, 0x0d7e, 0x2031, 0xa653, 0x2634,
++      0xd6e4, 0x0040, 0x8ee8, 0x6618, 0x2660, 0x6e48, 0x1078, 0x46e7,
++      0x0d7f, 0x0c7f, 0x067f, 0x007c, 0x007e, 0x017e, 0x6004, 0xa08e,
++      0x0002, 0x0040, 0x8efd, 0xa08e, 0x0003, 0x0040, 0x8efd, 0xa08e,
++      0x0004, 0x0040, 0x8efd, 0xa085, 0x0001, 0x017f, 0x007f, 0x007c,
++      0x007e, 0x0d7e, 0x6010, 0xa06d, 0x0040, 0x8f0d, 0x6838, 0xd0fc,
++      0x0040, 0x8f0d, 0xa006, 0x0078, 0x8f0f, 0xa085, 0x0001, 0x0d7f,
++      0x007f, 0x007c, 0x0c7e, 0x127e, 0x2091, 0x8000, 0x0c7e, 0x1078,
++      0x76c7, 0x017f, 0x0040, 0x8f2c, 0x611a, 0x601f, 0x0001, 0x2d00,
++      0x6012, 0x1078, 0x2880, 0x2009, 0x0028, 0x1078, 0x775c, 0xa085,
++      0x0001, 0x127f, 0x0c7f, 0x007c, 0xa006, 0x0078, 0x8f29, 0xa186,
++      0x0015, 0x00c0, 0x8f44, 0x2011, 0xa620, 0x2204, 0xa086, 0x0074,
++      0x00c0, 0x8f44, 0x1078, 0x7f91, 0x6003, 0x0001, 0x6007, 0x0029,
++      0x1078, 0x5dd7, 0x0078, 0x8f48, 0x1078, 0x7c83, 0x1078, 0x772d,
++      0x007c, 0xa186, 0x0016, 0x00c0, 0x8f53, 0x2001, 0x0004, 0x1078,
++      0x4502, 0x0078, 0x8f74, 0xa186, 0x0015, 0x00c0, 0x8f78, 0x2011,
++      0xa620, 0x2204, 0xa086, 0x0014, 0x00c0, 0x8f78, 0x0d7e, 0x6018,
++      0x2068, 0x1078, 0x4649, 0x0d7f, 0x1078, 0x8043, 0x00c0, 0x8f78,
++      0x0d7e, 0x6018, 0x2068, 0x6890, 0x0d7f, 0xa005, 0x0040, 0x8f78,
++      0x2001, 0x0006, 0x1078, 0x4502, 0x1078, 0x77f8, 0x0078, 0x8f7c,
++      0x1078, 0x7c83, 0x1078, 0x772d, 0x007c, 0x6848, 0xa086, 0x0005,
++      0x00c0, 0x8f84, 0x1078, 0x8f85, 0x007c, 0x6850, 0xc0ad, 0x6852,
++      0x007c, 0x0e7e, 0x2071, 0xab8c, 0x7014, 0xd0e4, 0x0040, 0x8f9a,
++      0x6013, 0x0000, 0x6003, 0x0001, 0x6007, 0x0050, 0x1078, 0x5d8a,
++      0x1078, 0x62d1, 0x0e7f, 0x007c, 0x0c7e, 0x0f7e, 0x2c78, 0x1078,
++      0x4963, 0x0f7f, 0x0040, 0x8fa9, 0x601c, 0xa084, 0x000f, 0x1079,
++      0x8fab, 0x0c7f, 0x007c, 0x8ad5, 0x8fb6, 0x8fb9, 0x8fbc, 0xa25d,
++      0xa279, 0xa27c, 0x8ad5, 0x8ad5, 0x1078, 0x1332, 0x0005, 0x0005,
++      0x007c, 0x0005, 0x0005, 0x007c, 0x1078, 0x8fbf, 0x007c, 0x0f7e,
++      0x2c78, 0x1078, 0x4963, 0x0040, 0x8fee, 0x1078, 0x76c7, 0x00c0,
++      0x8fcf, 0x2001, 0xa8a4, 0x2004, 0x783e, 0x0078, 0x8fee, 0x7818,
++      0x601a, 0x781c, 0xa086, 0x0003, 0x0040, 0x8fdc, 0x7808, 0x6036,
++      0x2f00, 0x603a, 0x0078, 0x8fe0, 0x7808, 0x603a, 0x2f00, 0x6036,
++      0x602a, 0x601f, 0x0001, 0x6007, 0x0035, 0x6003, 0x0001, 0x7920,
++      0x6122, 0x1078, 0x5d8a, 0x1078, 0x62d1, 0x2f60, 0x0f7f, 0x007c,
++      0x017e, 0x0f7e, 0x682c, 0x6032, 0xa08e, 0x0001, 0x0040, 0x9001,
++      0xa086, 0x0005, 0x0040, 0x9005, 0xa006, 0x602a, 0x602e, 0x0078,
++      0x9016, 0x6824, 0xc0f4, 0xc0d5, 0x6826, 0x6810, 0x2078, 0x787c,
++      0x6938, 0xa102, 0x7880, 0x6934, 0xa103, 0x00c8, 0x8ffc, 0x6834,
++      0x602a, 0x6838, 0xa084, 0xfffc, 0x683a, 0x602e, 0x2d00, 0x6036,
++      0x6808, 0x603a, 0x6918, 0x611a, 0x6920, 0x6122, 0x601f, 0x0001,
++      0x6007, 0x0039, 0x6003, 0x0001, 0x1078, 0x5d8a, 0x6803, 0x0002,
++      0x0f7f, 0x017f, 0x007c, 0x007e, 0x017e, 0x6004, 0xa08e, 0x0034,
++      0x0040, 0x9050, 0xa08e, 0x0035, 0x0040, 0x9050, 0xa08e, 0x0036,
++      0x0040, 0x9050, 0xa08e, 0x0037, 0x0040, 0x9050, 0xa08e, 0x0038,
++      0x0040, 0x9050, 0xa08e, 0x0039, 0x0040, 0x9050, 0xa08e, 0x003a,
++      0x0040, 0x9050, 0xa08e, 0x003b, 0x0040, 0x9050, 0xa085, 0x0001,
++      0x017f, 0x007f, 0x007c, 0x0f7e, 0x2c78, 0x1078, 0x4963, 0x00c0,
++      0x905d, 0xa085, 0x0001, 0x0078, 0x906c, 0x6024, 0xd0f4, 0x00c0,
++      0x906b, 0xc0f5, 0x6026, 0x6010, 0x2078, 0x7828, 0x603a, 0x782c,
++      0x6036, 0x1078, 0x1757, 0xa006, 0x0f7f, 0x007c, 0x007e, 0x017e,
++      0x027e, 0x037e, 0x0e7e, 0x2001, 0xa89e, 0x200c, 0x8000, 0x2014,
++      0x2001, 0x0032, 0x1078, 0x5c1c, 0x2001, 0xa8a2, 0x82ff, 0x00c0,
++      0x9083, 0x2011, 0x0014, 0x2202, 0x2001, 0xa8a0, 0x200c, 0x8000,
++      0x2014, 0x2071, 0xa88d, 0x711a, 0x721e, 0x2001, 0x0064, 0x1078,
++      0x5c1c, 0x2001, 0xa8a3, 0x82ff, 0x00c0, 0x9098, 0x2011, 0x0014,
++      0x2202, 0x2009, 0xa8a4, 0xa280, 0x000a, 0x200a, 0x1078, 0x498b,
++      0x0e7f, 0x037f, 0x027f, 0x017f, 0x007f, 0x007c, 0x007e, 0x0e7e,
++      0x2001, 0xa8a2, 0x2003, 0x0028, 0x2001, 0xa8a3, 0x2003, 0x0014,
++      0x2071, 0xa88d, 0x701b, 0x0000, 0x701f, 0x07d0, 0x2001, 0xa8a4,
++      0x2003, 0x001e, 0x0e7f, 0x007f, 0x007c, 0x0c7e, 0x127e, 0x2091,
++      0x8000, 0x0c7e, 0x1078, 0x76c7, 0x017f, 0x0040, 0x90d5, 0x611a,
++      0x601f, 0x0001, 0x2d00, 0x6012, 0x2009, 0x0033, 0x1078, 0x775c,
++      0xa085, 0x0001, 0x127f, 0x0c7f, 0x007c, 0xa006, 0x0078, 0x90d2,
++      0x0d7e, 0x0e7e, 0x0f7e, 0x2071, 0xa600, 0xa186, 0x0015, 0x00c0,
++      0x9107, 0x7080, 0xa086, 0x0018, 0x00c0, 0x9107, 0x6010, 0x2068,
++      0x6a3c, 0xd2e4, 0x00c0, 0x90fb, 0x2c78, 0x1078, 0x6490, 0x0040,
++      0x910f, 0x706c, 0x6a50, 0xa206, 0x00c0, 0x9103, 0x7070, 0x6a54,
++      0xa206, 0x00c0, 0x9103, 0x6218, 0xa290, 0x0028, 0x2214, 0x2009,
++      0x0000, 0x1078, 0x28c8, 0x1078, 0x77f8, 0x0078, 0x910b, 0x1078,
++      0x7c83, 0x1078, 0x772d, 0x0f7f, 0x0e7f, 0x0d7f, 0x007c, 0x7050,
++      0xa080, 0x29c0, 0x2004, 0x6a54, 0xa206, 0x0040, 0x90fb, 0x0078,
++      0x9103, 0x0c7e, 0x127e, 0x2091, 0x8000, 0x0c7e, 0x1078, 0x76c7,
++      0x017f, 0x0040, 0x9131, 0x611a, 0x601f, 0x0001, 0x2d00, 0x6012,
++      0x2009, 0x0043, 0x1078, 0x775c, 0xa085, 0x0001, 0x127f, 0x0c7f,
++      0x007c, 0xa006, 0x0078, 0x912e, 0x0d7e, 0x0e7e, 0x0f7e, 0x2071,
++      0xa600, 0xa186, 0x0015, 0x00c0, 0x915a, 0x7080, 0xa086, 0x0004,
++      0x00c0, 0x915a, 0x6010, 0xa0e8, 0x000f, 0x2c78, 0x1078, 0x6490,
++      0x0040, 0x9162, 0x706c, 0x6a08, 0xa206, 0x00c0, 0x9156, 0x7070,
++      0x6a0c, 0xa206, 0x00c0, 0x9156, 0x1078, 0x2880, 0x1078, 0x77f8,
++      0x0078, 0x915e, 0x1078, 0x7c83, 0x1078, 0x772d, 0x0f7f, 0x0e7f,
++      0x0d7f, 0x007c, 0x7050, 0xa080, 0x29c0, 0x2004, 0x6a0c, 0xa206,
++      0x0040, 0x9154, 0x0078, 0x9156, 0x017e, 0x027e, 0x684c, 0xd0ac,
++      0x0040, 0x9184, 0x6914, 0x6a10, 0x2100, 0xa205, 0x0040, 0x9184,
++      0x6860, 0xa106, 0x00c0, 0x9180, 0x685c, 0xa206, 0x0040, 0x9184,
++      0x6962, 0x6a5e, 0xa085, 0x0001, 0x027f, 0x017f, 0x007c, 0x0e7e,
++      0x127e, 0x2071, 0xa600, 0x2091, 0x8000, 0x7548, 0xa582, 0x0001,
++      0x0048, 0x91b9, 0x704c, 0x2060, 0x6000, 0xa086, 0x0000, 0x0040,
++      0x91a5, 0xace0, 0x0010, 0x7058, 0xac02, 0x00c8, 0x91a1, 0x0078,
++      0x9194, 0x2061, 0xad00, 0x0078, 0x9194, 0x6003, 0x0008, 0x8529,
++      0x754a, 0xaca8, 0x0010, 0x7058, 0xa502, 0x00c8, 0x91b5, 0x754e,
++      0xa085, 0x0001, 0x127f, 0x0e7f, 0x007c, 0x704f, 0xad00, 0x0078,
++      0x91b0, 0xa006, 0x0078, 0x91b2, 0x0c7e, 0x027e, 0x017e, 0xa186,
++      0x0035, 0x0040, 0x91c6, 0x6a34, 0x0078, 0x91c7, 0x6a28, 0x1078,
++      0x8cf2, 0x0040, 0x91f0, 0x2260, 0x611c, 0xa186, 0x0003, 0x0040,
++      0x91d5, 0xa186, 0x0006, 0x00c0, 0x91ec, 0x6834, 0xa206, 0x0040,
++      0x91e4, 0x6838, 0xa206, 0x00c0, 0x91ec, 0x6108, 0x6834, 0xa106,
++      0x00c0, 0x91ec, 0x0078, 0x91e9, 0x6008, 0x6938, 0xa106, 0x00c0,
++      0x91ec, 0x6018, 0x6918, 0xa106, 0x017f, 0x027f, 0x0c7f, 0x007c,
++      0xa085, 0x0001, 0x0078, 0x91ec, 0x6944, 0xd1cc, 0x0040, 0x920d,
++      0xa18c, 0x00ff, 0xa18e, 0x0002, 0x00c0, 0x920d, 0xad88, 0x001e,
++      0x210c, 0xa18c, 0x0f00, 0x810f, 0xa18e, 0x0001, 0x00c0, 0x920d,
++      0x6810, 0x6914, 0xa115, 0x10c0, 0x84d5, 0x007c, 0x067e, 0x6000,
++      0xa0b2, 0x0010, 0x10c8, 0x1332, 0x1079, 0x9218, 0x067f, 0x007c,
++      0x9228, 0x96df, 0x97fb, 0x9228, 0x9228, 0x9228, 0x9228, 0x9228,
++      0x9262, 0x988e, 0x9228, 0x9228, 0x9228, 0x9228, 0x9228, 0x9228,
++      0x1078, 0x1332, 0x067e, 0x6000, 0xa0b2, 0x0010, 0x10c8, 0x1332,
++      0x1079, 0x9234, 0x067f, 0x007c, 0x9244, 0x9d53, 0x9244, 0x9244,
++      0x9244, 0x9244, 0x9244, 0x9244, 0x9d11, 0x9da1, 0x9244, 0xa3b0,
++      0xa3e4, 0xa3b0, 0xa3e4, 0x9244, 0x1078, 0x1332, 0x067e, 0x6000,
++      0xa0b2, 0x0010, 0x10c8, 0x1332, 0x1079, 0x9250, 0x067f, 0x007c,
++      0x9260, 0x99eb, 0x9ac7, 0x9af5, 0x9b70, 0x9260, 0x9c76, 0x9c1e,
++      0x989a, 0x9ce5, 0x9cfb, 0x9260, 0x9260, 0x9260, 0x9260, 0x9260,
++      0x1078, 0x1332, 0xa1b2, 0x0044, 0x10c8, 0x1332, 0x2100, 0x0079,
++      0x9269, 0x92a9, 0x9498, 0x92a9, 0x92a9, 0x92a9, 0x94a0, 0x92a9,
++      0x92a9, 0x92a9, 0x92a9, 0x92a9, 0x92a9, 0x92a9, 0x92a9, 0x92a9,
++      0x92a9, 0x92a9, 0x92a9, 0x92a9, 0x92a9, 0x92a9, 0x92a9, 0x92a9,
++      0x92ab, 0x9311, 0x9320, 0x9377, 0x9396, 0x9415, 0x9485, 0x92a9,
++      0x92a9, 0x94a4, 0x92a9, 0x92a9, 0x94b7, 0x94c2, 0x92a9, 0x92a9,
++      0x92a9, 0x92a9, 0x92a9, 0x94fa, 0x92a9, 0x92a9, 0x9509, 0x92a9,
++      0x92a9, 0x92a9, 0x92a9, 0x92a9, 0x92a9, 0x9522, 0x92a9, 0x92a9,
++      0x92a9, 0x95af, 0x92a9, 0x92a9, 0x92a9, 0x92a9, 0x92a9, 0x92a9,
++      0x9629, 0x1078, 0x1332, 0x1078, 0x4967, 0x00c0, 0x92bb, 0x2001,
++      0xa633, 0x2004, 0xd0cc, 0x00c0, 0x92bb, 0xa084, 0x0009, 0xa086,
++      0x0008, 0x00c0, 0x92c3, 0x6007, 0x0009, 0x602b, 0x0009, 0x6013,
++      0x0000, 0x0078, 0x9493, 0x1078, 0x4957, 0x0e7e, 0x0c7e, 0x037e,
++      0x027e, 0x017e, 0x6218, 0x2270, 0x72a0, 0x027e, 0x2019, 0x0029,
++      0x1078, 0x5f01, 0x077e, 0x2039, 0x0000, 0x1078, 0x5e0a, 0x2c08,
++      0x1078, 0x9f8b, 0x077f, 0x017f, 0x2e60, 0x1078, 0x47e9, 0x017f,
++      0x027f, 0x037f, 0x0c7f, 0x0e7f, 0x6618, 0x0c7e, 0x2660, 0x1078,
++      0x45d6, 0x0c7f, 0xa6b0, 0x0001, 0x2634, 0xa684, 0x00ff, 0xa082,
++      0x0006, 0x0048, 0x9303, 0x1078, 0x9ebf, 0x00c0, 0x9371, 0x1078,
++      0x9e50, 0x00c0, 0x92ff, 0x6007, 0x0008, 0x0078, 0x9493, 0x6007,
++      0x0009, 0x0078, 0x9493, 0x1078, 0xa09f, 0x0040, 0x930d, 0x1078,
++      0x9ebf, 0x0040, 0x92f7, 0x0078, 0x9371, 0x6013, 0x1900, 0x0078,
++      0x92ff, 0x1078, 0x29bb, 0x00c0, 0x9664, 0x6106, 0x1078, 0x9e05,
++      0x6007, 0x0006, 0x0078, 0x9493, 0x6007, 0x0007, 0x0078, 0x9493,
++      0x1078, 0xa41c, 0x00c0, 0x9664, 0x1078, 0x29bb, 0x00c0, 0x9664,
++      0x0d7e, 0x6618, 0x2668, 0x6e04, 0xa684, 0x00ff, 0xa082, 0x0006,
++      0x00c8, 0x9336, 0x2001, 0x0001, 0x1078, 0x44ee, 0xa6b4, 0xff00,
++      0x8637, 0xa686, 0x0006, 0x0040, 0x9353, 0xa686, 0x0004, 0x0040,
++      0x9353, 0x6e04, 0xa6b4, 0x00ff, 0xa686, 0x0006, 0x0040, 0x9353,
++      0xa686, 0x0004, 0x0040, 0x9353, 0xa686, 0x0005, 0x0040, 0x9353,
++      0x0d7f, 0x0078, 0x9371, 0x1078, 0x9f25, 0x00c0, 0x936c, 0xa686,
++      0x0006, 0x00c0, 0x9365, 0x027e, 0x6218, 0xa290, 0x0028, 0x2214,
++      0x2009, 0x0000, 0x1078, 0x28c8, 0x027f, 0x1078, 0x4649, 0x6007,
++      0x000a, 0x0d7f, 0x0078, 0x9493, 0x6007, 0x000b, 0x0d7f, 0x0078,
++      0x9493, 0x1078, 0x2880, 0x6007, 0x0001, 0x0078, 0x9493, 0x1078,
++      0xa41c, 0x00c0, 0x9664, 0x1078, 0x29bb, 0x00c0, 0x9664, 0x6618,
++      0x0d7e, 0x2668, 0x6e04, 0x0d7f, 0xa686, 0x0707, 0x0040, 0x9371,
++      0x027e, 0x6218, 0xa290, 0x0028, 0x2214, 0x2009, 0x0000, 0x1078,
++      0x28c8, 0x027f, 0x6007, 0x000c, 0x0078, 0x9493, 0x1078, 0x4967,
++      0x00c0, 0x93a3, 0x2001, 0xa633, 0x2004, 0xa084, 0x0009, 0xa086,
++      0x0008, 0x00c0, 0x93ab, 0x6007, 0x0009, 0x602b, 0x0009, 0x6013,
++      0x0000, 0x0078, 0x9493, 0x1078, 0x4957, 0x6618, 0xa6b0, 0x0001,
++      0x2634, 0xa684, 0x00ff, 0xa082, 0x0006, 0x0048, 0x93ef, 0xa6b4,
++      0xff00, 0x8637, 0xa686, 0x0004, 0x0040, 0x93c2, 0xa686, 0x0006,
++      0x00c0, 0x9371, 0x1078, 0x9f34, 0x00c0, 0x93ca, 0x6007, 0x000e,
++      0x0078, 0x9493, 0x047e, 0x6418, 0xa4a0, 0x0028, 0x2424, 0xa4a4,
++      0x00ff, 0x8427, 0x047e, 0x1078, 0x2880, 0x047f, 0x017e, 0xa006,
++      0x2009, 0xa653, 0x210c, 0xd1a4, 0x0040, 0x93e9, 0x2009, 0x0029,
++      0x1078, 0xa21d, 0x6018, 0x0d7e, 0x2068, 0x6800, 0xc0e5, 0x6802,
++      0x0d7f, 0x017f, 0x047f, 0x6007, 0x0001, 0x0078, 0x9493, 0x2001,
++      0x0001, 0x1078, 0x44ee, 0x157e, 0x017e, 0x027e, 0x037e, 0x20a9,
++      0x0004, 0x2019, 0xa605, 0x2011, 0xab90, 0x1078, 0x80de, 0x037f,
++      0x027f, 0x017f, 0x157f, 0xa005, 0x0040, 0x940f, 0xa6b4, 0xff00,
++      0x8637, 0xa686, 0x0006, 0x0040, 0x93c2, 0x0078, 0x9371, 0x6013,
++      0x1900, 0x6007, 0x0009, 0x0078, 0x9493, 0x1078, 0x4967, 0x00c0,
++      0x9422, 0x2001, 0xa633, 0x2004, 0xa084, 0x0009, 0xa086, 0x0008,
++      0x00c0, 0x942a, 0x6007, 0x0009, 0x602b, 0x0009, 0x6013, 0x0000,
++      0x0078, 0x9493, 0x1078, 0x4957, 0x6618, 0xa6b0, 0x0001, 0x2634,
++      0xa684, 0x00ff, 0xa082, 0x0006, 0x0048, 0x9472, 0xa6b4, 0xff00,
++      0x8637, 0xa686, 0x0004, 0x0040, 0x9441, 0xa686, 0x0006, 0x00c0,
++      0x9371, 0x1078, 0x9f5f, 0x00c0, 0x944d, 0x1078, 0x9e50, 0x00c0,
++      0x944d, 0x6007, 0x0010, 0x0078, 0x9493, 0x047e, 0x6418, 0xa4a0,
++      0x0028, 0x2424, 0xa4a4, 0x00ff, 0x8427, 0x047e, 0x1078, 0x2880,
++      0x047f, 0x017e, 0xa006, 0x2009, 0xa653, 0x210c, 0xd1a4, 0x0040,
++      0x946c, 0x2009, 0x0029, 0x1078, 0xa21d, 0x6018, 0x0d7e, 0x2068,
++      0x6800, 0xc0e5, 0x6802, 0x0d7f, 0x017f, 0x047f, 0x6007, 0x0001,
++      0x0078, 0x9493, 0x1078, 0xa09f, 0x0040, 0x947f, 0xa6b4, 0xff00,
++      0x8637, 0xa686, 0x0006, 0x0040, 0x9441, 0x0078, 0x9371, 0x6013,
++      0x1900, 0x6007, 0x0009, 0x0078, 0x9493, 0x1078, 0x29bb, 0x00c0,
++      0x9664, 0x1078, 0xa41c, 0x00c0, 0x9664, 0x1078, 0x9667, 0x00c0,
++      0x9371, 0x6007, 0x0012, 0x6003, 0x0001, 0x1078, 0x5dd7, 0x007c,
++      0x6007, 0x0001, 0x6003, 0x0001, 0x1078, 0x5dd7, 0x0078, 0x9497,
++      0x6007, 0x0005, 0x0078, 0x949a, 0x1078, 0xa41c, 0x00c0, 0x9664,
++      0x1078, 0x29bb, 0x00c0, 0x9664, 0x1078, 0x9667, 0x00c0, 0x9371,
++      0x6007, 0x0020, 0x6003, 0x0001, 0x1078, 0x5dd7, 0x007c, 0x1078,
++      0x29bb, 0x00c0, 0x9664, 0x6007, 0x0023, 0x6003, 0x0001, 0x1078,
++      0x5dd7, 0x007c, 0x1078, 0xa41c, 0x00c0, 0x9664, 0x1078, 0x29bb,
++      0x00c0, 0x9664, 0x1078, 0x9667, 0x00c0, 0x9371, 0x017e, 0x027e,
++      0x2011, 0xab90, 0x2214, 0x2c08, 0xa006, 0x1078, 0xa1e6, 0x00c0,
++      0x94e9, 0x2160, 0x6007, 0x0026, 0x6013, 0x1700, 0x2011, 0xab89,
++      0x2214, 0xa296, 0xffff, 0x00c0, 0x94f3, 0x6007, 0x0025, 0x0078,
++      0x94f3, 0x6004, 0xa086, 0x0024, 0x00c0, 0x94f0, 0x1078, 0x772d,
++      0x2160, 0x6007, 0x0025, 0x6003, 0x0001, 0x1078, 0x5dd7, 0x027f,
++      0x017f, 0x007c, 0x1078, 0x29bb, 0x00c0, 0x9664, 0x6106, 0x1078,
++      0x9687, 0x6007, 0x002b, 0x0078, 0x9493, 0x6007, 0x002c, 0x0078,
++      0x9493, 0x1078, 0xa41c, 0x00c0, 0x9664, 0x1078, 0x29bb, 0x00c0,
++      0x9664, 0x1078, 0x9667, 0x00c0, 0x9371, 0x6106, 0x1078, 0x968c,
++      0x00c0, 0x951e, 0x6007, 0x002e, 0x0078, 0x9493, 0x6007, 0x002f,
++      0x0078, 0x9493, 0x1078, 0x29bb, 0x00c0, 0x9664, 0x0e7e, 0x0d7e,
++      0x0c7e, 0x6018, 0xa080, 0x0001, 0x200c, 0xa184, 0x00ff, 0xa086,
++      0x0006, 0x0040, 0x953f, 0xa184, 0xff00, 0x8007, 0xa086, 0x0006,
++      0x0040, 0x953f, 0x0c7f, 0x0d7f, 0x0e7f, 0x0078, 0x9498, 0x2001,
++      0xa672, 0x2004, 0xd0e4, 0x0040, 0x95ab, 0x2071, 0xab8c, 0x7010,
++      0x6036, 0x7014, 0x603a, 0x7108, 0x720c, 0x2001, 0xa653, 0x2004,
++      0xd0a4, 0x0040, 0x955d, 0x6018, 0x2068, 0x6810, 0xa106, 0x00c0,
++      0x955d, 0x6814, 0xa206, 0x0040, 0x9581, 0x2001, 0xa653, 0x2004,
++      0xd0ac, 0x00c0, 0x959f, 0x2069, 0xa600, 0x6870, 0xa206, 0x00c0,
++      0x959f, 0x686c, 0xa106, 0x00c0, 0x959f, 0x7210, 0x1078, 0x8cf2,
++      0x0040, 0x95a5, 0x1078, 0xa28e, 0x0040, 0x95a5, 0x622a, 0x6007,
++      0x0036, 0x6003, 0x0001, 0x1078, 0x5d8a, 0x0c7f, 0x0d7f, 0x0e7f,
++      0x007c, 0x7214, 0xa286, 0xffff, 0x0040, 0x9593, 0x1078, 0x8cf2,
++      0x0040, 0x95a5, 0xa280, 0x0002, 0x2004, 0x7110, 0xa106, 0x00c0,
++      0x95a5, 0x0078, 0x956e, 0x7210, 0x2c08, 0xa085, 0x0001, 0x1078,
++      0xa1e6, 0x2c10, 0x2160, 0x0040, 0x95a5, 0x0078, 0x956e, 0x6007,
++      0x0037, 0x6013, 0x1500, 0x0078, 0x9579, 0x6007, 0x0037, 0x6013,
++      0x1700, 0x0078, 0x9579, 0x6007, 0x0012, 0x0078, 0x9579, 0x1078,
++      0x29bb, 0x00c0, 0x9664, 0x6018, 0xa080, 0x0001, 0x2004, 0xa084,
++      0xff00, 0x8007, 0xa086, 0x0006, 0x00c0, 0x9498, 0x0e7e, 0x0d7e,
++      0x0c7e, 0x2001, 0xa672, 0x2004, 0xd0e4, 0x0040, 0x9621, 0x2069,
++      0xa600, 0x2071, 0xab8c, 0x7008, 0x6036, 0x720c, 0x623a, 0xa286,
++      0xffff, 0x00c0, 0x95de, 0x7208, 0x0c7e, 0x2c08, 0xa085, 0x0001,
++      0x1078, 0xa1e6, 0x2c10, 0x0c7f, 0x0040, 0x9615, 0x1078, 0x8cf2,
++      0x0040, 0x9615, 0x0c7e, 0x027e, 0x2260, 0x1078, 0x89f3, 0x027f,
++      0x0c7f, 0x7118, 0xa18c, 0xff00, 0x810f, 0xa186, 0x0001, 0x0040,
++      0x95ff, 0xa186, 0x0005, 0x0040, 0x95f9, 0xa186, 0x0007, 0x00c0,
++      0x9609, 0xa280, 0x0004, 0x2004, 0xa005, 0x0040, 0x9609, 0x057e,
++      0x7510, 0x7614, 0x1078, 0xa2a3, 0x057f, 0x0c7f, 0x0d7f, 0x0e7f,
++      0x007c, 0x6007, 0x003b, 0x602b, 0x0009, 0x6013, 0x2a00, 0x6003,
++      0x0001, 0x1078, 0x5d8a, 0x0078, 0x9605, 0x6007, 0x003b, 0x602b,
++      0x0009, 0x6013, 0x1700, 0x6003, 0x0001, 0x1078, 0x5d8a, 0x0078,
++      0x9605, 0x6007, 0x003b, 0x602b, 0x000b, 0x6013, 0x0000, 0x0078,
++      0x9579, 0x0e7e, 0x027e, 0x1078, 0x4967, 0x0040, 0x965e, 0x1078,
++      0x4957, 0x1078, 0xa4a9, 0x00c0, 0x965c, 0x2071, 0xa600, 0x70cc,
++      0xc085, 0x70ce, 0x0f7e, 0x2079, 0x0100, 0x7298, 0xa284, 0x00ff,
++      0x706e, 0x78e6, 0xa284, 0xff00, 0x7270, 0xa205, 0x7072, 0x78ea,
++      0x0f7f, 0x70d7, 0x0000, 0x2001, 0xa653, 0x2004, 0xd0a4, 0x0040,
++      0x9655, 0x2011, 0xa8ca, 0x2013, 0x07d0, 0xd0ac, 0x00c0, 0x965e,
++      0x1078, 0x2677, 0x0078, 0x965e, 0x1078, 0xa4d9, 0x027f, 0x0e7f,
++      0x1078, 0x772d, 0x0078, 0x9497, 0x1078, 0x772d, 0x007c, 0x0d7e,
++      0x067e, 0x6618, 0x2668, 0x6e04, 0xa6b4, 0xff00, 0x8637, 0xa686,
++      0x0006, 0x0040, 0x9684, 0xa686, 0x0004, 0x0040, 0x9684, 0x6e04,
++      0xa6b4, 0x00ff, 0xa686, 0x0006, 0x0040, 0x9684, 0xa686, 0x0004,
++      0x0040, 0x9684, 0xa085, 0x0001, 0x067f, 0x0d7f, 0x007c, 0x0d7e,
++      0x1078, 0x96bb, 0x0d7f, 0x007c, 0x0d7e, 0x1078, 0x96ca, 0x00c0,
++      0x96b4, 0x680c, 0xa08c, 0xff00, 0x6820, 0xa084, 0x00ff, 0xa115,
++      0x6212, 0x6824, 0x602a, 0xd1e4, 0x0040, 0x96a2, 0x2009, 0x0001,
++      0x0078, 0x96b0, 0xd1ec, 0x0040, 0x96b4, 0x6920, 0xa18c, 0x00ff,
++      0x6824, 0x1078, 0x254d, 0x00c0, 0x96b4, 0x2110, 0x2009, 0x0000,
++      0x1078, 0x28c8, 0x0078, 0x96b8, 0xa085, 0x0001, 0x0078, 0x96b9,
++      0xa006, 0x0d7f, 0x007c, 0x2069, 0xab8d, 0x6800, 0xa082, 0x0010,
++      0x00c8, 0x96c8, 0x6013, 0x0000, 0xa085, 0x0001, 0x0078, 0x96c9,
++      0xa006, 0x007c, 0x6013, 0x0000, 0x2069, 0xab8c, 0x6808, 0xa084,
++      0xff00, 0xa086, 0x0800, 0x00c0, 0x96de, 0x6800, 0xa084, 0x00ff,
++      0xa08e, 0x0014, 0x0040, 0x96de, 0xa08e, 0x0010, 0x007c, 0x6004,
++      0xa0b2, 0x0044, 0x10c8, 0x1332, 0xa1b6, 0x0013, 0x00c0, 0x96eb,
++      0x2008, 0x0079, 0x96fe, 0xa1b6, 0x0027, 0x0040, 0x96f3, 0xa1b6,
++      0x0014, 0x10c0, 0x1332, 0x2001, 0x0007, 0x1078, 0x4535, 0x1078,
++      0x61cd, 0x1078, 0x8ec6, 0x1078, 0x62d1, 0x007c, 0x973e, 0x9740,
++      0x973e, 0x973e, 0x973e, 0x9740, 0x974c, 0x97d6, 0x9799, 0x97d6,
++      0x97ad, 0x97d6, 0x974c, 0x97d6, 0x97ce, 0x97d6, 0x97ce, 0x97d6,
++      0x97d6, 0x973e, 0x973e, 0x973e, 0x973e, 0x973e, 0x973e, 0x973e,
++      0x973e, 0x973e, 0x973e, 0x973e, 0x9740, 0x973e, 0x97d6, 0x973e,
++      0x973e, 0x97d6, 0x973e, 0x97d6, 0x97d6, 0x973e, 0x973e, 0x973e,
++      0x973e, 0x97d6, 0x97d6, 0x973e, 0x97d6, 0x97d6, 0x973e, 0x973e,
++      0x973e, 0x973e, 0x973e, 0x9740, 0x97d6, 0x97d6, 0x973e, 0x973e,
++      0x97d6, 0x97d6, 0x973e, 0x973e, 0x973e, 0x973e, 0x1078, 0x1332,
++      0x1078, 0x61cd, 0x2001, 0xa8a2, 0x2004, 0x6016, 0x6003, 0x0002,
++      0x1078, 0x62d1, 0x0078, 0x97dc, 0x0f7e, 0x2079, 0xa652, 0x7804,
++      0x0f7f, 0xd0ac, 0x00c0, 0x97d6, 0x2001, 0x0000, 0x1078, 0x44ee,
++      0x6018, 0xa080, 0x0004, 0x2004, 0xa086, 0x00ff, 0x0040, 0x97d6,
++      0x0c7e, 0x6018, 0x2060, 0x6000, 0xd0f4, 0x00c0, 0x9770, 0x6010,
++      0xa005, 0x0040, 0x9770, 0x0c7f, 0x1078, 0x3699, 0x0078, 0x97d6,
++      0x0c7f, 0x2001, 0xa600, 0x2004, 0xa086, 0x0002, 0x00c0, 0x977f,
++      0x0f7e, 0x2079, 0xa600, 0x7890, 0x8000, 0x7892, 0x0f7f, 0x2001,
++      0x0002, 0x1078, 0x4502, 0x1078, 0x61cd, 0x601f, 0x0001, 0x6003,
++      0x0001, 0x6007, 0x0002, 0x1078, 0x5dd7, 0x1078, 0x62d1, 0x0c7e,
++      0x6118, 0x2160, 0x2009, 0x0001, 0x1078, 0x5a52, 0x0c7f, 0x0078,
++      0x97dc, 0x6618, 0x0d7e, 0x2668, 0x6e04, 0x0d7f, 0xa6b4, 0xff00,
++      0x8637, 0xa686, 0x0006, 0x0040, 0x97d6, 0xa686, 0x0004, 0x0040,
++      0x97d6, 0x2001, 0x0004, 0x0078, 0x97d4, 0x2001, 0xa600, 0x2004,
++      0xa086, 0x0003, 0x00c0, 0x97b6, 0x1078, 0x3699, 0x2001, 0x0006,
++      0x1078, 0x97dd, 0x6618, 0x0d7e, 0x2668, 0x6e04, 0x0d7f, 0xa6b4,
++      0xff00, 0x8637, 0xa686, 0x0006, 0x0040, 0x97d6, 0x2001, 0x0006,
++      0x0078, 0x97d4, 0x2001, 0x0004, 0x0078, 0x97d4, 0x2001, 0x0006,
++      0x1078, 0x97dd, 0x0078, 0x97d6, 0x1078, 0x4535, 0x1078, 0x61cd,
++      0x1078, 0x772d, 0x1078, 0x62d1, 0x007c, 0x017e, 0x0d7e, 0x6118,
++      0x2168, 0x6900, 0xd184, 0x0040, 0x97f8, 0x6104, 0xa18e, 0x000a,
++      0x00c0, 0x97f0, 0x699c, 0xd1a4, 0x00c0, 0x97f0, 0x2001, 0x0007,
++      0x1078, 0x4502, 0x2001, 0x0000, 0x1078, 0x44ee, 0x1078, 0x28a6,
++      0x0d7f, 0x017f, 0x007c, 0x0d7e, 0x6618, 0x2668, 0x6804, 0xa084,
++      0xff00, 0x8007, 0x0d7f, 0xa0b2, 0x000c, 0x10c8, 0x1332, 0xa1b6,
++      0x0015, 0x00c0, 0x980f, 0x1079, 0x9816, 0x0078, 0x9815, 0xa1b6,
++      0x0016, 0x10c0, 0x1332, 0x1079, 0x9822, 0x007c, 0x7d4e, 0x7d4e,
++      0x7d4e, 0x7d4e, 0x7d4e, 0x7d4e, 0x9877, 0x982e, 0x7d4e, 0x7d4e,
++      0x7d4e, 0x7d4e, 0x7d4e, 0x7d4e, 0x7d4e, 0x7d4e, 0x7d4e, 0x7d4e,
++      0x9877, 0x987f, 0x7d4e, 0x7d4e, 0x7d4e, 0x7d4e, 0x0f7e, 0x2079,
++      0xa652, 0x7804, 0xd0ac, 0x00c0, 0x9855, 0x6018, 0xa07d, 0x0040,
++      0x9855, 0x7800, 0xd0f4, 0x00c0, 0x9841, 0x7810, 0xa005, 0x00c0,
++      0x9855, 0x2001, 0x0000, 0x1078, 0x44ee, 0x2001, 0x0002, 0x1078,
++      0x4502, 0x601f, 0x0001, 0x6003, 0x0001, 0x6007, 0x0002, 0x1078,
++      0x5dd7, 0x1078, 0x62d1, 0x0078, 0x9875, 0x2011, 0xab83, 0x2204,
++      0x8211, 0x220c, 0x1078, 0x254d, 0x00c0, 0x9875, 0x0c7e, 0x1078,
++      0x45c4, 0x0040, 0x9868, 0x0c7f, 0x1078, 0x772d, 0x0078, 0x9875,
++      0x6010, 0x007e, 0x6014, 0x007e, 0x1078, 0x42f8, 0x007f, 0x6016,
++      0x007f, 0x6012, 0x0c7f, 0x1078, 0x772d, 0x0f7f, 0x007c, 0x6604,
++      0xa6b6, 0x001e, 0x00c0, 0x987e, 0x1078, 0x772d, 0x007c, 0x1078,
++      0x7f8e, 0x00c0, 0x988b, 0x6003, 0x0001, 0x6007, 0x0001, 0x1078,
++      0x5dd7, 0x0078, 0x988d, 0x1078, 0x772d, 0x007c, 0x6004, 0xa08a,
++      0x0044, 0x10c8, 0x1332, 0x1078, 0x61cd, 0x1078, 0x8ec6, 0x1078,
++      0x62d1, 0x007c, 0xa182, 0x0040, 0x0079, 0x989e, 0x98b1, 0x98b1,
++      0x98b1, 0x98b1, 0x98b3, 0x98b1, 0x98b1, 0x98b1, 0x98b1, 0x98b1,
++      0x98b1, 0x98b1, 0x98b1, 0x98b1, 0x98b1, 0x98b1, 0x98b1, 0x98b1,
++      0x98b1, 0x1078, 0x1332, 0x0d7e, 0x0e7e, 0x0f7e, 0x157e, 0x047e,
++      0x027e, 0x6218, 0xa280, 0x002b, 0x2004, 0xa005, 0x0040, 0x98c4,
++      0x2021, 0x0000, 0x1078, 0xa472, 0x6106, 0x2071, 0xab80, 0x7444,
++      0xa4a4, 0xff00, 0x0040, 0x991b, 0xa486, 0x2000, 0x00c0, 0x98d6,
++      0x2009, 0x0001, 0x2011, 0x0200, 0x1078, 0x5bf1, 0x1078, 0x138b,
++      0x1040, 0x1332, 0x6003, 0x0007, 0x2d00, 0x6837, 0x010d, 0x6803,
++      0x0000, 0x683b, 0x0000, 0x6c5a, 0x2c00, 0x685e, 0x6008, 0x68b2,
++      0x6018, 0x2078, 0x78a0, 0x8007, 0x7130, 0x694a, 0x017e, 0xa084,
++      0xff00, 0x6846, 0x684f, 0x0000, 0x6857, 0x0036, 0x1078, 0x4a73,
++      0x017f, 0xa486, 0x2000, 0x00c0, 0x9903, 0x2019, 0x0017, 0x1078,
++      0xa195, 0x0078, 0x997d, 0xa486, 0x0400, 0x00c0, 0x990d, 0x2019,
++      0x0002, 0x1078, 0xa146, 0x0078, 0x997d, 0xa486, 0x0200, 0x00c0,
++      0x9913, 0x1078, 0xa12b, 0xa486, 0x1000, 0x00c0, 0x9919, 0x1078,
++      0xa17a, 0x0078, 0x997d, 0x2069, 0xa933, 0x6a00, 0xd284, 0x0040,
++      0x99e7, 0xa284, 0x0300, 0x00c0, 0x99df, 0x6804, 0xa005, 0x0040,
++      0x99c5, 0x2d78, 0x6003, 0x0007, 0x1078, 0x1370, 0x0040, 0x9984,
++      0x7800, 0xd08c, 0x00c0, 0x9937, 0x7804, 0x8001, 0x7806, 0x6013,
++      0x0000, 0x6803, 0x0000, 0x6837, 0x0116, 0x683b, 0x0000, 0x6008,
++      0x68b2, 0x2c00, 0x684a, 0x6018, 0x2078, 0x78a0, 0x8007, 0x7130,
++      0x6986, 0x6846, 0x7928, 0x698a, 0x792c, 0x698e, 0x7930, 0x6992,
++      0x7934, 0x6996, 0x6853, 0x003d, 0x7244, 0xa294, 0x0003, 0xa286,
++      0x0002, 0x00c0, 0x995f, 0x684f, 0x0040, 0x0078, 0x9969, 0xa286,
++      0x0001, 0x00c0, 0x9967, 0x684f, 0x0080, 0x0078, 0x9969, 0x684f,
++      0x0000, 0x20a9, 0x000a, 0x2001, 0xab90, 0xad90, 0x0015, 0x200c,
++      0x810f, 0x2112, 0x8000, 0x8210, 0x00f0, 0x996f, 0x200c, 0x6982,
++      0x8000, 0x200c, 0x697e, 0x1078, 0x4a73, 0x027f, 0x047f, 0x157f,
++      0x0f7f, 0x0e7f, 0x0d7f, 0x007c, 0x2001, 0xa60e, 0x2004, 0xd084,
++      0x0040, 0x998e, 0x1078, 0x138b, 0x00c0, 0x9930, 0x6013, 0x0100,
++      0x6003, 0x0001, 0x6007, 0x0041, 0x1078, 0x5d8a, 0x1078, 0x62d1,
++      0x0078, 0x997d, 0x2069, 0xab92, 0x2d04, 0xa084, 0xff00, 0xa086,
++      0x1200, 0x00c0, 0x99b9, 0x2069, 0xab80, 0x686c, 0xa084, 0x00ff,
++      0x017e, 0x6110, 0xa18c, 0x0700, 0xa10d, 0x6112, 0x017f, 0x6003,
++      0x0001, 0x6007, 0x0043, 0x1078, 0x5d8a, 0x1078, 0x62d1, 0x0078,
++      0x997d, 0x6013, 0x0200, 0x6003, 0x0001, 0x6007, 0x0041, 0x1078,
++      0x5d8a, 0x1078, 0x62d1, 0x0078, 0x997d, 0x2001, 0xa60d, 0x2004,
++      0xd0ec, 0x0040, 0x99cf, 0x2011, 0x8049, 0x1078, 0x361b, 0x6013,
++      0x0300, 0x0078, 0x99d5, 0x6013, 0x0100, 0x6003, 0x0001, 0x6007,
++      0x0041, 0x1078, 0x5d8a, 0x1078, 0x62d1, 0x0078, 0x997d, 0x6013,
++      0x0500, 0x0078, 0x99d5, 0x6013, 0x0600, 0x0078, 0x999a, 0x6013,
++      0x0200, 0x0078, 0x999a, 0xa186, 0x0013, 0x00c0, 0x99fd, 0x6004,
++      0xa08a, 0x0040, 0x1048, 0x1332, 0xa08a, 0x0053, 0x10c8, 0x1332,
++      0xa082, 0x0040, 0x2008, 0x0079, 0x9a82, 0xa186, 0x0051, 0x0040,
++      0x9a0a, 0xa186, 0x0047, 0x00c0, 0x9a23, 0x6004, 0xa086, 0x0041,
++      0x0040, 0x9a31, 0x2001, 0x0109, 0x2004, 0xd084, 0x0040, 0x9a31,
++      0x127e, 0x2091, 0x2200, 0x007e, 0x017e, 0x027e, 0x1078, 0x5c56,
++      0x027f, 0x017f, 0x007f, 0x127f, 0x6000, 0xa086, 0x0002, 0x00c0,
++      0x9a31, 0x0078, 0x9ac7, 0xa186, 0x0027, 0x0040, 0x9a2b, 0xa186,
++      0x0014, 0x10c0, 0x1332, 0x6004, 0xa082, 0x0040, 0x2008, 0x0079,
++      0x9a34, 0x1078, 0x7773, 0x007c, 0x9a47, 0x9a49, 0x9a49, 0x9a71,
++      0x9a47, 0x9a47, 0x9a47, 0x9a47, 0x9a47, 0x9a47, 0x9a47, 0x9a47,
++      0x9a47, 0x9a47, 0x9a47, 0x9a47, 0x9a47, 0x9a47, 0x9a47, 0x1078,
++      0x1332, 0x1078, 0x61cd, 0x1078, 0x62d1, 0x037e, 0x0d7e, 0x6010,
++      0xa06d, 0x0040, 0x9a6e, 0xad84, 0xf000, 0x0040, 0x9a6e, 0x6003,
++      0x0002, 0x6018, 0x2004, 0xd0bc, 0x00c0, 0x9a6e, 0x2019, 0x0004,
++      0x1078, 0xa1ca, 0x6013, 0x0000, 0x6014, 0xa005, 0x00c0, 0x9a6c,
++      0x2001, 0xa8a3, 0x2004, 0x6016, 0x6003, 0x0007, 0x0d7f, 0x037f,
++      0x007c, 0x0d7e, 0x1078, 0x61cd, 0x1078, 0x62d1, 0x1078, 0x8d06,
++      0x0040, 0x9a7e, 0x6010, 0x2068, 0x1078, 0x13a4, 0x1078, 0x8ec6,
++      0x0d7f, 0x007c, 0x9a95, 0x9ab4, 0x9a9e, 0x9ac1, 0x9a95, 0x9a95,
++      0x9a95, 0x9a95, 0x9a95, 0x9a95, 0x9a95, 0x9a95, 0x9a95, 0x9a95,
++      0x9a95, 0x9a95, 0x9a95, 0x9a95, 0x9a95, 0x1078, 0x1332, 0x6010,
++      0xa088, 0x0013, 0x2104, 0xa085, 0x0400, 0x200a, 0x1078, 0x61cd,
++      0x6010, 0xa080, 0x0013, 0x2004, 0xd0b4, 0x0040, 0x9aaf, 0x6003,
++      0x0007, 0x2009, 0x0043, 0x1078, 0x775c, 0x0078, 0x9ab1, 0x6003,
++      0x0002, 0x1078, 0x62d1, 0x007c, 0x1078, 0x61cd, 0x1078, 0xa423,
++      0x00c0, 0x9abe, 0x1078, 0x5bc1, 0x1078, 0x772d, 0x1078, 0x62d1,
++      0x007c, 0x1078, 0x61cd, 0x2009, 0x0041, 0x0078, 0x9c1e, 0xa182,
++      0x0040, 0x0079, 0x9acb, 0x9ade, 0x9ae0, 0x9ade, 0x9ade, 0x9ade,
++      0x9ade, 0x9ade, 0x9ae1, 0x9ade, 0x9ade, 0x9ade, 0x9ade, 0x9ade,
++      0x9ade, 0x9ade, 0x9ade, 0x9ade, 0x9aec, 0x9ade, 0x1078, 0x1332,
++      0x007c, 0x6003, 0x0004, 0x6110, 0x20e1, 0x0005, 0x3d18, 0x3e20,
++      0x2c10, 0x1078, 0x15fa, 0x007c, 0x0d7e, 0x1078, 0x5bc1, 0x0d7f,
++      0x1078, 0xa495, 0x1078, 0x772d, 0x007c, 0xa182, 0x0040, 0x0079,
++      0x9af9, 0x9b0c, 0x9b0c, 0x9b0c, 0x9b0c, 0x9b0c, 0x9b0c, 0x9b0c,
++      0x9b0e, 0x9b0c, 0x9b11, 0x9b3c, 0x9b0c, 0x9b0c, 0x9b0c, 0x9b0c,
++      0x9b3c, 0x9b0c, 0x9b0c, 0x9b0c, 0x1078, 0x1332, 0x1078, 0x7773,
++      0x007c, 0x1078, 0x627a, 0x1078, 0x639b, 0x6010, 0x0d7e, 0x2068,
++      0x684c, 0xd0fc, 0x0040, 0x9b27, 0xa08c, 0x0003, 0xa18e, 0x0002,
++      0x0040, 0x9b2f, 0x2009, 0x0041, 0x0d7f, 0x0078, 0x9c1e, 0x6003,
++      0x0007, 0x6017, 0x0000, 0x1078, 0x5bc1, 0x0d7f, 0x007c, 0x1078,
++      0xa423, 0x0040, 0x9b35, 0x0d7f, 0x007c, 0x1078, 0x5bc1, 0x1078,
++      0x772d, 0x0d7f, 0x0078, 0x9b2e, 0x037e, 0x1078, 0x627a, 0x1078,
++      0x639b, 0x6010, 0x0d7e, 0x2068, 0x6018, 0x2004, 0xd0bc, 0x0040,
++      0x9b5c, 0x684c, 0xa084, 0x0003, 0xa086, 0x0002, 0x0040, 0x9b58,
++      0x687c, 0x632c, 0xa31a, 0x632e, 0x6880, 0x6328, 0xa31b, 0x632a,
++      0x6003, 0x0002, 0x0078, 0x9b6d, 0x2019, 0x0004, 0x1078, 0xa1ca,
++      0x6014, 0xa005, 0x00c0, 0x9b69, 0x2001, 0xa8a3, 0x2004, 0x8003,
++      0x6016, 0x6013, 0x0000, 0x6003, 0x0007, 0x0d7f, 0x037f, 0x007c,
++      0xa186, 0x0013, 0x00c0, 0x9b7e, 0x6004, 0xa086, 0x0042, 0x10c0,
++      0x1332, 0x1078, 0x61cd, 0x1078, 0x62d1, 0x007c, 0xa186, 0x0027,
++      0x0040, 0x9b86, 0xa186, 0x0014, 0x00c0, 0x9b96, 0x6004, 0xa086,
++      0x0042, 0x10c0, 0x1332, 0x2001, 0x0007, 0x1078, 0x4535, 0x1078,
++      0x61cd, 0x1078, 0x8ec6, 0x1078, 0x62d1, 0x007c, 0xa182, 0x0040,
++      0x0079, 0x9b9a, 0x9bad, 0x9bad, 0x9bad, 0x9bad, 0x9bad, 0x9bad,
++      0x9bad, 0x9baf, 0x9bbb, 0x9bad, 0x9bad, 0x9bad, 0x9bad, 0x9bad,
++      0x9bad, 0x9bad, 0x9bad, 0x9bad, 0x9bad, 0x1078, 0x1332, 0x037e,
++      0x047e, 0x20e1, 0x0005, 0x3d18, 0x3e20, 0x2c10, 0x1078, 0x15fa,
++      0x047f, 0x037f, 0x007c, 0x6010, 0x0d7e, 0x2068, 0x6810, 0x6a14,
++      0x6118, 0x210c, 0xd1bc, 0x0040, 0x9bda, 0x6124, 0xd1f4, 0x00c0,
++      0x9bda, 0x007e, 0x047e, 0x057e, 0x6c7c, 0xa422, 0x6d80, 0x2200,
++      0xa52b, 0x602c, 0xa420, 0x642e, 0x6028, 0xa529, 0x652a, 0x057f,
++      0x047f, 0x007f, 0xa20d, 0x00c0, 0x9bee, 0x684c, 0xd0fc, 0x0040,
++      0x9be6, 0x2009, 0x0041, 0x0d7f, 0x0078, 0x9c1e, 0x6003, 0x0007,
++      0x6017, 0x0000, 0x1078, 0x5bc1, 0x0d7f, 0x007c, 0x007e, 0x0f7e,
++      0x2c78, 0x1078, 0x4963, 0x0f7f, 0x007f, 0x0040, 0x9bfb, 0x6003,
++      0x0002, 0x0d7f, 0x007c, 0x2009, 0xa60d, 0x210c, 0xd19c, 0x0040,
++      0x9c05, 0x6003, 0x0007, 0x0078, 0x9c07, 0x6003, 0x0006, 0x1078,
++      0x9c0d, 0x1078, 0x5bc3, 0x0d7f, 0x007c, 0xd2fc, 0x0040, 0x9c19,
++      0x8002, 0x8000, 0x8212, 0xa291, 0x0000, 0x2009, 0x0009, 0x0078,
++      0x9c1b, 0x2009, 0x0015, 0x6a6a, 0x6866, 0x007c, 0xa182, 0x0040,
++      0x0048, 0x9c24, 0x0079, 0x9c31, 0xa186, 0x0013, 0x0040, 0x9c2c,
++      0xa186, 0x0014, 0x10c0, 0x1332, 0x6024, 0xd0dc, 0x1040, 0x1332,
++      0x007c, 0x9c44, 0x9c4b, 0x9c57, 0x9c63, 0x9c44, 0x9c44, 0x9c44,
++      0x9c72, 0x9c44, 0x9c46, 0x9c46, 0x9c44, 0x9c44, 0x9c44, 0x9c44,
++      0x9c44, 0x9c44, 0x9c44, 0x9c44, 0x1078, 0x1332, 0x6024, 0xd0dc,
++      0x1040, 0x1332, 0x007c, 0x6003, 0x0001, 0x6106, 0x1078, 0x5d8a,
++      0x127e, 0x2091, 0x8000, 0x1078, 0x62d1, 0x127f, 0x007c, 0x6003,
++      0x0001, 0x6106, 0x1078, 0x5d8a, 0x127e, 0x2091, 0x8000, 0x1078,
++      0x62d1, 0x127f, 0x007c, 0x6003, 0x0003, 0x6106, 0x2c10, 0x1078,
++      0x1cf0, 0x127e, 0x2091, 0x8000, 0x1078, 0x5df6, 0x1078, 0x639b,
++      0x127f, 0x007c, 0xa016, 0x1078, 0x15fa, 0x007c, 0x127e, 0x2091,
++      0x8000, 0x037e, 0x0d7e, 0xa182, 0x0040, 0x1079, 0x9c83, 0x0d7f,
++      0x037f, 0x127f, 0x007c, 0x9c93, 0x9c95, 0x9caa, 0x9cc9, 0x9c93,
++      0x9c93, 0x9c93, 0x9ce1, 0x9c93, 0x9c93, 0x9c93, 0x9c93, 0x9c93,
++      0x9c93, 0x9c93, 0x9c93, 0x1078, 0x1332, 0x6010, 0x2068, 0x684c,
++      0xd0fc, 0x0040, 0x9cbf, 0xa09c, 0x0003, 0xa39e, 0x0003, 0x0040,
++      0x9cbf, 0x6003, 0x0001, 0x6106, 0x1078, 0x5d8a, 0x1078, 0x62d1,
++      0x0078, 0x9ce4, 0x6010, 0x2068, 0x684c, 0xd0fc, 0x0040, 0x9cbf,
++      0xa09c, 0x0003, 0xa39e, 0x0003, 0x0040, 0x9cbf, 0x6003, 0x0001,
++      0x6106, 0x1078, 0x5d8a, 0x1078, 0x62d1, 0x0078, 0x9ce4, 0x6013,
++      0x0000, 0x6017, 0x0000, 0x2019, 0x0004, 0x1078, 0xa1ca, 0x0078,
++      0x9ce4, 0x6010, 0x2068, 0x684c, 0xd0fc, 0x0040, 0x9cbf, 0xa09c,
++      0x0003, 0xa39e, 0x0003, 0x0040, 0x9cbf, 0x6003, 0x0003, 0x6106,
++      0x2c10, 0x1078, 0x1cf0, 0x1078, 0x5df6, 0x1078, 0x639b, 0x0078,
++      0x9ce4, 0xa016, 0x1078, 0x15fa, 0x007c, 0x1078, 0x61cd, 0x6110,
++      0x81ff, 0x0040, 0x9cf6, 0x0d7e, 0x2168, 0x1078, 0xa4e2, 0x037e,
++      0x2019, 0x0029, 0x1078, 0xa1ca, 0x037f, 0x0d7f, 0x1078, 0x8ec6,
++      0x1078, 0x62d1, 0x007c, 0x1078, 0x627a, 0x6110, 0x81ff, 0x0040,
++      0x9d0c, 0x0d7e, 0x2168, 0x1078, 0xa4e2, 0x037e, 0x2019, 0x0029,
++      0x1078, 0xa1ca, 0x037f, 0x0d7f, 0x1078, 0x8ec6, 0x1078, 0x639b,
++      0x007c, 0xa182, 0x0085, 0x0079, 0x9d15, 0x9d1e, 0x9d1c, 0x9d1c,
++      0x9d2a, 0x9d1c, 0x9d1c, 0x9d1c, 0x1078, 0x1332, 0x6003, 0x000b,
++      0x6106, 0x1078, 0x5d8a, 0x127e, 0x2091, 0x8000, 0x1078, 0x62d1,
++      0x127f, 0x007c, 0x027e, 0x0e7e, 0x1078, 0xa41c, 0x0040, 0x9d34,
++      0x1078, 0x772d, 0x0078, 0x9d50, 0x2071, 0xab80, 0x7224, 0x6212,
++      0x7220, 0x1078, 0xa069, 0x0040, 0x9d41, 0x6007, 0x0086, 0x0078,
++      0x9d4a, 0x6007, 0x0087, 0x7224, 0xa296, 0xffff, 0x00c0, 0x9d4a,
++      0x6007, 0x0086, 0x6003, 0x0001, 0x1078, 0x5d8a, 0x1078, 0x62d1,
++      0x0e7f, 0x027f, 0x007c, 0xa186, 0x0013, 0x00c0, 0x9d64, 0x6004,
++      0xa08a, 0x0085, 0x1048, 0x1332, 0xa08a, 0x008c, 0x10c8, 0x1332,
++      0xa082, 0x0085, 0x0079, 0x9d7b, 0xa186, 0x0027, 0x0040, 0x9d70,
++      0xa186, 0x0014, 0x0040, 0x9d70, 0x1078, 0x7773, 0x0078, 0x9d7a,
++      0x2001, 0x0007, 0x1078, 0x4535, 0x1078, 0x61cd, 0x1078, 0x8ec6,
++      0x1078, 0x62d1, 0x007c, 0x9d82, 0x9d84, 0x9d84, 0x9d82, 0x9d82,
++      0x9d82, 0x9d82, 0x1078, 0x1332, 0x1078, 0x61cd, 0x1078, 0x8ec6,
++      0x1078, 0x62d1, 0x007c, 0xa182, 0x0085, 0x1048, 0x1332, 0xa182,
++      0x008c, 0x10c8, 0x1332, 0xa182, 0x0085, 0x0079, 0x9d97, 0x9d9e,
++      0x9d9e, 0x9d9e, 0x9da0, 0x9d9e, 0x9d9e, 0x9d9e, 0x1078, 0x1332,
++      0x007c, 0xa186, 0x0013, 0x0040, 0x9db1, 0xa186, 0x0014, 0x0040,
++      0x9db1, 0xa186, 0x0027, 0x0040, 0x9db1, 0x1078, 0x7773, 0x0078,
++      0x9db7, 0x1078, 0x61cd, 0x1078, 0x8ec6, 0x1078, 0x62d1, 0x007c,
++      0x037e, 0x1078, 0xa495, 0x603f, 0x0000, 0x2019, 0x000b, 0x1078,
++      0x9dc7, 0x601f, 0x0006, 0x6003, 0x0007, 0x037f, 0x007c, 0x127e,
++      0x037e, 0x2091, 0x8000, 0x087e, 0x2c40, 0x097e, 0x2049, 0x0000,
++      0x1078, 0x7246, 0x097f, 0x087f, 0x00c0, 0x9e02, 0x077e, 0x2c38,
++      0x1078, 0x72f3, 0x077f, 0x00c0, 0x9e02, 0x6000, 0xa086, 0x0000,
++      0x0040, 0x9e02, 0x601c, 0xa086, 0x0007, 0x0040, 0x9e02, 0x0d7e,
++      0x6000, 0xa086, 0x0004, 0x00c0, 0x9df3, 0x1078, 0xa495, 0x601f,
++      0x0007, 0x1078, 0x1757, 0x6010, 0x2068, 0x1078, 0x8d06, 0x0040,
++      0x9dfb, 0x1078, 0xa1ca, 0x0d7f, 0x6013, 0x0000, 0x1078, 0xa495,
++      0x601f, 0x0007, 0x037f, 0x127f, 0x007c, 0x0f7e, 0x0c7e, 0x037e,
++      0x157e, 0x2079, 0xab80, 0x7938, 0x783c, 0x1078, 0x254d, 0x00c0,
++      0x9e49, 0x017e, 0x0c7e, 0x1078, 0x45c4, 0x00c0, 0x9e49, 0x017f,
++      0x027f, 0x027e, 0x017e, 0x2019, 0x0029, 0x1078, 0x73d0, 0x1078,
++      0x5f01, 0x077e, 0x2039, 0x0000, 0x1078, 0x5e0a, 0x077f, 0x017f,
++      0x077e, 0x2039, 0x0000, 0x1078, 0x9f8b, 0x077f, 0x1078, 0x47e9,
++      0x027e, 0x6204, 0xa294, 0xff00, 0x8217, 0xa286, 0x0006, 0x0040,
++      0x9e3d, 0xa286, 0x0004, 0x00c0, 0x9e40, 0x62a0, 0x1078, 0x2942,
++      0x027f, 0x017f, 0x1078, 0x42f8, 0x6612, 0x6516, 0xa006, 0x0078,
++      0x9e4b, 0x0c7f, 0x017f, 0x157f, 0x037f, 0x0c7f, 0x0f7f, 0x007c,
++      0x0c7e, 0x0d7e, 0x0e7e, 0x017e, 0x2009, 0xa620, 0x2104, 0xa086,
++      0x0074, 0x00c0, 0x9eb3, 0x2069, 0xab8e, 0x690c, 0xa182, 0x0100,
++      0x0048, 0x9ea3, 0x6908, 0xa184, 0x8000, 0x0040, 0x9eaf, 0x6018,
++      0x2070, 0x7010, 0xa084, 0x00ff, 0x0040, 0x9e72, 0x7000, 0xd0f4,
++      0x0040, 0x9e76, 0xa184, 0x0800, 0x0040, 0x9eaf, 0x6910, 0xa18a,
++      0x0001, 0x0048, 0x9ea7, 0x6914, 0x2069, 0xabae, 0x6904, 0x81ff,
++      0x00c0, 0x9e9b, 0x690c, 0xa182, 0x0100, 0x0048, 0x9ea3, 0x6908,
++      0x81ff, 0x00c0, 0x9e9f, 0x6910, 0xa18a, 0x0001, 0x0048, 0x9ea7,
++      0x6918, 0xa18a, 0x0001, 0x0048, 0x9eaf, 0x0078, 0x9eb9, 0x6013,
++      0x0100, 0x0078, 0x9eb5, 0x6013, 0x0300, 0x0078, 0x9eb5, 0x6013,
++      0x0500, 0x0078, 0x9eb5, 0x6013, 0x0700, 0x0078, 0x9eb5, 0x6013,
++      0x0900, 0x0078, 0x9eb5, 0x6013, 0x0b00, 0x0078, 0x9eb5, 0x6013,
++      0x0f00, 0x0078, 0x9eb5, 0x6013, 0x2d00, 0xa085, 0x0001, 0x0078,
++      0x9eba, 0xa006, 0x017f, 0x0e7f, 0x0d7f, 0x0c7f, 0x007c, 0x0c7e,
++      0x0d7e, 0x027e, 0x037e, 0x157e, 0x6218, 0x2268, 0x6b04, 0xa394,
++      0x00ff, 0xa286, 0x0006, 0x0040, 0x9ee3, 0xa286, 0x0004, 0x0040,
++      0x9ee3, 0xa394, 0xff00, 0x8217, 0xa286, 0x0006, 0x0040, 0x9ee3,
++      0xa286, 0x0004, 0x0040, 0x9ee3, 0x0c7e, 0x2d60, 0x1078, 0x45d6,
++      0x0c7f, 0x0078, 0x9f1e, 0x2011, 0xab96, 0xad98, 0x000a, 0x20a9,
++      0x0004, 0x1078, 0x80de, 0x00c0, 0x9f1f, 0x2011, 0xab9a, 0xad98,
++      0x0006, 0x20a9, 0x0004, 0x1078, 0x80de, 0x00c0, 0x9f1f, 0x047e,
++      0x017e, 0x6aa0, 0xa294, 0x00ff, 0x8227, 0xa006, 0x2009, 0xa653,
++      0x210c, 0xd1a4, 0x0040, 0x9f0b, 0x2009, 0x0029, 0x1078, 0xa21d,
++      0x6800, 0xc0e5, 0x6802, 0x2019, 0x0029, 0x1078, 0x5f01, 0x077e,
++      0x2039, 0x0000, 0x1078, 0x5e0a, 0x2c08, 0x1078, 0x9f8b, 0x077f,
++      0x2001, 0x0007, 0x1078, 0x4535, 0x017f, 0x047f, 0xa006, 0x157f,
++      0x037f, 0x027f, 0x0d7f, 0x0c7f, 0x007c, 0x0d7e, 0x2069, 0xab8e,
++      0x6800, 0xa086, 0x0800, 0x0040, 0x9f31, 0x6013, 0x0000, 0x0078,
++      0x9f32, 0xa006, 0x0d7f, 0x007c, 0x0c7e, 0x0f7e, 0x017e, 0x027e,
++      0x037e, 0x157e, 0x2079, 0xab8c, 0x7930, 0x7834, 0x1078, 0x254d,
++      0x00c0, 0x9f58, 0x1078, 0x45c4, 0x00c0, 0x9f58, 0x2011, 0xab90,
++      0xac98, 0x000a, 0x20a9, 0x0004, 0x1078, 0x80de, 0x00c0, 0x9f58,
++      0x2011, 0xab94, 0xac98, 0x0006, 0x20a9, 0x0004, 0x1078, 0x80de,
++      0x157f, 0x037f, 0x027f, 0x017f, 0x0f7f, 0x0c7f, 0x007c, 0x0c7e,
++      0x007e, 0x017e, 0x027e, 0x037e, 0x157e, 0x2011, 0xab83, 0x2204,
++      0x8211, 0x220c, 0x1078, 0x254d, 0x00c0, 0x9f84, 0x1078, 0x45c4,
++      0x00c0, 0x9f84, 0x2011, 0xab96, 0xac98, 0x000a, 0x20a9, 0x0004,
++      0x1078, 0x80de, 0x00c0, 0x9f84, 0x2011, 0xab9a, 0xac98, 0x0006,
++      0x20a9, 0x0004, 0x1078, 0x80de, 0x157f, 0x037f, 0x027f, 0x017f,
++      0x007f, 0x0c7f, 0x007c, 0x0e7e, 0x0c7e, 0x087e, 0x077e, 0x067e,
++      0x057e, 0x047e, 0x027e, 0x127e, 0x2091, 0x8000, 0x2740, 0x2029,
++      0xa8ba, 0x252c, 0x2021, 0xa8c0, 0x2424, 0x2061, 0xad00, 0x2071,
++      0xa600, 0x7648, 0x7064, 0x81ff, 0x0040, 0x9fb2, 0x007e, 0xa186,
++      0xa9b3, 0x007f, 0x0040, 0x9fb2, 0x8001, 0xa602, 0x00c8, 0xa01c,
++      0x0078, 0x9fb5, 0xa606, 0x0040, 0xa01c, 0x2100, 0xac06, 0x0040,
++      0xa012, 0x1078, 0xa242, 0x0040, 0xa012, 0x671c, 0xa786, 0x0001,
++      0x0040, 0xa037, 0xa786, 0x0004, 0x0040, 0xa037, 0xa786, 0x0007,
++      0x0040, 0xa012, 0x2500, 0xac06, 0x0040, 0xa012, 0x2400, 0xac06,
++      0x0040, 0xa012, 0x1078, 0xa256, 0x00c0, 0xa012, 0x88ff, 0x0040,
++      0x9fdd, 0x6020, 0xa906, 0x00c0, 0xa012, 0x0d7e, 0x6000, 0xa086,
++      0x0004, 0x00c0, 0x9fe7, 0x017e, 0x1078, 0x1757, 0x017f, 0xa786,
++      0x0008, 0x00c0, 0x9ff6, 0x1078, 0x8f00, 0x00c0, 0x9ff6, 0x1078,
++      0x7c83, 0x0d7f, 0x1078, 0x8ec6, 0x0078, 0xa012, 0x6010, 0x2068,
++      0x1078, 0x8d06, 0x0040, 0xa00f, 0xa786, 0x0003, 0x00c0, 0xa026,
++      0x6837, 0x0103, 0x6b4a, 0x6847, 0x0000, 0x1078, 0xa4e2, 0x017e,
++      0x1078, 0x8f7d, 0x1078, 0x4a73, 0x017f, 0x1078, 0x8eb9, 0x0d7f,
++      0x1078, 0x8ec6, 0xace0, 0x0010, 0x2001, 0xa616, 0x2004, 0xac02,
++      0x00c8, 0xa01c, 0x0078, 0x9f9f, 0x127f, 0x027f, 0x047f, 0x057f,
++      0x067f, 0x077f, 0x087f, 0x0c7f, 0x0e7f, 0x007c, 0xa786, 0x0006,
++      0x00c0, 0xa000, 0xa386, 0x0005, 0x0040, 0xa034, 0x1078, 0xa4e2,
++      0x1078, 0xa1ca, 0x0078, 0xa00f, 0x0d7f, 0x0078, 0xa012, 0x1078,
++      0xa256, 0x00c0, 0xa012, 0x81ff, 0x0040, 0xa012, 0xa180, 0x0001,
++      0x2004, 0xa086, 0x0018, 0x0040, 0xa04c, 0xa180, 0x0001, 0x2004,
++      0xa086, 0x002d, 0x00c0, 0xa012, 0x6000, 0xa086, 0x0002, 0x00c0,
++      0xa012, 0x1078, 0x8eec, 0x0040, 0xa05d, 0x1078, 0x8f00, 0x00c0,
++      0xa012, 0x1078, 0x7c83, 0x0078, 0xa065, 0x1078, 0x28a6, 0x1078,
++      0x8f00, 0x00c0, 0xa065, 0x1078, 0x7c83, 0x1078, 0x8ec6, 0x0078,
++      0xa012, 0x0c7e, 0x0e7e, 0x017e, 0x2c08, 0x2170, 0xa006, 0x1078,
++      0xa1e6, 0x017f, 0x0040, 0xa079, 0x601c, 0xa084, 0x000f, 0x1079,
++      0xa07c, 0x0e7f, 0x0c7f, 0x007c, 0xa084, 0xa084, 0xa084, 0xa084,
++      0xa084, 0xa084, 0xa086, 0xa084, 0xa006, 0x007c, 0x047e, 0x017e,
++      0x7018, 0xa080, 0x0028, 0x2024, 0xa4a4, 0x00ff, 0x8427, 0x2c00,
++      0x2009, 0x0020, 0x1078, 0xa21d, 0x017f, 0x047f, 0x037e, 0x2019,
++      0x0002, 0x1078, 0x9dc7, 0x037f, 0xa085, 0x0001, 0x007c, 0x2001,
++      0x0001, 0x1078, 0x44ee, 0x157e, 0x017e, 0x027e, 0x037e, 0x20a9,
++      0x0004, 0x2019, 0xa605, 0x2011, 0xab96, 0x1078, 0x80de, 0x037f,
++      0x027f, 0x017f, 0x157f, 0xa005, 0x007c, 0x0f7e, 0x0e7e, 0x0c7e,
++      0x087e, 0x077e, 0x067e, 0x027e, 0x127e, 0x2091, 0x8000, 0x2740,
++      0x2061, 0xad00, 0x2079, 0x0001, 0x8fff, 0x0040, 0xa11d, 0x2071,
++      0xa600, 0x7648, 0x7064, 0x8001, 0xa602, 0x00c8, 0xa11d, 0x88ff,
++      0x0040, 0xa0d8, 0x2800, 0xac06, 0x00c0, 0xa113, 0x2079, 0x0000,
++      0x1078, 0xa242, 0x0040, 0xa113, 0x2400, 0xac06, 0x0040, 0xa113,
++      0x671c, 0xa786, 0x0006, 0x00c0, 0xa113, 0xa786, 0x0007, 0x0040,
++      0xa113, 0x88ff, 0x00c0, 0xa0f7, 0x6018, 0xa206, 0x00c0, 0xa113,
++      0x85ff, 0x0040, 0xa0f7, 0x6020, 0xa106, 0x00c0, 0xa113, 0x0d7e,
++      0x6000, 0xa086, 0x0004, 0x00c0, 0xa103, 0x1078, 0xa495, 0x601f,
++      0x0007, 0x1078, 0x1757, 0x6010, 0x2068, 0x1078, 0x8d06, 0x0040,
++      0xa10d, 0x047e, 0x1078, 0xa1ca, 0x047f, 0x0d7f, 0x1078, 0x8ec6,
++      0x88ff, 0x00c0, 0xa127, 0xace0, 0x0010, 0x2001, 0xa616, 0x2004,
++      0xac02, 0x00c8, 0xa11d, 0x0078, 0xa0c4, 0xa006, 0x127f, 0x027f,
++      0x067f, 0x077f, 0x087f, 0x0c7f, 0x0e7f, 0x0f7f, 0x007c, 0xa8c5,
++      0x0001, 0x0078, 0xa11e, 0x077e, 0x057e, 0x087e, 0x2041, 0x0000,
++      0x2029, 0x0001, 0x2c20, 0x2019, 0x0002, 0x6218, 0x097e, 0x2049,
++      0x0000, 0x1078, 0x7246, 0x097f, 0x087f, 0x2039, 0x0000, 0x1078,
++      0x72f3, 0x1078, 0xa0b5, 0x057f, 0x077f, 0x007c, 0x027e, 0x047e,
++      0x057e, 0x077e, 0x0c7e, 0x157e, 0x2c20, 0x2128, 0x20a9, 0x007f,
++      0x2009, 0x0000, 0x017e, 0x037e, 0x1078, 0x45c4, 0x00c0, 0xa16e,
++      0x2c10, 0x057e, 0x087e, 0x2041, 0x0000, 0x2508, 0x2029, 0x0001,
++      0x097e, 0x2049, 0x0000, 0x1078, 0x7246, 0x097f, 0x087f, 0x2039,
++      0x0000, 0x1078, 0x72f3, 0x1078, 0xa0b5, 0x057f, 0x037f, 0x017f,
++      0x8108, 0x00f0, 0xa152, 0x157f, 0x0c7f, 0x077f, 0x057f, 0x047f,
++      0x027f, 0x007c, 0x077e, 0x057e, 0x6218, 0x087e, 0x2041, 0x0000,
++      0x2029, 0x0001, 0x2019, 0x0048, 0x097e, 0x2049, 0x0000, 0x1078,
++      0x7246, 0x097f, 0x087f, 0x2039, 0x0000, 0x1078, 0x72f3, 0x2c20,
++      0x1078, 0xa0b5, 0x057f, 0x077f, 0x007c, 0x027e, 0x047e, 0x057e,
++      0x077e, 0x0c7e, 0x157e, 0x2c20, 0x20a9, 0x007f, 0x2009, 0x0000,
++      0x017e, 0x037e, 0x1078, 0x45c4, 0x00c0, 0xa1be, 0x2c10, 0x087e,
++      0x2041, 0x0000, 0x2828, 0x047e, 0x2021, 0x0001, 0x1078, 0xa472,
++      0x047f, 0x097e, 0x2049, 0x0000, 0x1078, 0x7246, 0x097f, 0x087f,
++      0x2039, 0x0000, 0x1078, 0x72f3, 0x1078, 0xa0b5, 0x037f, 0x017f,
++      0x8108, 0x00f0, 0xa1a0, 0x157f, 0x0c7f, 0x077f, 0x057f, 0x047f,
++      0x027f, 0x007c, 0x017e, 0x0f7e, 0xad82, 0xcd00, 0x0048, 0xa1e3,
++      0xad82, 0xffff, 0x00c8, 0xa1e3, 0x6800, 0xa07d, 0x0040, 0xa1e0,
++      0x6803, 0x0000, 0x6b52, 0x1078, 0x4a73, 0x2f68, 0x0078, 0xa1d4,
++      0x6b52, 0x1078, 0x4a73, 0x0f7f, 0x017f, 0x007c, 0x0e7e, 0x047e,
++      0x037e, 0x2061, 0xad00, 0xa005, 0x00c0, 0xa1f6, 0x2071, 0xa600,
++      0x7448, 0x7064, 0x8001, 0xa402, 0x00c8, 0xa218, 0x2100, 0xac06,
++      0x0040, 0xa20a, 0x6000, 0xa086, 0x0000, 0x0040, 0xa20a, 0x6008,
++      0xa206, 0x00c0, 0xa20a, 0x6018, 0xa1a0, 0x0006, 0x2424, 0xa406,
++      0x0040, 0xa214, 0xace0, 0x0010, 0x2001, 0xa616, 0x2004, 0xac02,
++      0x00c8, 0xa218, 0x0078, 0xa1f6, 0xa085, 0x0001, 0x0078, 0xa219,
++      0xa006, 0x037f, 0x047f, 0x0e7f, 0x007c, 0x0d7e, 0x007e, 0x1078,
++      0x138b, 0x007f, 0x1040, 0x1332, 0x6837, 0x010d, 0x685e, 0x027e,
++      0x2010, 0x1078, 0x8cf2, 0x2001, 0x0000, 0x0040, 0xa233, 0x2200,
++      0xa080, 0x0008, 0x2004, 0x027f, 0x684a, 0x6956, 0x6c46, 0x684f,
++      0x0000, 0xa006, 0x68b2, 0x6802, 0x683a, 0x685a, 0x1078, 0x4a73,
++      0x0d7f, 0x007c, 0x6700, 0xa786, 0x0000, 0x0040, 0xa255, 0xa786,
++      0x0001, 0x0040, 0xa255, 0xa786, 0x000a, 0x0040, 0xa255, 0xa786,
++      0x0009, 0x0040, 0xa255, 0xa085, 0x0001, 0x007c, 0x0e7e, 0x6018,
++      0x2070, 0x70a0, 0xa206, 0x0e7f, 0x007c, 0x017e, 0x6004, 0xa08e,
++      0x001e, 0x00c0, 0xa277, 0x8007, 0x6130, 0xa18c, 0x00ff, 0xa105,
++      0x6032, 0x6007, 0x0085, 0x6003, 0x000b, 0x601f, 0x0005, 0x2001,
++      0xa8a3, 0x2004, 0x6016, 0x1078, 0x5d8a, 0x1078, 0x62d1, 0x017f,
++      0x007c, 0x0005, 0x0005, 0x007c, 0x6024, 0xd0e4, 0x0040, 0xa28d,
++      0xd0cc, 0x0040, 0xa287, 0x1078, 0x8fbf, 0x0078, 0xa28d, 0x1078,
++      0xa495, 0x1078, 0x5bc1, 0x1078, 0x772d, 0x007c, 0xa280, 0x0007,
++      0x2004, 0xa084, 0x000f, 0x0079, 0xa295, 0xa29e, 0xa29e, 0xa29e,
++      0xa2a0, 0xa29e, 0xa2a0, 0xa2a0, 0xa29e, 0xa2a0, 0xa006, 0x007c,
++      0xa085, 0x0001, 0x007c, 0xa280, 0x0007, 0x2004, 0xa084, 0x000f,
++      0x0079, 0xa2aa, 0xa2b3, 0xa2b3, 0xa2b3, 0xa2b3, 0xa2b3, 0xa2b3,
++      0xa2be, 0xa2b3, 0xa2b3, 0x6007, 0x003b, 0x602b, 0x0009, 0x6013,
++      0x2a00, 0x6003, 0x0001, 0x1078, 0x5d8a, 0x007c, 0x0c7e, 0x2260,
++      0x1078, 0xa495, 0x603f, 0x0000, 0x6024, 0xc0f4, 0xc0cc, 0x6026,
++      0x0c7f, 0x0d7e, 0x2268, 0xa186, 0x0007, 0x00c0, 0xa31f, 0x6810,
++      0xa005, 0x0040, 0xa2dc, 0xa080, 0x0013, 0x2004, 0xd0fc, 0x00c0,
++      0xa2dc, 0x0d7f, 0x0078, 0xa2b3, 0x6007, 0x003a, 0x6003, 0x0001,
++      0x1078, 0x5d8a, 0x1078, 0x62d1, 0x0c7e, 0x2d60, 0x6100, 0xa186,
++      0x0002, 0x00c0, 0xa3ad, 0x6010, 0xa005, 0x00c0, 0xa2f6, 0x6000,
++      0xa086, 0x0007, 0x10c0, 0x1332, 0x0078, 0xa3ad, 0xa08c, 0xf000,
++      0x00c0, 0xa302, 0x0078, 0xa302, 0x2068, 0x6800, 0xa005, 0x00c0,
++      0xa2fc, 0x2d00, 0xa080, 0x0013, 0x2004, 0xa084, 0x0003, 0xa086,
++      0x0002, 0x00c0, 0xa31b, 0x6010, 0x2068, 0x684c, 0xc0dc, 0xc0f4,
++      0x684e, 0x6850, 0xc0f4, 0xc0fc, 0x6852, 0x2009, 0x0043, 0x1078,
++      0x9c1e, 0x0078, 0xa3ad, 0x2009, 0x0041, 0x0078, 0xa3a7, 0xa186,
++      0x0005, 0x00c0, 0xa366, 0x6810, 0xa080, 0x0013, 0x2004, 0xd0bc,
++      0x00c0, 0xa32d, 0x0d7f, 0x0078, 0xa2b3, 0xd0b4, 0x0040, 0xa335,
++      0xd0fc, 0x1040, 0x1332, 0x0078, 0xa2cf, 0x6007, 0x003a, 0x6003,
++      0x0001, 0x1078, 0x5d8a, 0x1078, 0x62d1, 0x0c7e, 0x2d60, 0x6100,
++      0xa186, 0x0002, 0x0040, 0xa348, 0xa186, 0x0004, 0x00c0, 0xa3ad,
++      0x2071, 0xa8e7, 0x7000, 0xa086, 0x0003, 0x00c0, 0xa355, 0x7004,
++      0xac06, 0x00c0, 0xa355, 0x7003, 0x0000, 0x6810, 0xa080, 0x0013,
++      0x200c, 0xc1f4, 0xc1dc, 0x2102, 0x8000, 0x200c, 0xc1f4, 0xc1fc,
++      0xc1bc, 0x2102, 0x2009, 0x0042, 0x0078, 0xa3a7, 0x037e, 0x0d7e,
++      0x0d7e, 0x1078, 0x138b, 0x037f, 0x1040, 0x1332, 0x6837, 0x010d,
++      0x6803, 0x0000, 0x683b, 0x0000, 0x685b, 0x0000, 0x6b5e, 0x6857,
++      0x0045, 0x2c00, 0x6862, 0x6034, 0x6872, 0x2360, 0x6024, 0xc0dd,
++      0x6026, 0x6018, 0xa080, 0x0028, 0x2004, 0xa084, 0x00ff, 0x8007,
++      0x6320, 0x6b4a, 0x6846, 0x684f, 0x0000, 0x6d6a, 0x6e66, 0x686f,
++      0x0001, 0x1078, 0x4a73, 0x2019, 0x0045, 0x6008, 0x2068, 0x1078,
++      0x9dc7, 0x2d00, 0x600a, 0x601f, 0x0006, 0x6003, 0x0007, 0x6017,
++      0x0000, 0x603f, 0x0000, 0x0d7f, 0x037f, 0x0078, 0xa3ae, 0x603f,
++      0x0000, 0x6003, 0x0007, 0x1078, 0x9c1e, 0x0c7f, 0x0d7f, 0x007c,
++      0xa186, 0x0013, 0x00c0, 0xa3ba, 0x6004, 0xa082, 0x0085, 0x2008,
++      0x0079, 0xa3d4, 0xa186, 0x0027, 0x00c0, 0xa3cd, 0x1078, 0x61cd,
++      0x037e, 0x0d7e, 0x6010, 0x2068, 0x2019, 0x0004, 0x1078, 0xa1ca,
++      0x0d7f, 0x037f, 0x1078, 0x62d1, 0x007c, 0xa186, 0x0014, 0x0040,
++      0xa3be, 0x1078, 0x7773, 0x007c, 0xa3dd, 0xa3db, 0xa3db, 0xa3db,
++      0xa3db, 0xa3db, 0xa3dd, 0x1078, 0x1332, 0x1078, 0x61cd, 0x6003,
++      0x000c, 0x1078, 0x62d1, 0x007c, 0xa182, 0x008c, 0x00c8, 0xa3ee,
++      0xa182, 0x0085, 0x0048, 0xa3ee, 0x0079, 0xa3f1, 0x1078, 0x7773,
++      0x007c, 0xa3f8, 0xa3f8, 0xa3f8, 0xa3f8, 0xa3fa, 0xa419, 0xa3f8,
++      0x1078, 0x1332, 0x0d7e, 0x2c68, 0x1078, 0x76c7, 0x0040, 0xa414,
++      0x6003, 0x0001, 0x6007, 0x001e, 0x2009, 0xab8e, 0x210c, 0x6136,
++      0x2009, 0xab8f, 0x210c, 0x613a, 0x600b, 0xffff, 0x6918, 0x611a,
++      0x601f, 0x0004, 0x1078, 0x5d8a, 0x2d60, 0x1078, 0x772d, 0x0d7f,
++      0x007c, 0x1078, 0x772d, 0x007c, 0x0e7e, 0x6018, 0x2070, 0x7000,
++      0xd0ec, 0x0e7f, 0x007c, 0x6010, 0xa08c, 0xf000, 0x0040, 0xa471,
++      0xa080, 0x0013, 0x200c, 0xd1ec, 0x0040, 0xa471, 0x2001, 0xa672,
++      0x2004, 0xd0ec, 0x0040, 0xa471, 0x6003, 0x0002, 0x6024, 0xc0e5,
++      0x6026, 0xd1ac, 0x0040, 0xa44f, 0x0f7e, 0x2c78, 0x1078, 0x495f,
++      0x0f7f, 0x0040, 0xa44f, 0x2001, 0xa8a4, 0x2004, 0x603e, 0x2009,
++      0xa672, 0x210c, 0xd1f4, 0x00c0, 0xa46f, 0x0078, 0xa461, 0x2009,
++      0xa672, 0x210c, 0xd1f4, 0x0040, 0xa45b, 0x6024, 0xc0e4, 0x6026,
++      0xa006, 0x0078, 0xa471, 0x2001, 0xa8a4, 0x200c, 0x8103, 0xa100,
++      0x603e, 0x6018, 0xa088, 0x002b, 0x2104, 0xa005, 0x0040, 0xa46c,
++      0xa088, 0x0003, 0x0078, 0xa464, 0x2c0a, 0x600f, 0x0000, 0xa085,
++      0x0001, 0x007c, 0x017e, 0x0c7e, 0x0e7e, 0x6120, 0xa2f0, 0x002b,
++      0x2e04, 0x2060, 0x8cff, 0x0040, 0xa491, 0x84ff, 0x00c0, 0xa484,
++      0x6020, 0xa106, 0x00c0, 0xa48c, 0x600c, 0x2072, 0x1078, 0x5bc1,
++      0x1078, 0x772d, 0x0078, 0xa48e, 0xacf0, 0x0003, 0x2e64, 0x0078,
++      0xa47a, 0x0e7f, 0x0c7f, 0x017f, 0x007c, 0x0d7e, 0x6018, 0xa0e8,
++      0x002b, 0x2d04, 0xa005, 0x0040, 0xa4a7, 0xac06, 0x0040, 0xa4a5,
++      0x2d04, 0xa0e8, 0x0003, 0x0078, 0xa499, 0x600c, 0x206a, 0x0d7f,
++      0x007c, 0x027e, 0x037e, 0x157e, 0x2011, 0xa626, 0x2204, 0xa084,
++      0x00ff, 0x2019, 0xab8e, 0x2334, 0xa636, 0x00c0, 0xa4d5, 0x8318,
++      0x2334, 0x2204, 0xa084, 0xff00, 0xa636, 0x00c0, 0xa4d5, 0x2011,
++      0xab90, 0x6018, 0xa098, 0x000a, 0x20a9, 0x0004, 0x1078, 0x80de,
++      0x00c0, 0xa4d5, 0x2011, 0xab94, 0x6018, 0xa098, 0x0006, 0x20a9,
++      0x0004, 0x1078, 0x80de, 0x00c0, 0xa4d5, 0x157f, 0x037f, 0x027f,
++      0x007c, 0x0e7e, 0x2071, 0xa600, 0x1078, 0x42b8, 0x1078, 0x2677,
++      0x0e7f, 0x007c, 0x0e7e, 0x6018, 0x2070, 0x7000, 0xd0fc, 0x0040,
++      0xa4eb, 0x1078, 0xa4ed, 0x0e7f, 0x007c, 0x6850, 0xc0e5, 0x6852,
++      0x007c, 0x0e7e, 0x0c7e, 0x077e, 0x067e, 0x057e, 0x047e, 0x027e,
++      0x017e, 0x127e, 0x2091, 0x8000, 0x2029, 0xa8ba, 0x252c, 0x2021,
++      0xa8c0, 0x2424, 0x2061, 0xad00, 0x2071, 0xa600, 0x7648, 0x7064,
++      0xa606, 0x0040, 0xa545, 0x671c, 0xa786, 0x0001, 0x0040, 0xa514,
++      0xa786, 0x0008, 0x00c0, 0xa53b, 0x2500, 0xac06, 0x0040, 0xa53b,
++      0x2400, 0xac06, 0x0040, 0xa53b, 0x1078, 0xa242, 0x0040, 0xa53b,
++      0x1078, 0xa256, 0x00c0, 0xa53b, 0x6000, 0xa086, 0x0004, 0x00c0,
++      0xa52d, 0x017e, 0x1078, 0x1757, 0x017f, 0x1078, 0x8eec, 0x00c0,
++      0xa533, 0x1078, 0x28a6, 0x1078, 0x8f00, 0x00c0, 0xa539, 0x1078,
++      0x7c83, 0x1078, 0x8ec6, 0xace0, 0x0010, 0x2001, 0xa616, 0x2004,
++      0xac02, 0x00c8, 0xa545, 0x0078, 0xa504, 0x127f, 0x017f, 0x027f,
++      0x047f, 0x057f, 0x067f, 0x077f, 0x0c7f, 0x0e7f, 0x007c, 0x127e,
++      0x007e, 0x0e7e, 0x017e, 0x2091, 0x8000, 0x2071, 0xa640, 0xd5a4,
++      0x0040, 0xa55d, 0x7034, 0x8000, 0x7036, 0xd5b4, 0x0040, 0xa563,
++      0x7030, 0x8000, 0x7032, 0xd5ac, 0x0040, 0xa579, 0x2500, 0xa084,
++      0x0007, 0xa08e, 0x0003, 0x0040, 0xa579, 0xa08e, 0x0004, 0x0040,
++      0xa579, 0xa08e, 0x0005, 0x0040, 0xa579, 0x2071, 0xa64a, 0x1078,
++      0xa5ba, 0x017f, 0x0e7f, 0x007f, 0x127f, 0x007c, 0x127e, 0x007e,
++      0x0e7e, 0x017e, 0x2091, 0x8000, 0x2071, 0xa640, 0xd5a4, 0x0040,
++      0xa58c, 0x7034, 0x8000, 0x7036, 0xd5b4, 0x0040, 0xa592, 0x7030,
++      0x8000, 0x7032, 0xd5ac, 0x0040, 0xa5a8, 0x2500, 0xa084, 0x0007,
++      0xa08e, 0x0003, 0x0040, 0xa5a8, 0xa08e, 0x0004, 0x0040, 0xa5a8,
++      0xa08e, 0x0005, 0x0040, 0xa5a8, 0x2071, 0xa64a, 0x1078, 0xa5ba,
++      0x017f, 0x0e7f, 0x007f, 0x127f, 0x007c, 0x127e, 0x007e, 0x0e7e,
++      0x2091, 0x8000, 0x2071, 0xa642, 0x1078, 0xa5ba, 0x0e7f, 0x007f,
++      0x127f, 0x007c, 0x2e04, 0x8000, 0x2072, 0x00c8, 0xa5c3, 0x8e70,
++      0x2e04, 0x8000, 0x2072, 0x007c, 0x0e7e, 0x2071, 0xa640, 0x1078,
++      0xa5ba, 0x0e7f, 0x007c, 0x0e7e, 0x2071, 0xa644, 0x1078, 0xa5ba,
++      0x0e7f, 0x007c, 0x127e, 0x007e, 0x0e7e, 0x2091, 0x8000, 0x2071,
++      0xa640, 0x7044, 0x8000, 0x7046, 0x0e7f, 0x007f, 0x127f, 0x007c,
++      0x0001, 0x0002, 0x0004, 0x0008, 0x0010, 0x0020, 0x0040, 0x0080,
++      0x0100, 0x0200, 0x0400, 0x0800, 0x1000, 0x2000, 0x4000, 0x8000,
++      0xa50c
++};
++#ifdef UNIQUE_FW_NAME
++unsigned short fw2100tp_length01 = 0x95f1;
++#else
++unsigned short risc_code_length01 = 0x95f1;
++#endif
++
+--- /dev/null  Thu Apr 11 07:25:15 2002
++++ linux-2.5.73-n9560/drivers/scsi/qla2xxx/ql2200ip_fw.c      Thu Jul  3 15:34:42 2003
+@@ -0,0 +1,5884 @@
++/******************************************************************************
++ *                  QLOGIC LINUX SOFTWARE
++ *
++ * QLogic ISP2x00 device driver for Linux 2.5.x
++ * Copyright (C) 2003 Qlogic Corporation
++ * (www.qlogic.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, 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.
++ *
++ *************************************************************************/
++
++/************************************************************************
++ *                                                                    *
++ *          -- ISP2200 Initiator/Target Firmware ---                  *
++ *      IP and SCSI, Fabric (Public Loop), Point-point, and           *
++ *             expanded LUN addressing for FCTAPE                     *
++ *                                                                    *
++ ************************************************************************/
++
++/*
++ *    Firmware Version 2.02.05 (13:47 Apr 25, 2003)
++ */
++
++#ifdef UNIQUE_FW_NAME
++unsigned short fw2200ip_version = 2*1024+2;
++#else
++unsigned short risc_code_version = 2*1024+2;
++#endif
++
++#ifdef UNIQUE_FW_NAME
++unsigned char fw2200ip_version_str[] = {2,2,5};
++#else
++unsigned char firmware_version[] = {2,2,5};
++#endif
++
++#ifdef UNIQUE_FW_NAME
++#define fw2200ip_VERSION_STRING "2.02.05"
++#else
++#define FW_VERSION_STRING "2.02.05"
++#endif
++
++#ifdef UNIQUE_FW_NAME
++unsigned short fw2200ip_addr01 = 0x1000 ;
++#else
++unsigned short risc_code_addr01 = 0x1000 ;
++#endif
++
++#ifdef UNIQUE_FW_NAME
++unsigned short fw2200ip_code01[] = { 
++#else
++unsigned short risc_code01[] = { 
++#endif
++      0x0470, 0x0000, 0x0000, 0xb5c6, 0x0000, 0x0002, 0x0002, 0x0005,
++      0x0037, 0x2043, 0x4f50, 0x5952, 0x4947, 0x4854, 0x2032, 0x3030,
++      0x3120, 0x514c, 0x4f47, 0x4943, 0x2043, 0x4f52, 0x504f, 0x5241,
++      0x5449, 0x4f4e, 0x2049, 0x5350, 0x3232, 0x3030, 0x2046, 0x6972,
++      0x6d77, 0x6172, 0x6520, 0x2056, 0x6572, 0x7369, 0x6f6e, 0x2030,
++      0x322e, 0x3032, 0x2e30, 0x3520, 0x2020, 0x2020, 0x2400, 0x20c1,
++      0x0005, 0x2001, 0x017f, 0x2003, 0x0000, 0x20c9, 0xcbff, 0x2091,
++      0x2000, 0x2059, 0x0000, 0x2b78, 0x7823, 0x0004, 0x2089, 0x2b14,
++      0x2051, 0xc600, 0x2a70, 0x2029, 0xfe00, 0x2031, 0xffff, 0x2039,
++      0xfde9, 0x2021, 0x0200, 0x0804, 0x146c, 0x20a1, 0xc5c6, 0xa00e,
++      0x20a9, 0x083a, 0x41a4, 0x3400, 0x7562, 0x7666, 0x775e, 0x746a,
++      0x746e, 0x20a1, 0xce00, 0x7164, 0x810d, 0x810d, 0x810d, 0x810d,
++      0xa18c, 0x000f, 0x2001, 0x000c, 0xa112, 0xa00e, 0x21a8, 0x41a4,
++      0x3400, 0x8211, 0x1dd8, 0x7164, 0x3400, 0xa102, 0x0120, 0x0218,
++      0x20a8, 0xa00e, 0x41a4, 0x3800, 0xd08c, 0x01d8, 0x2009, 0xc600,
++      0x810d, 0x810d, 0x810d, 0x810d, 0xa18c, 0x000f, 0x2001, 0x0001,
++      0xa112, 0x20a1, 0x1000, 0xa00e, 0x21a8, 0x41a4, 0x8211, 0x1de0,
++      0x2009, 0xc600, 0x3400, 0xa102, 0x0120, 0x0218, 0x20a8, 0xa00e,
++      0x41a4, 0x080c, 0x1415, 0x080c, 0x163c, 0x080c, 0x17de, 0x080c,
++      0x2061, 0x080c, 0x4f3b, 0x080c, 0x9585, 0x080c, 0x15bf, 0x080c,
++      0x306e, 0x080c, 0x61dd, 0x080c, 0x5743, 0x080c, 0x7147, 0x080c,
++      0x6edf, 0x080c, 0x265b, 0x080c, 0x7860, 0x080c, 0x68c0, 0x080c,
++      0x2515, 0x080c, 0x2629, 0x2091, 0x3009, 0x7823, 0x0000, 0x1004,
++      0x10c7, 0x7820, 0xa086, 0x0002, 0x1150, 0x7823, 0x4000, 0x0e04,
++      0x10bf, 0x781b, 0x0001, 0x2091, 0x5000, 0x2091, 0x4080, 0x2a70,
++      0x7003, 0x0000, 0x2a70, 0x7000, 0xa08e, 0x0003, 0x1168, 0x080c,
++      0x40b9, 0x080c, 0x3095, 0x080c, 0x622b, 0x080c, 0x5943, 0x080c,
++      0x7184, 0x080c, 0x6f0a, 0x0c70, 0x000b, 0x0c88, 0x10e8, 0x10e9,
++      0x1214, 0x10e6, 0x12e1, 0x1412, 0x1413, 0x1414, 0x080c, 0x1519,
++      0x0005, 0x0126, 0x00f6, 0x2091, 0x8000, 0x7000, 0xa086, 0x0001,
++      0x1904, 0x11f1, 0x080c, 0x158c, 0x080c, 0x5f22, 0x0150, 0x080c,
++      0x5f48, 0x15c0, 0x2079, 0x0100, 0x7828, 0xa085, 0x1800, 0x782a,
++      0x0488, 0x080c, 0x5e5a, 0x7000, 0xa086, 0x0001, 0x1904, 0x11f1,
++      0x708c, 0xa086, 0x0028, 0x1904, 0x11f1, 0x2001, 0x0161, 0x2003,
++      0x0001, 0x2079, 0x0100, 0x7827, 0xffff, 0x7a28, 0xa295, 0x1e2f,
++      0x7a2a, 0x2011, 0x5df5, 0x080c, 0x6fad, 0x2011, 0x5de8, 0x080c,
++      0x7070, 0x2011, 0x5e37, 0x080c, 0x6fad, 0x2011, 0x4e18, 0x080c,
++      0x6fad, 0x2011, 0x8030, 0x2019, 0x0000, 0x708b, 0x0000, 0x080c,
++      0x1eae, 0x00e8, 0x080c, 0x47cb, 0x2079, 0x0100, 0x7844, 0xa005,
++      0x1904, 0x11f1, 0x2011, 0x4e18, 0x080c, 0x6fad, 0x2011, 0x5e37,
++      0x080c, 0x6fad, 0x080c, 0x1eae, 0x2001, 0xc8d4, 0x2004, 0x780e,
++      0x7840, 0xa084, 0xfffb, 0x7842, 0x2011, 0x8010, 0x73cc, 0x080c,
++      0x407d, 0x723c, 0xc284, 0x723e, 0x2001, 0xc60c, 0x200c, 0xc1ac,
++      0x2102, 0x080c, 0x8dca, 0x2011, 0x0004, 0x080c, 0xac97, 0x080c,
++      0x55e1, 0x080c, 0x5f22, 0x0158, 0x080c, 0x4f24, 0x0140, 0x708b,
++      0x0001, 0x70c7, 0x0000, 0x080c, 0x4968, 0x0804, 0x11f1, 0x080c,
++      0x570b, 0x0120, 0x7a0c, 0xc2b4, 0x7a0e, 0x0060, 0x7073, 0x0000,
++      0x080c, 0xb03f, 0x70d4, 0xd09c, 0x1128, 0x70a0, 0xa005, 0x0110,
++      0x080c, 0x4f02, 0x70df, 0x0000, 0x70db, 0x0000, 0x72d4, 0x080c,
++      0x5f22, 0x1178, 0x2011, 0x0000, 0x0016, 0x080c, 0x2a95, 0x2019,
++      0xc8d6, 0x211a, 0x001e, 0x7053, 0xffff, 0x7057, 0x00ef, 0x7077,
++      0x0000, 0x2079, 0xc652, 0x7804, 0xd0ac, 0x0108, 0xc295, 0x72d6,
++      0x080c, 0x5f22, 0x0118, 0xa296, 0x0004, 0x0548, 0x2011, 0x0001,
++      0x080c, 0xac97, 0x709b, 0x0000, 0x709f, 0xffff, 0x7003, 0x0002,
++      0x2079, 0x0100, 0x7827, 0x0003, 0x7828, 0xa085, 0x0003, 0x782a,
++      0x00fe, 0x080c, 0x2c62, 0x2011, 0x0005, 0x080c, 0x8f0e, 0x080c,
++      0x7e94, 0x080c, 0x5f22, 0x0148, 0x00c6, 0x2061, 0x0100, 0x0016,
++      0x080c, 0x2a95, 0x61e2, 0x001e, 0x00ce, 0x012e, 0x0420, 0x709b,
++      0x0000, 0x709f, 0xffff, 0x7003, 0x0002, 0x00f6, 0x2079, 0x0100,
++      0x7827, 0x0003, 0x7828, 0xa085, 0x0003, 0x782a, 0x00fe, 0x2011,
++      0x0005, 0x080c, 0x8f0e, 0x080c, 0x7e94, 0x080c, 0x5f22, 0x0148,
++      0x00c6, 0x2061, 0x0100, 0x0016, 0x080c, 0x2a95, 0x61e2, 0x001e,
++      0x00ce, 0x00fe, 0x012e, 0x0005, 0x00c6, 0x080c, 0x5f22, 0x1118,
++      0x20a9, 0x0100, 0x0010, 0x20a9, 0x0082, 0x080c, 0x5f22, 0x1118,
++      0x2009, 0x0000, 0x0010, 0x2009, 0x007e, 0x080c, 0x2f41, 0x8108,
++      0x1f04, 0x1205, 0x00ce, 0x7073, 0x0000, 0x7074, 0xa084, 0x00ff,
++      0x7076, 0x70a3, 0x0000, 0x0005, 0x0126, 0x2091, 0x8000, 0x7000,
++      0xa086, 0x0002, 0x1904, 0x12df, 0x709c, 0xa086, 0xffff, 0x0130,
++      0x080c, 0x2c62, 0x080c, 0x7e94, 0x0804, 0x12df, 0x70d4, 0xd0ac,
++      0x1110, 0xd09c, 0x0540, 0xd084, 0x0530, 0x0006, 0x0016, 0x2001,
++      0x0103, 0x2009, 0xc8d4, 0x210c, 0x2102, 0x001e, 0x000e, 0xd08c,
++      0x01d0, 0x70d8, 0xa086, 0xffff, 0x0190, 0x080c, 0x2dc1, 0x080c,
++      0x7e94, 0x70d4, 0xd094, 0x1904, 0x12df, 0x2011, 0x0001, 0x2019,
++      0x0000, 0x080c, 0x2df9, 0x080c, 0x7e94, 0x0804, 0x12df, 0x70dc,
++      0xa005, 0x1904, 0x12df, 0x7098, 0xa005, 0x1904, 0x12df, 0x70d4,
++      0xd0a4, 0x0118, 0xd0b4, 0x0904, 0x12df, 0x080c, 0x570b, 0x1904,
++      0x12df, 0x2001, 0xc653, 0x2004, 0xd0ac, 0x01c8, 0x0156, 0x00c6,
++      0x20a9, 0x007f, 0x2009, 0x0000, 0x0016, 0x080c, 0x533d, 0x1118,
++      0x6000, 0xd0ec, 0x1138, 0x001e, 0x8108, 0x1f04, 0x126c, 0x00ce,
++      0x015e, 0x0028, 0x001e, 0x00ce, 0x015e, 0x0804, 0x12df, 0x0006,
++      0x0016, 0x2001, 0x0103, 0x2009, 0xc8d4, 0x210c, 0x2102, 0x001e,
++      0x000e, 0x71a8, 0x81ff, 0x11b0, 0xa006, 0x2009, 0x0200, 0x20a9,
++      0x0002, 0x20a1, 0xc925, 0x40a1, 0x2009, 0x0700, 0x20a9, 0x0002,
++      0x20a1, 0xc915, 0x40a1, 0x7070, 0x8007, 0x7174, 0x810f, 0x20a9,
++      0x0002, 0x40a1, 0x20a1, 0xc919, 0x2009, 0x0000, 0x080c, 0x14ff,
++      0x2001, 0x0000, 0x810f, 0x20a9, 0x0002, 0x40a1, 0x7030, 0xc08c,
++      0x7032, 0x7003, 0x0003, 0x709f, 0xffff, 0x080c, 0x1585, 0xa006,
++      0x080c, 0x296d, 0x080c, 0x40ef, 0x00f6, 0x2079, 0x0100, 0x080c,
++      0x5f48, 0x0150, 0x080c, 0x5f22, 0x7828, 0x0118, 0xa084, 0xe1ff,
++      0x0010, 0xa084, 0xffdf, 0x782a, 0x00fe, 0x2001, 0xc928, 0x2004,
++      0xa086, 0x0005, 0x1120, 0x2011, 0x0000, 0x080c, 0x8f0e, 0x2011,
++      0x0000, 0x080c, 0x8f18, 0x080c, 0x7e94, 0x080c, 0x7f6e, 0x012e,
++      0x0005, 0x0016, 0x0046, 0x00f6, 0x0126, 0x2091, 0x8000, 0x2079,
++      0x0100, 0x2009, 0xc634, 0x2104, 0xa005, 0x1110, 0x080c, 0x2ac1,
++      0x2009, 0x00f7, 0x080c, 0x4eeb, 0x7940, 0xa18c, 0x0010, 0x7942,
++      0x7924, 0xd1b4, 0x0110, 0x7827, 0x0040, 0xd19c, 0x0110, 0x7827,
++      0x0008, 0x0006, 0x0036, 0x0156, 0x7954, 0xd1ac, 0x1904, 0x134f,
++      0x080c, 0x5f34, 0x0158, 0x080c, 0x5f48, 0x1128, 0x2001, 0xc8e5,
++      0x2003, 0x0000, 0x0070, 0x080c, 0x5f2a, 0x0dc0, 0x2001, 0xc8e5,
++      0x2003, 0xaaaa, 0x2001, 0xc8e6, 0x2003, 0x0001, 0x080c, 0x5e5a,
++      0x0058, 0x080c, 0x5f22, 0x0140, 0x2009, 0x00f8, 0x080c, 0x4eeb,
++      0x7843, 0x0090, 0x7843, 0x0010, 0x20a9, 0x09c4, 0x7820, 0xd09c,
++      0x1138, 0x080c, 0x5f22, 0x0138, 0x7824, 0xd0ac, 0x1904, 0x13f9,
++      0x1f04, 0x132e, 0x0070, 0x7824, 0x080c, 0x5f3e, 0x0118, 0xd0ac,
++      0x1904, 0x13f9, 0xa084, 0x1800, 0x0d98, 0x7003, 0x0001, 0x0804,
++      0x13f9, 0x2001, 0x0001, 0x080c, 0x296d, 0x0804, 0x1408, 0x7850,
++      0xa084, 0x0180, 0x7852, 0x782f, 0x0020, 0x20a9, 0x0046, 0x1d04,
++      0x1357, 0x080c, 0x7058, 0x1f04, 0x1357, 0x7850, 0xa084, 0x0180,
++      0xa085, 0x0400, 0x7852, 0x782f, 0x0000, 0x080c, 0x5f34, 0x0158,
++      0x080c, 0x5f48, 0x1128, 0x2001, 0xc8e5, 0x2003, 0x0000, 0x0070,
++      0x080c, 0x5f2a, 0x0dc0, 0x2001, 0xc8e5, 0x2003, 0xaaaa, 0x2001,
++      0xc8e6, 0x2003, 0x0001, 0x080c, 0x5e5a, 0x0020, 0x2009, 0x00f8,
++      0x080c, 0x4eeb, 0x20a9, 0x000e, 0xe000, 0x1f04, 0x1384, 0x7850,
++      0xa084, 0x0180, 0xa085, 0x1400, 0x7852, 0x080c, 0x5f22, 0x0120,
++      0x7843, 0x0090, 0x7843, 0x0010, 0x2021, 0xe678, 0x2019, 0xea60,
++      0x7820, 0xd09c, 0x1558, 0x080c, 0x5f22, 0x05d8, 0x7824, 0xd0ac,
++      0x1904, 0x13f9, 0x080c, 0x5f48, 0x1508, 0x0046, 0x2021, 0x0190,
++      0x8421, 0x1df0, 0x004e, 0x8421, 0x11c8, 0x7827, 0x0048, 0x20a9,
++      0x01f4, 0x1d04, 0x13b1, 0x080c, 0x7058, 0x1f04, 0x13b1, 0x7824,
++      0xa084, 0x0068, 0x15c8, 0x2001, 0xc8e5, 0x2003, 0xaaaa, 0x2001,
++      0xc8e6, 0x2003, 0x0001, 0x7003, 0x0001, 0x0498, 0x1d04, 0x13ca,
++      0x080c, 0x7058, 0x8319, 0x1960, 0x2009, 0xc634, 0x2104, 0x8000,
++      0x200a, 0xa084, 0xfff0, 0x0120, 0x200b, 0x0000, 0x080c, 0x2ac1,
++      0x00d8, 0x080c, 0x5f34, 0x1140, 0xa4a2, 0x0064, 0x1128, 0x080c,
++      0x5ef9, 0x7003, 0x0001, 0x00a8, 0x7827, 0x1800, 0xe000, 0xe000,
++      0x7824, 0x080c, 0x5f3e, 0x0110, 0xd0ac, 0x1158, 0xa084, 0x1800,
++      0x09a8, 0x7003, 0x0001, 0x0028, 0x2001, 0x0001, 0x080c, 0x296d,
++      0x0048, 0x2001, 0xc634, 0x2003, 0x0000, 0x7827, 0x0048, 0x7828,
++      0xc09d, 0x782a, 0x7850, 0xa084, 0x0180, 0xa085, 0x0400, 0x7852,
++      0x015e, 0x003e, 0x000e, 0x080c, 0x155c, 0x012e, 0x00fe, 0x004e,
++      0x001e, 0x0005, 0x0005, 0x0005, 0x0005, 0x2a70, 0x2061, 0xc908,
++      0x2063, 0x0002, 0x6007, 0x0002, 0x600b, 0x0005, 0x600f, 0x0037,
++      0x2001, 0xc8e5, 0x2003, 0x0000, 0x708b, 0x0000, 0x2009, 0x0100,
++      0x2104, 0xa082, 0x0002, 0x0218, 0x7053, 0xffff, 0x0010, 0x7053,
++      0x0000, 0x705b, 0xffff, 0x7073, 0x0000, 0x7077, 0x0000, 0x080c,
++      0xb03f, 0x2061, 0xc8d5, 0x6003, 0x0909, 0x6007, 0x0000, 0x600b,
++      0x8800, 0x600f, 0x0200, 0x6013, 0x00ff, 0x6017, 0x001f, 0x601b,
++      0x0000, 0x601f, 0x07d0, 0x2061, 0xc8dd, 0x6003, 0x8000, 0x6007,
++      0x0000, 0x600b, 0x0000, 0x600f, 0x0200, 0x6013, 0x00ff, 0x6017,
++      0x0000, 0x601b, 0x0001, 0x601f, 0x0000, 0x2061, 0xc900, 0x6003,
++      0x514c, 0x6007, 0x4f47, 0x600b, 0x4943, 0x600f, 0x2020, 0x2001,
++      0xc628, 0x2003, 0x0000, 0x0005, 0x04a0, 0x2011, 0x0000, 0x81ff,
++      0x0570, 0xa186, 0x0001, 0x1148, 0x2031, 0x8fff, 0x2039, 0xe601,
++      0x2021, 0x0100, 0x2029, 0xe600, 0x00e8, 0xa186, 0x0002, 0x1118,
++      0x2011, 0x0000, 0x00b8, 0xa186, 0x0005, 0x1118, 0x2011, 0x0001,
++      0x0088, 0xa186, 0x0009, 0x1118, 0x2011, 0x0002, 0x0058, 0xa186,
++      0x000a, 0x1118, 0x2011, 0x0002, 0x0028, 0xa186, 0x0055, 0x1110,
++      0x2011, 0x0003, 0x3800, 0xa084, 0xfffc, 0xa205, 0x20c0, 0x0804,
++      0x104d, 0xa00e, 0x2011, 0x0003, 0x2019, 0x14a8, 0x0804, 0x14f9,
++      0x2019, 0xaaaa, 0x2061, 0xffff, 0x2c14, 0x2362, 0xe000, 0xe000,
++      0x2c04, 0xa306, 0x2262, 0x1110, 0xc1b5, 0xc1a5, 0x2011, 0x0000,
++      0x2019, 0x14bb, 0x04f0, 0x2019, 0xaaaa, 0x2061, 0xffff, 0x2c14,
++      0x2362, 0xe000, 0xe000, 0x2c1c, 0x2061, 0x7fff, 0xe000, 0xe000,
++      0x2c04, 0x2061, 0xffff, 0x2262, 0xa306, 0x0110, 0xc18d, 0x0008,
++      0xc185, 0x2011, 0x0002, 0x2019, 0x14d6, 0x0418, 0x2061, 0xffff,
++      0x2019, 0xaaaa, 0x2c14, 0x2362, 0xe000, 0xe000, 0x2c04, 0x2262,
++      0xa306, 0x1180, 0x2c14, 0x2362, 0xe000, 0xe000, 0x2c1c, 0x2061,
++      0x7fff, 0x2c04, 0x2061, 0xffff, 0x2262, 0xa306, 0x1110, 0xc195,
++      0x0008, 0xc19d, 0x2011, 0x0001, 0x2019, 0x14f7, 0x0010, 0x0804,
++      0x146d, 0x3800, 0xa084, 0xfffc, 0xa205, 0x20c0, 0x0837, 0x2011,
++      0x0000, 0x080c, 0x533d, 0x1178, 0x6004, 0xa0c4, 0x00ff, 0xa8c6,
++      0x0006, 0x0128, 0xa0c4, 0xff00, 0xa8c6, 0x0600, 0x1120, 0xa186,
++      0x0080, 0x0108, 0x8210, 0x8108, 0xa186, 0x0100, 0x1d50, 0x2208,
++      0x0005, 0x2091, 0x8000, 0x0e04, 0x151b, 0x0006, 0x0016, 0x2079,
++      0x0000, 0x7818, 0xd084, 0x1de8, 0x001e, 0x792e, 0x000e, 0x782a,
++      0x000e, 0x7826, 0x3900, 0x783a, 0x7823, 0x8002, 0x781b, 0x0001,
++      0x2091, 0x5000, 0x0126, 0x0156, 0x0146, 0x20a9, 0x0010, 0x20a1,
++      0xca54, 0x2091, 0x2000, 0x40a1, 0x20a9, 0x0010, 0x2091, 0x2200,
++      0x40a1, 0x20a9, 0x0010, 0x2091, 0x2400, 0x40a1, 0x20a9, 0x0010,
++      0x2091, 0x2600, 0x40a1, 0x20a9, 0x0010, 0x2091, 0x2800, 0x40a1,
++      0x014e, 0x015e, 0x012e, 0x2079, 0xc600, 0x7803, 0x0005, 0x2091,
++      0x4080, 0x04c9, 0x0cf8, 0x0005, 0x0006, 0x080c, 0x15a7, 0x1518,
++      0x00f6, 0x2079, 0xc624, 0x2f04, 0x8000, 0x207a, 0xa082, 0x000f,
++      0x0258, 0xa006, 0x207a, 0x2079, 0xc626, 0x2f04, 0xa084, 0x0001,
++      0xa086, 0x0001, 0x207a, 0x0070, 0x2079, 0xc626, 0x2f7c, 0x8fff,
++      0x1128, 0x2001, 0x0c03, 0x2003, 0x0040, 0x0020, 0x2001, 0x0c03,
++      0x2003, 0x00c0, 0x00fe, 0x000e, 0x0005, 0x0409, 0x1120, 0x2001,
++      0x0c03, 0x2003, 0x0080, 0x0005, 0x00d1, 0x1120, 0x2001, 0x0c03,
++      0x2003, 0x0040, 0x0005, 0x0006, 0x0091, 0x1178, 0x2001, 0x0c03,
++      0x2003, 0x0040, 0x2009, 0x0fff, 0x00a1, 0x2001, 0x0c03, 0x2003,
++      0x0080, 0x2009, 0x0fff, 0x0069, 0x0c88, 0x000e, 0x0005, 0x00c6,
++      0x2061, 0x0c00, 0x2c04, 0xa084, 0x00ff, 0xa086, 0x00aa, 0x00ce,
++      0x0005, 0x0156, 0x0126, 0xa18c, 0x0fff, 0x21a8, 0x1d04, 0x15b6,
++      0x2091, 0x6000, 0x1f04, 0x15b6, 0x012e, 0x015e, 0x0005, 0x2071,
++      0xc600, 0x7160, 0x712e, 0x2021, 0x0001, 0xa190, 0x0030, 0xa298,
++      0x0030, 0x0240, 0x7064, 0xa302, 0x1228, 0x220a, 0x2208, 0x2310,
++      0x8420, 0x0ca8, 0x3800, 0xd08c, 0x0148, 0x7064, 0xa086, 0xc600,
++      0x0128, 0x7067, 0xc600, 0x2011, 0x1000, 0x0c48, 0x200b, 0x0000,
++      0x74b2, 0x74b6, 0x70eb, 0x0010, 0x0005, 0x00e6, 0x0126, 0x2091,
++      0x8000, 0x2071, 0xc600, 0x70b4, 0x0016, 0x2008, 0x70e8, 0xa16a,
++      0x2100, 0x001e, 0x0268, 0x8001, 0x70b6, 0x702c, 0x2068, 0x2d04,
++      0x702e, 0x206b, 0x0000, 0x6807, 0x0000, 0x012e, 0x00ee, 0x0005,
++      0xa06e, 0x0cd8, 0x00e6, 0x2071, 0xc600, 0x0126, 0x2091, 0x8000,
++      0x70b4, 0x8001, 0x0260, 0x70b6, 0x702c, 0x2068, 0x2d04, 0x702e,
++      0x206b, 0x0000, 0x6807, 0x0000, 0x012e, 0x00ee, 0x0005, 0xa06e,
++      0x0cd8, 0x00e6, 0x0126, 0x2091, 0x8000, 0x2071, 0xc600, 0x702c,
++      0x206a, 0x2d00, 0x702e, 0x70b4, 0x8000, 0x70b6, 0x012e, 0x00ee,
++      0x0005, 0x8dff, 0x0138, 0x6804, 0x6807, 0x0000, 0x0006, 0x0c49,
++      0x00de, 0x0cb8, 0x0005, 0x00e6, 0x2071, 0xc600, 0x70b4, 0xa08a,
++      0x0010, 0xa00d, 0x00ee, 0x0005, 0x00e6, 0x2071, 0xc959, 0x7007,
++      0x0000, 0x701b, 0x0000, 0x701f, 0x0000, 0x2071, 0x0000, 0x7010,
++      0xa085, 0x8004, 0x7012, 0x00ee, 0x0005, 0x0126, 0x2091, 0x8000,
++      0x00e6, 0x2270, 0x700b, 0x0000, 0x2071, 0xc959, 0x7018, 0xa088,
++      0xc962, 0x220a, 0x8000, 0xa084, 0x0007, 0x701a, 0x7004, 0xa005,
++      0x1128, 0x00f6, 0x2079, 0x0010, 0x0089, 0x00fe, 0x00ee, 0x012e,
++      0x0005, 0x00e6, 0x2071, 0xc959, 0x7004, 0xa005, 0x1128, 0x00f6,
++      0x2079, 0x0010, 0x0019, 0x00fe, 0x00ee, 0x0005, 0x7000, 0x0002,
++      0x1680, 0x16e4, 0x1701, 0x1701, 0x23e7, 0x16e4, 0x1701, 0x16e4,
++      0x7018, 0x711c, 0xa106, 0x1118, 0x7007, 0x0000, 0x0005, 0x00d6,
++      0xa180, 0xc962, 0x2004, 0x700a, 0x2068, 0x8108, 0xa18c, 0x0007,
++      0x711e, 0x7803, 0x0026, 0x6824, 0x7832, 0x6828, 0x7836, 0x682c,
++      0x783a, 0x6830, 0x783e, 0x6810, 0x700e, 0x680c, 0x7016, 0x6804,
++      0x00de, 0xd084, 0x0120, 0x7007, 0x0001, 0x0029, 0x0005, 0x7007,
++      0x0002, 0x00b1, 0x0005, 0x0016, 0x0026, 0x710c, 0x2011, 0x0040,
++      0xa182, 0x0040, 0x1210, 0x2110, 0xa006, 0x700e, 0x7212, 0x8203,
++      0x7822, 0x7803, 0x0020, 0x7803, 0x0041, 0x002e, 0x001e, 0x0005,
++      0x0016, 0x0026, 0x0136, 0x0146, 0x0156, 0x7014, 0x2098, 0x20a1,
++      0x0014, 0x7803, 0x0026, 0x710c, 0x2011, 0x0040, 0xa182, 0x0040,
++      0x1210, 0x2110, 0xa006, 0x700e, 0x22a8, 0x53a6, 0x8203, 0x7822,
++      0x7803, 0x0020, 0x3300, 0x7016, 0x7803, 0x0001, 0x015e, 0x014e,
++      0x013e, 0x002e, 0x001e, 0x0005, 0x0136, 0x0146, 0x0156, 0x2099,
++      0xc71a, 0x20a1, 0x0018, 0x20a9, 0x0008, 0x53a3, 0x7803, 0x0020,
++      0x0126, 0x2091, 0x8000, 0x7803, 0x0041, 0x7007, 0x0003, 0x7000,
++      0xc084, 0x7002, 0x700b, 0xc715, 0x012e, 0x015e, 0x014e, 0x013e,
++      0x0005, 0x0136, 0x0146, 0x0156, 0x2001, 0xc749, 0x209c, 0x20a1,
++      0x0014, 0x7803, 0x0026, 0x2001, 0xc74a, 0x20ac, 0x53a6, 0x2099,
++      0xc74b, 0x20a1, 0x0018, 0x20a9, 0x0008, 0x53a3, 0x7803, 0x0020,
++      0x0126, 0x2091, 0x8000, 0x7803, 0x0001, 0x7007, 0x0004, 0x7000,
++      0xc08c, 0x7002, 0x700b, 0xc746, 0x012e, 0x015e, 0x014e, 0x013e,
++      0x0005, 0x0016, 0x00e6, 0x2071, 0xc959, 0x00f6, 0x2079, 0x0010,
++      0x7904, 0x7803, 0x0002, 0xd1fc, 0x0120, 0xa18c, 0x0700, 0x7004,
++      0x0023, 0x00fe, 0x00ee, 0x001e, 0x0005, 0x1676, 0x1745, 0x1773,
++      0x179d, 0x17cd, 0x2404, 0x1744, 0x0cf8, 0xa18c, 0x0700, 0x1528,
++      0x0136, 0x0146, 0x0156, 0x7014, 0x20a0, 0x2099, 0x0014, 0x7803,
++      0x0040, 0x7010, 0x20a8, 0x53a5, 0x3400, 0x7016, 0x015e, 0x014e,
++      0x013e, 0x700c, 0xa005, 0x0570, 0x7830, 0x7832, 0x7834, 0x7836,
++      0x080c, 0x16ab, 0x0005, 0x7008, 0xa080, 0x0002, 0x2003, 0x0100,
++      0x7007, 0x0000, 0x080c, 0x1676, 0x0005, 0x7008, 0xa080, 0x0002,
++      0x2003, 0x0200, 0x0ca8, 0xa18c, 0x0700, 0x1150, 0x700c, 0xa005,
++      0x0188, 0x7830, 0x7832, 0x7834, 0x7836, 0x080c, 0x16c0, 0x0005,
++      0x7008, 0xa080, 0x0002, 0x2003, 0x0200, 0x7007, 0x0000, 0x080c,
++      0x1676, 0x0005, 0x00d6, 0x7008, 0x2068, 0x7830, 0x6826, 0x7834,
++      0x682a, 0x7838, 0x682e, 0x783c, 0x6832, 0x680b, 0x0100, 0x00de,
++      0x7007, 0x0000, 0x080c, 0x1676, 0x0005, 0xa18c, 0x0700, 0x1540,
++      0x0136, 0x0146, 0x0156, 0x2001, 0xc718, 0x2004, 0xa080, 0x000d,
++      0x20a0, 0x2099, 0x0014, 0x7803, 0x0040, 0x20a9, 0x0020, 0x53a5,
++      0x2001, 0xc71a, 0x2004, 0xd0bc, 0x0148, 0x2001, 0xc723, 0x2004,
++      0xa080, 0x000d, 0x20a0, 0x20a9, 0x0020, 0x53a5, 0x015e, 0x014e,
++      0x013e, 0x7007, 0x0000, 0x080c, 0x62c2, 0x080c, 0x1676, 0x0005,
++      0x2011, 0x8003, 0x080c, 0x407d, 0x0cf8, 0xa18c, 0x0700, 0x1148,
++      0x2001, 0xc748, 0x2003, 0x0100, 0x7007, 0x0000, 0x080c, 0x1676,
++      0x0005, 0x2011, 0x8004, 0x080c, 0x407d, 0x0cf8, 0x0126, 0x2091,
++      0x2200, 0x2079, 0x0030, 0x2071, 0xc96a, 0x7003, 0x0000, 0x700f,
++      0xc977, 0x7013, 0xc977, 0x780f, 0x00f6, 0x7803, 0x0004, 0x012e,
++      0x0005, 0x6934, 0xa184, 0x0007, 0x0002, 0x17fd, 0x183e, 0x17fd,
++      0x17fd, 0x1801, 0x1826, 0x180d, 0x1804, 0xa085, 0x0001, 0x0804,
++      0x1858, 0x080c, 0x7684, 0x05d0, 0x684c, 0xd0bc, 0x0db0, 0x6860,
++      0x682e, 0x685c, 0x682a, 0x6858, 0x04c8, 0xa18c, 0x00ff, 0xa186,
++      0x001e, 0x1d58, 0x684c, 0xd0bc, 0x0d40, 0x6860, 0x682e, 0x685c,
++      0x682a, 0x6804, 0x681a, 0xa080, 0x000d, 0x2004, 0xa084, 0x000f,
++      0xa080, 0x23c7, 0x2005, 0x6832, 0x6858, 0x0440, 0xa18c, 0x00ff,
++      0xa186, 0x0015, 0x1990, 0x684c, 0xd0ac, 0x0978, 0x6804, 0x681a,
++      0xa080, 0x000d, 0x2004, 0xa084, 0x000f, 0xa080, 0x23c7, 0x2005,
++      0x6832, 0xa006, 0x682e, 0x682a, 0x6858, 0x0080, 0x684c, 0xd0ac,
++      0x0904, 0x17fd, 0xa006, 0x682e, 0x682a, 0x6858, 0xa18c, 0x000f,
++      0xa188, 0x23c7, 0x210d, 0x6932, 0x2d08, 0x691a, 0x6826, 0x684c,
++      0xc0dd, 0x684e, 0xa006, 0x680a, 0x697c, 0x6912, 0x6980, 0x6916,
++      0x0005, 0x684c, 0xd0ac, 0x090c, 0x1519, 0x6833, 0x23c4, 0x2d08,
++      0x691a, 0x6858, 0x8001, 0x6826, 0x684c, 0xc0dd, 0x684e, 0xa006,
++      0x680a, 0x682e, 0x682a, 0x697c, 0x6912, 0x6980, 0x6916, 0x0005,
++      0x20e1, 0x0007, 0x20e1, 0x2000, 0x2001, 0x020a, 0x2004, 0x82ff,
++      0x01e8, 0xa280, 0x0004, 0x00d6, 0x206c, 0x684c, 0xd0dc, 0x1190,
++      0xa280, 0x0007, 0x2004, 0xa086, 0x000a, 0x1110, 0x0891, 0x0010,
++      0x080c, 0x17f1, 0x0138, 0x00de, 0xa280, 0x0000, 0x2003, 0x0002,
++      0xa016, 0x0020, 0x6808, 0x8000, 0x680a, 0x00de, 0x0126, 0x0046,
++      0x0036, 0x0026, 0x2091, 0x2200, 0x002e, 0x003e, 0x004e, 0x7000,
++      0xa005, 0x0178, 0x710c, 0x220a, 0x8108, 0x230a, 0x8108, 0x240a,
++      0x8108, 0xa182, 0xc992, 0x0210, 0x2009, 0xc977, 0x710e, 0x012e,
++      0x0005, 0x7206, 0x2001, 0x18af, 0x0006, 0x2260, 0x0804, 0x19d3,
++      0x0126, 0x0026, 0x0036, 0x00c6, 0x0006, 0x2091, 0x2200, 0x000e,
++      0x004e, 0x003e, 0x002e, 0x00d6, 0x00c6, 0x2460, 0x6110, 0x2168,
++      0x6a62, 0x6b5e, 0xa005, 0x0904, 0x1910, 0x6808, 0xa005, 0x0904,
++      0x1947, 0x7000, 0xa005, 0x1108, 0x0488, 0x700c, 0x7110, 0xa106,
++      0x1904, 0x194f, 0x7004, 0xa406, 0x1548, 0x2001, 0x0005, 0x2004,
++      0xd08c, 0x0168, 0x0046, 0x080c, 0x1b83, 0x004e, 0x2460, 0x6010,
++      0xa080, 0x0002, 0x2004, 0xa005, 0x0904, 0x1947, 0x0c10, 0x2001,
++      0x0207, 0x2004, 0xd09c, 0x1d48, 0x7804, 0xa084, 0x6000, 0x0120,
++      0xa086, 0x6000, 0x0108, 0x0c08, 0x7818, 0x6812, 0x781c, 0x6816,
++      0x7803, 0x0004, 0x7003, 0x0000, 0x7004, 0x2060, 0x6100, 0xa18e,
++      0x0004, 0x1904, 0x194f, 0x2009, 0x0048, 0x080c, 0x9613, 0x04f8,
++      0x6808, 0xa005, 0x05a0, 0x7000, 0xa005, 0x0588, 0x700c, 0x7110,
++      0xa106, 0x1118, 0x7004, 0xa406, 0x1550, 0x2001, 0x0005, 0x2004,
++      0xd08c, 0x0160, 0x0046, 0x080c, 0x1b83, 0x004e, 0x2460, 0x6010,
++      0xa080, 0x0002, 0x2004, 0xa005, 0x01d0, 0x0c28, 0x2001, 0x0207,
++      0x2004, 0xd09c, 0x1d50, 0x2001, 0x0005, 0x2004, 0xd08c, 0x1d50,
++      0x7804, 0xa084, 0x6000, 0x0118, 0xa086, 0x6000, 0x19f0, 0x7818,
++      0x6812, 0x781c, 0x6816, 0x7803, 0x0004, 0x7003, 0x0000, 0x6100,
++      0xa18e, 0x0004, 0x1120, 0x2009, 0x0048, 0x080c, 0x9613, 0x00ce,
++      0x00de, 0x012e, 0x0005, 0x00f6, 0x00e6, 0x0026, 0x0036, 0x0046,
++      0x0056, 0x2071, 0xc96a, 0x7000, 0xa086, 0x0000, 0x0904, 0x19b9,
++      0x7004, 0xac06, 0x1904, 0x19ab, 0x2079, 0x0030, 0x7000, 0xa086,
++      0x0003, 0x0904, 0x19ab, 0x7804, 0xd0fc, 0x15c8, 0x20e1, 0x6000,
++      0x2011, 0x0032, 0x2001, 0x0208, 0x200c, 0x2001, 0x0209, 0x2004,
++      0xa106, 0x1d88, 0x8211, 0x1db0, 0x7804, 0xd0fc, 0x1540, 0x080c,
++      0x1f2d, 0x0026, 0x0056, 0x7803, 0x0004, 0x7804, 0xd0ac, 0x1de8,
++      0x7803, 0x0002, 0x7803, 0x0009, 0x7003, 0x0003, 0x7007, 0x0000,
++      0x005e, 0x002e, 0x2001, 0x015d, 0x2003, 0x0000, 0x080c, 0x5f22,
++      0x1138, 0x0066, 0x2031, 0x0001, 0x080c, 0x5fa4, 0x006e, 0x0058,
++      0x2001, 0x0160, 0x2502, 0x2001, 0x0138, 0x2202, 0x0020, 0x080c,
++      0x1b83, 0x0804, 0x195b, 0x0156, 0x20a9, 0x0009, 0x2009, 0xc977,
++      0x2104, 0xac06, 0x1108, 0x200a, 0xa188, 0x0003, 0x1f04, 0x19b0,
++      0x015e, 0x005e, 0x004e, 0x003e, 0x002e, 0x00ee, 0x00fe, 0x0005,
++      0x700c, 0x7110, 0xa106, 0x0904, 0x1a5c, 0x2104, 0x7006, 0x2060,
++      0x8108, 0x211c, 0x8108, 0x2124, 0x8108, 0xa182, 0xc992, 0x0210,
++      0x2009, 0xc977, 0x7112, 0x8cff, 0x05e8, 0x6010, 0x2068, 0x2d58,
++      0x080c, 0x7824, 0x6828, 0xa406, 0x15e0, 0x682c, 0xa306, 0x15c8,
++      0x7004, 0x2060, 0x6020, 0xc0d4, 0x6022, 0x684c, 0xd0f4, 0x0128,
++      0x6817, 0xffff, 0x6813, 0xffff, 0x0428, 0x6850, 0xd0f4, 0x1130,
++      0x7803, 0x0004, 0x6810, 0x781a, 0x6814, 0x781e, 0x6824, 0x2050,
++      0x6818, 0x2060, 0x6830, 0x2040, 0x6034, 0xa0cc, 0x000f, 0x080c,
++      0x7684, 0x1128, 0x2009, 0x0011, 0x080c, 0x1a5f, 0x0048, 0x2009,
++      0x0011, 0x080c, 0x1a5f, 0x0120, 0x2009, 0x0001, 0x080c, 0x1a5f,
++      0x2d58, 0x0005, 0x7803, 0x0004, 0x080c, 0x1ea2, 0x0904, 0x19c0,
++      0x0cc0, 0x080c, 0x7684, 0x1128, 0x080c, 0x1953, 0x080c, 0x761a,
++      0x0c88, 0x6020, 0xd0f4, 0x11e0, 0xd0d4, 0x01b8, 0x6038, 0xa402,
++      0x6034, 0xa303, 0x0108, 0x1288, 0x643a, 0x6336, 0x6c2a, 0x6b2e,
++      0x0046, 0x0036, 0x2400, 0x6c7c, 0xa402, 0x6812, 0x2300, 0x6b80,
++      0xa303, 0x6816, 0x003e, 0x004e, 0x0018, 0x080c, 0xafd1, 0x0990,
++      0x601c, 0xa08e, 0x0008, 0x0904, 0x19e0, 0xa08e, 0x000a, 0x0904,
++      0x19e0, 0x2001, 0xc674, 0x2004, 0xd0b4, 0x1140, 0x6018, 0x2004,
++      0xd0bc, 0x1120, 0x6817, 0x7fff, 0x6813, 0xffff, 0x080c, 0x241b,
++      0x1904, 0x1a12, 0x0804, 0x19e0, 0x7003, 0x0000, 0x0005, 0x8aff,
++      0x0904, 0x1b5d, 0xa03e, 0x2730, 0xc9fc, 0x6850, 0xd0fc, 0x11b8,
++      0xd0f4, 0x1538, 0x00d6, 0x2805, 0xac68, 0x2900, 0x0002, 0x1acb,
++      0x1a98, 0x1a98, 0x1acb, 0x1ace, 0x1ac3, 0x1acb, 0x1a98, 0x1acb,
++      0x1aa9, 0x1aa9, 0x1acb, 0x1ace, 0x1acb, 0x1abb, 0x1aa9, 0x7803,
++      0x0004, 0xc0fc, 0x6852, 0x6b6c, 0x6a70, 0x6d1c, 0x6c20, 0x00d6,
++      0xd99c, 0x0904, 0x1b1e, 0x2805, 0xac68, 0x6f08, 0x6e0c, 0x0804,
++      0x1b1f, 0xc0f4, 0x6852, 0x6b6c, 0x6a70, 0x00d6, 0x0804, 0x1b2c,
++      0x2d10, 0x00de, 0x00d6, 0x6834, 0x2268, 0xa084, 0x00ff, 0xa096,
++      0x0024, 0x0904, 0x1afe, 0x6b08, 0x6a0c, 0x6d00, 0x6c04, 0x0804,
++      0x1b1e, 0x2d10, 0x00de, 0x00d6, 0x6834, 0x2268, 0xa084, 0x00ff,
++      0xa096, 0x002c, 0x0540, 0x6b10, 0x6a14, 0x6d00, 0x6c04, 0x6f08,
++      0x6e0c, 0x0804, 0x1b1f, 0x00de, 0x00d6, 0x6834, 0xa084, 0x00ff,
++      0xa086, 0x001e, 0x1140, 0x00de, 0x080c, 0x2389, 0x1904, 0x1a5f,
++      0xa00e, 0x0804, 0x1b5d, 0x00de, 0x080c, 0x1519, 0x2d10, 0x00de,
++      0x00d6, 0x6834, 0x2268, 0xa084, 0x00ff, 0xa096, 0x0024, 0x0530,
++      0xa096, 0x002c, 0x1d80, 0x6b10, 0xa3a6, 0xffff, 0x1130, 0x2d10,
++      0x00de, 0x00d6, 0x080c, 0x72fa, 0x2268, 0x2d10, 0x00de, 0x00d6,
++      0x7314, 0x685c, 0xa086, 0x0001, 0x1120, 0x6868, 0xa005, 0x0108,
++      0x2018, 0x2268, 0x2011, 0x0000, 0x6d00, 0x6c04, 0x6f08, 0x6e0c,
++      0x780f, 0x00f0, 0xe000, 0xe000, 0xe000, 0x0408, 0x6b08, 0xa3a6,
++      0xffff, 0x1130, 0x2d10, 0x00de, 0x00d6, 0x080c, 0x72fa, 0x2268,
++      0x2d10, 0x00de, 0x00d6, 0x7314, 0x685c, 0xa086, 0x0001, 0x1120,
++      0x6868, 0xa005, 0x0108, 0x2018, 0x2268, 0x2011, 0x0000, 0x6d00,
++      0x6c04, 0x780f, 0x00f0, 0xe000, 0xe000, 0xe000, 0xc9fd, 0x7b22,
++      0x7a26, 0x7d32, 0x7c36, 0x7f3a, 0x7e3e, 0x731a, 0x721e, 0x7522,
++      0x7426, 0x772a, 0x762e, 0x7902, 0x7100, 0x8108, 0x7102, 0x00de,
++      0x6828, 0xa300, 0x682a, 0x682c, 0xa201, 0x682e, 0x8109, 0x2d08,
++      0x1500, 0xd9fc, 0x0160, 0xc9fc, 0x080c, 0x2389, 0x01e8, 0x2805,
++      0xac68, 0x6800, 0xa506, 0x11c0, 0x6804, 0xa406, 0x00a8, 0xc9fc,
++      0x080c, 0x2389, 0x0188, 0x2805, 0xac68, 0x6800, 0xa506, 0x1160,
++      0x6804, 0xa406, 0x1148, 0x6808, 0xa706, 0x1130, 0x680c, 0xa606,
++      0x0018, 0xc9fc, 0x080c, 0x2389, 0x2168, 0x0005, 0x080c, 0x1519,
++      0x080c, 0x2014, 0x7004, 0x2060, 0x00d6, 0x6010, 0x2068, 0x7003,
++      0x0000, 0x080c, 0x1ec3, 0x080c, 0xac91, 0x0170, 0x6808, 0x8001,
++      0x680a, 0x697c, 0x6912, 0x6980, 0x6916, 0x682b, 0xffff, 0x682f,
++      0xffff, 0x6850, 0xc0bd, 0x6852, 0x00de, 0x080c, 0xa961, 0x0804,
++      0x1dec, 0x080c, 0x1519, 0x0126, 0x2091, 0x2200, 0x0006, 0x0016,
++      0x2b68, 0x6818, 0x2060, 0x7904, 0x7803, 0x0002, 0xa184, 0x0700,
++      0x1978, 0xa184, 0x0003, 0xa086, 0x0003, 0x0d58, 0x7000, 0x0002,
++      0x1ba0, 0x1ba6, 0x1cf5, 0x1dc1, 0x1ddb, 0x1ba0, 0x1ba0, 0x1ba0,
++      0x7804, 0xd09c, 0x1904, 0x1dec, 0x080c, 0x1519, 0x8001, 0x7002,
++      0xd1bc, 0x15c0, 0x080c, 0x7684, 0x1508, 0xd1dc, 0x1598, 0x6864,
++      0x8000, 0x6866, 0xd19c, 0x0140, 0x7004, 0x2060, 0x2009, 0x0102,
++      0x080c, 0x9613, 0x0804, 0x1cbc, 0x8aff, 0x0130, 0x2009, 0x0001,
++      0x080c, 0x1a5f, 0x0804, 0x1dec, 0x7004, 0x2060, 0x080c, 0x24e0,
++      0x080c, 0x761a, 0x7007, 0x0000, 0x0804, 0x1c45, 0xd19c, 0x1904,
++      0x1c79, 0xd1dc, 0x1178, 0x8aff, 0x0904, 0x1c79, 0x2009, 0x0001,
++      0x080c, 0x1a5f, 0x0904, 0x1dec, 0x2009, 0x0001, 0x080c, 0x1a5f,
++      0x0804, 0x1dec, 0x7803, 0x0004, 0x7003, 0x0000, 0xd1bc, 0x1904,
++      0x1c4b, 0x080c, 0x7684, 0x1130, 0xd19c, 0x0120, 0x6864, 0x8000,
++      0x6866, 0x0810, 0x0026, 0x0036, 0x7c20, 0x7d24, 0x7e30, 0x7f34,
++      0x7818, 0x6812, 0x781c, 0x6816, 0x2001, 0x0201, 0x2004, 0xa005,
++      0x0140, 0x7808, 0xd0ec, 0x1128, 0x7803, 0x0009, 0x7003, 0x0004,
++      0x0028, 0x080c, 0x7684, 0x0110, 0x080c, 0x1df0, 0x6b28, 0x6a2c,
++      0x2400, 0x686e, 0xa31a, 0x2500, 0x6872, 0xa213, 0x6b2a, 0x6a2e,
++      0x00c6, 0x7004, 0x2060, 0x6020, 0xd0f4, 0x1110, 0x633a, 0x6236,
++      0x00ce, 0x003e, 0x002e, 0x6e1e, 0x6f22, 0x2500, 0xa405, 0x0128,
++      0x080c, 0x239f, 0x6850, 0xc0fd, 0x6852, 0x2a00, 0x6826, 0x2c00,
++      0x681a, 0x2800, 0x6832, 0x6808, 0x8001, 0x680a, 0x1148, 0x684c,
++      0xd0e4, 0x0130, 0x7004, 0x2060, 0x2009, 0x0048, 0x080c, 0x9613,
++      0x7000, 0xa086, 0x0004, 0x0904, 0x1dec, 0x7003, 0x0000, 0x080c,
++      0x19c0, 0x0804, 0x1dec, 0x0056, 0x7d0c, 0xd5bc, 0x1110, 0x080c,
++      0xc55e, 0x005e, 0x080c, 0x1ec3, 0x7004, 0x2060, 0x601c, 0xa086,
++      0x0009, 0x1140, 0x2009, 0x0106, 0x080c, 0x9613, 0x7007, 0x0000,
++      0x0804, 0x1dec, 0x00f6, 0x7004, 0x2078, 0x080c, 0x56c3, 0x0118,
++      0x7820, 0xc0f5, 0x7822, 0x00fe, 0x682b, 0xffff, 0x682f, 0xffff,
++      0x6808, 0x8001, 0x680a, 0x697c, 0x791a, 0x6980, 0x791e, 0x0804,
++      0x1dec, 0x7004, 0x00c6, 0x2060, 0x6020, 0x00ce, 0xd0f4, 0x0120,
++      0x6808, 0x8001, 0x680a, 0x04c0, 0x7818, 0x6812, 0x7a1c, 0x6a16,
++      0xd19c, 0x0160, 0xa205, 0x0150, 0x7004, 0xa080, 0x0007, 0x2004,
++      0xa084, 0xfffd, 0xa086, 0x0008, 0x1904, 0x1be2, 0x684c, 0xc0f5,
++      0x684e, 0x7814, 0xa005, 0x1520, 0x7003, 0x0000, 0x6808, 0x8001,
++      0x680a, 0x01a0, 0x7004, 0x2060, 0x601c, 0xa086, 0x000a, 0x11a0,
++      0x0156, 0x20a9, 0x0009, 0x2009, 0xc977, 0x2104, 0xac06, 0x1108,
++      0x200a, 0xa188, 0x0003, 0x1f04, 0x1cad, 0x015e, 0x7004, 0x2060,
++      0x2009, 0x0048, 0x080c, 0x9613, 0x080c, 0x19c0, 0x0804, 0x1dec,
++      0x7818, 0x6812, 0x781c, 0x6816, 0x7814, 0x7908, 0xa18c, 0x0fff,
++      0xa192, 0x0841, 0x1a04, 0x1b60, 0xa188, 0x0007, 0x8114, 0x8214,
++      0x8214, 0xa10a, 0x8104, 0x8004, 0x8004, 0xa20a, 0x810b, 0x810b,
++      0x810b, 0x080c, 0x1f58, 0x7803, 0x0004, 0x780f, 0xffff, 0x7803,
++      0x0001, 0x7804, 0xd0fc, 0x0de8, 0x7803, 0x0002, 0x7803, 0x0004,
++      0x780f, 0x00f6, 0x7004, 0x7007, 0x0000, 0x2060, 0x2009, 0x0048,
++      0x080c, 0x9613, 0x080c, 0x1fae, 0x0838, 0x8001, 0x7002, 0xd194,
++      0x01b0, 0x7804, 0xd0fc, 0x1904, 0x1d91, 0xd09c, 0x0138, 0x7804,
++      0xd0fc, 0x1904, 0x1d91, 0xd09c, 0x1904, 0x1d95, 0x8aff, 0x0904,
++      0x1dec, 0x2009, 0x0001, 0x080c, 0x1a5f, 0x0804, 0x1dec, 0xa184,
++      0x0888, 0x1148, 0x8aff, 0x0904, 0x1dec, 0x2009, 0x0001, 0x080c,
++      0x1a5f, 0x0804, 0x1dec, 0x7818, 0x6812, 0x7a1c, 0x6a16, 0xa205,
++      0x0904, 0x1c96, 0x7803, 0x0004, 0x7003, 0x0000, 0xd1bc, 0x1904,
++      0x1d73, 0x6834, 0xa084, 0x00ff, 0xa086, 0x0029, 0x1118, 0xd19c,
++      0x1904, 0x1c96, 0x0026, 0x0036, 0x7c20, 0x7d24, 0x7e30, 0x7f34,
++      0x7818, 0x6812, 0x781c, 0x6816, 0x2001, 0x0201, 0x2004, 0xa005,
++      0x0140, 0x7808, 0xd0ec, 0x1128, 0x7803, 0x0009, 0x7003, 0x0004,
++      0x0020, 0x0016, 0x080c, 0x1df0, 0x001e, 0x6b28, 0x6a2c, 0x080c,
++      0x239f, 0x00d6, 0x2805, 0xac68, 0x6034, 0xd09c, 0x1128, 0x6808,
++      0xa31a, 0x680c, 0xa213, 0x0020, 0x6810, 0xa31a, 0x6814, 0xa213,
++      0x00de, 0xd194, 0x0904, 0x1c10, 0x2a00, 0x6826, 0x2c00, 0x681a,
++      0x2800, 0x6832, 0x6808, 0x8001, 0x680a, 0x6b2a, 0x6a2e, 0x003e,
++      0x002e, 0x0804, 0x1cbc, 0x0056, 0x7d0c, 0x080c, 0xc55e, 0x005e,
++      0x080c, 0x1ec3, 0x00f6, 0x7004, 0x2078, 0x080c, 0x56c3, 0x0118,
++      0x7820, 0xc0f5, 0x7822, 0x00fe, 0x682b, 0xffff, 0x682f, 0xffff,
++      0x6808, 0x8001, 0x680a, 0x697c, 0x791a, 0x6980, 0x791e, 0x0804,
++      0x1dec, 0x7804, 0xd09c, 0x0904, 0x1b8b, 0x7c20, 0x7824, 0xa405,
++      0x1904, 0x1b8b, 0x7818, 0x6812, 0x7c1c, 0x6c16, 0xa405, 0x1120,
++      0x7803, 0x0002, 0x0804, 0x1c96, 0x7520, 0x7424, 0x7728, 0x762c,
++      0x7018, 0xa528, 0x701c, 0xa421, 0xa7b9, 0x0000, 0xa6b1, 0x0000,
++      0x7830, 0xa506, 0x1150, 0x7834, 0xa406, 0x1138, 0x7838, 0xa706,
++      0x1120, 0x783c, 0xa606, 0x0904, 0x1b8b, 0x7803, 0x0002, 0x0804,
++      0x1d22, 0x7803, 0x0004, 0x7003, 0x0000, 0x7004, 0xa00d, 0x0180,
++      0x6808, 0x8001, 0x680a, 0x1160, 0x7004, 0x2060, 0x2009, 0x0048,
++      0x601c, 0xa086, 0x0009, 0x1110, 0x080c, 0x1519, 0x080c, 0x9613,
++      0x080c, 0x19c0, 0x0088, 0x7803, 0x0004, 0x7003, 0x0000, 0x7004,
++      0x2060, 0x6010, 0xa005, 0x0da0, 0x2068, 0x6808, 0x8000, 0x680a,
++      0x6c28, 0x6b2c, 0x080c, 0x19d3, 0x001e, 0x000e, 0x012e, 0x0005,
++      0x700c, 0x7110, 0xa106, 0x0904, 0x1e96, 0x7004, 0x0016, 0x210c,
++      0xa106, 0x001e, 0x0904, 0x1e96, 0x00d6, 0x00c6, 0x216c, 0x2d00,
++      0xa005, 0x0904, 0x1e94, 0x681c, 0xa086, 0x0008, 0x0904, 0x1e94,
++      0x6820, 0xd0d4, 0x1904, 0x1e94, 0x6810, 0x2068, 0x080c, 0x7684,
++      0x0904, 0x1e94, 0x6850, 0xd0fc, 0x05a8, 0x8108, 0x2104, 0x6b2c,
++      0xa306, 0x1904, 0x1e94, 0x8108, 0x2104, 0x6a28, 0xa206, 0x1904,
++      0x1e94, 0x6850, 0xc0fc, 0xc0f5, 0x6852, 0x686c, 0x7822, 0x701a,
++      0x6870, 0x7826, 0x701e, 0x681c, 0x7832, 0x7022, 0x6820, 0x7836,
++      0x7026, 0x6818, 0x2060, 0x6034, 0xd09c, 0x0168, 0x6830, 0x2005,
++      0x00d6, 0xac68, 0x6808, 0x783a, 0x702a, 0x680c, 0x783e, 0x702e,
++      0x00de, 0x0804, 0x1e8e, 0xa006, 0x783a, 0x783e, 0x702a, 0x702e,
++      0x0804, 0x1e8e, 0x8108, 0x2104, 0xa005, 0x1904, 0x1e94, 0x6b2c,
++      0xa306, 0x1904, 0x1e94, 0x8108, 0x2104, 0xa005, 0x15e8, 0x6a28,
++      0xa206, 0x15d0, 0x6850, 0xc0f5, 0x6852, 0x6830, 0x2005, 0x6918,
++      0xa160, 0xa180, 0x000d, 0x2004, 0xd09c, 0x11a0, 0x6008, 0x7822,
++      0x701a, 0x686e, 0x600c, 0x7826, 0x701e, 0x6872, 0x6000, 0x7832,
++      0x7022, 0x6004, 0x7836, 0x7026, 0xa006, 0x783a, 0x783e, 0x702a,
++      0x702e, 0x00a0, 0x6010, 0x7822, 0x701a, 0x686e, 0x6014, 0x7826,
++      0x701e, 0x6872, 0x6000, 0x7832, 0x7022, 0x6004, 0x7836, 0x7026,
++      0x6008, 0x783a, 0x702a, 0x600c, 0x783e, 0x702e, 0x6810, 0x781a,
++      0x6814, 0x781e, 0x7803, 0x0011, 0x00ce, 0x00de, 0x0005, 0x2011,
++      0x0201, 0x2009, 0x003c, 0x2204, 0xa005, 0x1118, 0x8109, 0x1dd8,
++      0x0005, 0x0005, 0x0ca1, 0x0118, 0x780c, 0xd0a4, 0x0120, 0x00d9,
++      0xa085, 0x0001, 0x0010, 0x080c, 0x1fae, 0x0005, 0x0126, 0x2091,
++      0x2200, 0x7000, 0xa086, 0x0003, 0x1160, 0x700c, 0x7110, 0xa106,
++      0x0140, 0x080c, 0x2b06, 0x20e1, 0x9028, 0x700f, 0xc977, 0x7013,
++      0xc977, 0x012e, 0x0005, 0x00c6, 0x080c, 0x5f22, 0x11b8, 0x2001,
++      0x0160, 0x2003, 0x0000, 0x2001, 0x0138, 0x2003, 0x0000, 0x2011,
++      0x00c8, 0xe000, 0xe000, 0x8211, 0x1de0, 0x0481, 0x0066, 0x2031,
++      0x0000, 0x080c, 0x5fa4, 0x006e, 0x00ce, 0x0005, 0x080c, 0x1f2d,
++      0x080c, 0x2b06, 0x20e1, 0x9028, 0x700c, 0x7110, 0xa106, 0x0190,
++      0x2104, 0xa005, 0x0130, 0x2060, 0x6010, 0x2060, 0x6008, 0x8001,
++      0x600a, 0xa188, 0x0003, 0xa182, 0xc992, 0x0210, 0x2009, 0xc977,
++      0x7112, 0x0c50, 0x2001, 0x015d, 0x2003, 0x0000, 0x2001, 0x0160,
++      0x2502, 0x2001, 0x0138, 0x2202, 0x00ce, 0x0005, 0x080c, 0x2b06,
++      0x20e1, 0x9028, 0x2001, 0x015d, 0x2003, 0x0000, 0x00e6, 0x00c6,
++      0x0016, 0x2071, 0xc96a, 0x700c, 0x7110, 0xa106, 0x0190, 0x2104,
++      0xa005, 0x0130, 0x2060, 0x6010, 0x2060, 0x6008, 0x8001, 0x600a,
++      0xa188, 0x0003, 0xa182, 0xc992, 0x0210, 0x2009, 0xc977, 0x7112,
++      0x0c50, 0x001e, 0x00ce, 0x00ee, 0x0005, 0x2001, 0x0138, 0x2014,
++      0x2003, 0x0000, 0x2001, 0x0160, 0x202c, 0x2003, 0x0000, 0x080c,
++      0x5f22, 0x1148, 0x2021, 0x0002, 0x1d04, 0x1f3c, 0x2091, 0x6000,
++      0x8421, 0x1dd0, 0x0005, 0x2021, 0xb015, 0x2001, 0x0141, 0x201c,
++      0xd3dc, 0x1168, 0x2001, 0x0109, 0x201c, 0xa39c, 0x0048, 0x1138,
++      0x2001, 0x0111, 0x201c, 0x83ff, 0x1110, 0x8421, 0x1d70, 0x0005,
++      0x00e6, 0x2071, 0x0200, 0x7808, 0xa084, 0xf000, 0xa10d, 0x0869,
++      0x2001, 0x0105, 0x2004, 0xa084, 0x0003, 0x1130, 0x2001, 0xc992,
++      0x2004, 0xa086, 0x0000, 0x0548, 0xa026, 0x2019, 0xf000, 0x8319,
++      0x1148, 0x2001, 0x012b, 0x2003, 0x95f5, 0x2001, 0x0129, 0x2003,
++      0x95f5, 0x00d8, 0x2001, 0x0105, 0x2004, 0xa084, 0x0003, 0x1130,
++      0x2001, 0xc992, 0x2004, 0xa086, 0x0000, 0x0178, 0x2001, 0x0132,
++      0x2004, 0xa436, 0x0110, 0x2020, 0x0c00, 0x2001, 0x0021, 0x2004,
++      0xd0fc, 0x09e8, 0x080c, 0x222c, 0x08c0, 0x20e1, 0x7000, 0x7324,
++      0x7420, 0x7028, 0x7028, 0x7426, 0x7037, 0x0001, 0x810f, 0x712e,
++      0x702f, 0x0100, 0x7037, 0x0008, 0x7326, 0x7422, 0x2001, 0x0160,
++      0x2502, 0x2001, 0x0138, 0x2202, 0x00ee, 0x0005, 0x0026, 0x2001,
++      0x015d, 0x2003, 0x0000, 0x7908, 0xa18c, 0x0fff, 0xa182, 0x0ffd,
++      0x0210, 0x2009, 0x0000, 0xa190, 0x0007, 0xa294, 0x1ff8, 0x8214,
++      0x8214, 0x8214, 0x2001, 0x020a, 0x82ff, 0x0140, 0x20e1, 0x6000,
++      0x200c, 0x200c, 0x200c, 0x200c, 0x8211, 0x1dd0, 0x20e1, 0x7000,
++      0x200c, 0x200c, 0x7003, 0x0000, 0x20e1, 0x6000, 0x2001, 0x0208,
++      0x200c, 0x2001, 0x0209, 0x2004, 0xa106, 0x0158, 0x080c, 0x1e97,
++      0x0130, 0x7908, 0xd1ec, 0x1128, 0x790c, 0xd1a4, 0x0960, 0x080c,
++      0x1ec3, 0xa006, 0x002e, 0x0005, 0x00f6, 0x00e6, 0x0016, 0x0026,
++      0x2071, 0xc96a, 0x2079, 0x0030, 0x2011, 0x0050, 0x7000, 0xa086,
++      0x0000, 0x01a8, 0x8211, 0x0188, 0x2001, 0x0005, 0x2004, 0xd08c,
++      0x0dc8, 0x7904, 0xa18c, 0x0780, 0x0016, 0x080c, 0x1b83, 0x001e,
++      0x81ff, 0x1118, 0x2011, 0x0050, 0x0c48, 0xa085, 0x0001, 0x002e,
++      0x001e, 0x00ee, 0x00fe, 0x0005, 0x7803, 0x0004, 0x2009, 0x0064,
++      0x7804, 0xd0ac, 0x0904, 0x2060, 0x8109, 0x1dd0, 0x2009, 0x0100,
++      0x210c, 0xa18a, 0x0003, 0x0a0c, 0x1519, 0x080c, 0x2333, 0x00e6,
++      0x00f6, 0x2071, 0xc959, 0x2079, 0x0010, 0x7004, 0xa086, 0x0000,
++      0x0538, 0x7800, 0x0006, 0x7820, 0x0006, 0x7830, 0x0006, 0x7834,
++      0x0006, 0x7838, 0x0006, 0x783c, 0x0006, 0x7803, 0x0004, 0xe000,
++      0xe000, 0x2079, 0x0030, 0x7804, 0xd0ac, 0x190c, 0x1519, 0x2079,
++      0x0010, 0x000e, 0x783e, 0x000e, 0x783a, 0x000e, 0x7836, 0x000e,
++      0x7832, 0x000e, 0x7822, 0x000e, 0x7802, 0x00fe, 0x00ee, 0x0030,
++      0x00fe, 0x00ee, 0x7804, 0xd0ac, 0x190c, 0x1519, 0x080c, 0x7f6e,
++      0x0005, 0x00e6, 0x2071, 0xc992, 0x7003, 0x0000, 0x00ee, 0x0005,
++      0x00d6, 0xa280, 0x0004, 0x206c, 0x694c, 0xd1dc, 0x1904, 0x20ed,
++      0x6934, 0xa184, 0x0007, 0x0002, 0x207c, 0x20d8, 0x207c, 0x207e,
++      0x207c, 0x20bf, 0x209e, 0x208d, 0x080c, 0x1519, 0x2100, 0xa084,
++      0x00ff, 0xa086, 0x0013, 0x0904, 0x20d8, 0x2100, 0xa084, 0x00ff,
++      0xa086, 0x001b, 0x0904, 0x20d8, 0x0c78, 0x684c, 0xd0b4, 0x0904,
++      0x21e9, 0x6860, 0x682e, 0x6816, 0x685c, 0x682a, 0x6812, 0x687c,
++      0x680a, 0x6880, 0x680e, 0x6958, 0x0804, 0x20e0, 0x6834, 0xa084,
++      0x00ff, 0xa086, 0x001e, 0x19c0, 0x684c, 0xd0b4, 0x0904, 0x21e9,
++      0x6860, 0x682e, 0x6816, 0x685c, 0x682a, 0x6812, 0x687c, 0x680a,
++      0x6880, 0x680e, 0x6804, 0x681a, 0xa080, 0x000d, 0x2004, 0xa084,
++      0x000f, 0xa080, 0x23c7, 0x2005, 0x6832, 0x6958, 0x0450, 0xa18c,
++      0x00ff, 0xa186, 0x0015, 0x1548, 0x684c, 0xd0b4, 0x0904, 0x21e9,
++      0x6804, 0x681a, 0xa080, 0x000d, 0x2004, 0xa084, 0x000f, 0xa080,
++      0x23c7, 0x2005, 0x6832, 0x6958, 0xa006, 0x682e, 0x682a, 0x0088,
++      0x684c, 0xd0b4, 0x0904, 0x1b5e, 0x6958, 0xa006, 0x682e, 0x682a,
++      0x2d00, 0x681a, 0x6834, 0xa084, 0x000f, 0xa080, 0x23c7, 0x2005,
++      0x6832, 0x6926, 0x684c, 0xc0dd, 0x684e, 0x00de, 0x0005, 0x00f6,
++      0x2079, 0x0020, 0x7804, 0xd0fc, 0x190c, 0x222c, 0x00e6, 0x00d6,
++      0x2071, 0xc992, 0x7000, 0xa005, 0x1904, 0x2155, 0x00c6, 0x7206,
++      0xa280, 0x0004, 0x205c, 0x7004, 0x2068, 0x7803, 0x0004, 0x6818,
++      0x00d6, 0x2068, 0x686c, 0x7812, 0x6890, 0x00f6, 0x20e1, 0x9040,
++      0x2079, 0x0200, 0x781a, 0x2079, 0x0100, 0x8004, 0x78d6, 0x00fe,
++      0x00de, 0x2b68, 0x6824, 0x2050, 0x6818, 0x2060, 0x6830, 0x2040,
++      0x6034, 0xa0cc, 0x000f, 0x6908, 0x791a, 0x7116, 0x680c, 0x781e,
++      0x701a, 0xa006, 0x700e, 0x7012, 0x7004, 0x692c, 0x6814, 0xa106,
++      0x1120, 0x6928, 0x6810, 0xa106, 0x0158, 0x0036, 0x0046, 0x6b14,
++      0x6c10, 0x080c, 0x241b, 0x004e, 0x003e, 0x0110, 0x00ce, 0x00a8,
++      0x8aff, 0x1120, 0x00ce, 0xa085, 0x0001, 0x0078, 0x0126, 0x2091,
++      0x8000, 0x2079, 0x0020, 0x2009, 0x0001, 0x0059, 0x0118, 0x2009,
++      0x0001, 0x0039, 0x012e, 0x00ce, 0xa006, 0x00de, 0x00ee, 0x00fe,
++      0x0005, 0x0076, 0x0066, 0x0056, 0x0046, 0x0036, 0x0026, 0x8aff,
++      0x0904, 0x21e2, 0x700c, 0x7214, 0xa23a, 0x7010, 0x7218, 0xa203,
++      0x0a04, 0x21e1, 0xa705, 0x0904, 0x21e1, 0xa03e, 0x2730, 0x6850,
++      0xd0fc, 0x11a8, 0x00d6, 0x2805, 0xac68, 0x2900, 0x0002, 0x21b0,
++      0x2195, 0x2195, 0x21b0, 0x21b0, 0x21a9, 0x21b0, 0x2195, 0x21b0,
++      0x219a, 0x219a, 0x21b0, 0x21b0, 0x21b0, 0x21a1, 0x219a, 0xc0fc,
++      0x6852, 0x6b6c, 0x6a70, 0x6d1c, 0x6c20, 0xd99c, 0x05c8, 0x00d6,
++      0x2805, 0xac68, 0x6f08, 0x6e0c, 0x0490, 0x6b08, 0x6a0c, 0x6d00,
++      0x6c04, 0x0468, 0x6b10, 0x6a14, 0x6d00, 0x6c04, 0x6f08, 0x6e0c,
++      0x0430, 0x00de, 0x00d6, 0x6834, 0xa084, 0x00ff, 0xa086, 0x001e,
++      0x1138, 0x00de, 0x080c, 0x2389, 0x1904, 0x215f, 0xa00e, 0x0490,
++      0x2d10, 0x00de, 0x00d6, 0x6834, 0xa084, 0x00ff, 0xa086, 0x0013,
++      0x2268, 0x09d8, 0x2d10, 0x00de, 0x00d6, 0x6834, 0xa084, 0x00ff,
++      0xa086, 0x001b, 0x2268, 0x09b0, 0x00de, 0x080c, 0x1519, 0x00de,
++      0x7b22, 0x7a26, 0x7d32, 0x7c36, 0x7f3a, 0x7e3e, 0x7902, 0x7000,
++      0x8000, 0x7002, 0x6828, 0xa300, 0x682a, 0x682c, 0xa201, 0x682e,
++      0x700c, 0xa300, 0x700e, 0x7010, 0xa201, 0x7012, 0x080c, 0x2389,
++      0x0008, 0xa006, 0x002e, 0x003e, 0x004e, 0x005e, 0x006e, 0x007e,
++      0x0005, 0x080c, 0x1519, 0x0026, 0x2001, 0x0105, 0x2003, 0x0010,
++      0x20e1, 0x9040, 0x7803, 0x0004, 0x7003, 0x0000, 0x7004, 0x2060,
++      0x00d6, 0x6010, 0x2068, 0x080c, 0xac91, 0x0118, 0x6850, 0xc0bd,
++      0x6852, 0x601c, 0xa086, 0x0006, 0x1180, 0x2061, 0x0100, 0x62c8,
++      0x2001, 0x00fa, 0x8001, 0x1df0, 0x60c8, 0xa206, 0x1dc0, 0x60c4,
++      0x686a, 0x60c8, 0x6866, 0x7004, 0x2060, 0x00de, 0x00c6, 0x080c,
++      0xa961, 0x00ce, 0x2001, 0xc936, 0x2004, 0xac06, 0x1150, 0x20e1,
++      0x9040, 0x080c, 0x90f6, 0x2011, 0x0000, 0x080c, 0x8f18, 0x080c,
++      0x7f6e, 0x002e, 0x0804, 0x22e6, 0x0126, 0x2091, 0x2400, 0x0006,
++      0x0016, 0x00f6, 0x00e6, 0x00d6, 0x00c6, 0x2079, 0x0020, 0x2071,
++      0xc992, 0x2b68, 0x6818, 0x2060, 0x7904, 0x7803, 0x0002, 0xa184,
++      0x0700, 0x1904, 0x21eb, 0x7000, 0x0002, 0x22e6, 0x2249, 0x22b9,
++      0x22e4, 0x8001, 0x7002, 0xd19c, 0x1170, 0x8aff, 0x05d0, 0x2009,
++      0x0001, 0x080c, 0x2159, 0x0904, 0x22e6, 0x2009, 0x0001, 0x080c,
++      0x2159, 0x0804, 0x22e6, 0x7803, 0x0004, 0xd194, 0x0148, 0x6850,
++      0xc0fc, 0x6852, 0x8aff, 0x11d8, 0x684c, 0xc0f5, 0x684e, 0x00b8,
++      0x0026, 0x0036, 0x6b28, 0x6a2c, 0x7820, 0x686e, 0xa31a, 0x7824,
++      0x6872, 0xa213, 0x7830, 0x681e, 0x7834, 0x6822, 0x6b2a, 0x6a2e,
++      0x003e, 0x002e, 0x080c, 0x239f, 0x6850, 0xc0fd, 0x6852, 0x2a00,
++      0x6826, 0x2c00, 0x681a, 0x2800, 0x6832, 0x7003, 0x0000, 0x0804,
++      0x22e6, 0x00f6, 0x0026, 0x781c, 0x0006, 0x7818, 0x0006, 0x2079,
++      0x0100, 0x7a14, 0xa284, 0x0184, 0xa085, 0x0012, 0x7816, 0x0036,
++      0x2019, 0x1000, 0x8319, 0x090c, 0x1519, 0x7820, 0xd0bc, 0x1dd0,
++      0x003e, 0x79c8, 0x000e, 0xa102, 0x001e, 0x0006, 0x0016, 0x79c4,
++      0x000e, 0xa103, 0x78c6, 0x000e, 0x78ca, 0xa284, 0x0184, 0xa085,
++      0x0012, 0x7816, 0x002e, 0x00fe, 0x7803, 0x0008, 0x7003, 0x0000,
++      0x0468, 0x8001, 0x7002, 0xd194, 0x0168, 0x7804, 0xd0fc, 0x1904,
++      0x223c, 0xd19c, 0x11f8, 0x8aff, 0x0508, 0x2009, 0x0001, 0x080c,
++      0x2159, 0x00e0, 0x0026, 0x0036, 0x6b28, 0x6a2c, 0x080c, 0x239f,
++      0x00d6, 0x2805, 0xac68, 0x6034, 0xd09c, 0x1128, 0x6808, 0xa31a,
++      0x680c, 0xa213, 0x0020, 0x6810, 0xa31a, 0x6814, 0xa213, 0x00de,
++      0x0804, 0x226c, 0x0804, 0x2268, 0x080c, 0x1519, 0x00ce, 0x00de,
++      0x00ee, 0x00fe, 0x001e, 0x000e, 0x012e, 0x0005, 0x00f6, 0x00e6,
++      0x2071, 0xc992, 0x7000, 0xa086, 0x0000, 0x05d0, 0x2079, 0x0020,
++      0x0016, 0x2009, 0x0207, 0x210c, 0xd194, 0x0198, 0x2009, 0x020c,
++      0x210c, 0xa184, 0x0003, 0x0168, 0x080c, 0xc5a7, 0x2001, 0x0133,
++      0x2004, 0xa005, 0x090c, 0x1519, 0x20e1, 0x9040, 0x2001, 0x020c,
++      0x2102, 0x2009, 0x0206, 0x2104, 0x2009, 0x0203, 0x210c, 0xa106,
++      0x1110, 0x20e1, 0x9040, 0x7804, 0xd0fc, 0x09d8, 0x080c, 0x222c,
++      0x7000, 0xa086, 0x0000, 0x19a8, 0x001e, 0x7803, 0x0004, 0x7804,
++      0xd0ac, 0x1de8, 0x20e1, 0x9040, 0x7803, 0x0002, 0x7003, 0x0000,
++      0x00ee, 0x00fe, 0x0005, 0x0026, 0x00c6, 0x00d6, 0x00e6, 0x00f6,
++      0x2071, 0xc992, 0x2079, 0x0020, 0x7000, 0xa086, 0x0000, 0x0540,
++      0x7004, 0x2060, 0x6010, 0x2068, 0x080c, 0xac91, 0x0158, 0x6850,
++      0xc0b5, 0x6852, 0x680c, 0x7a1c, 0xa206, 0x1120, 0x6808, 0x7a18,
++      0xa206, 0x01e0, 0x2001, 0x0105, 0x2003, 0x0010, 0x20e1, 0x9040,
++      0x7803, 0x0004, 0x7003, 0x0000, 0x7004, 0x2060, 0x080c, 0xa961,
++      0x20e1, 0x9040, 0x080c, 0x90f6, 0x2011, 0x0000, 0x080c, 0x8f18,
++      0x00fe, 0x00ee, 0x00de, 0x00ce, 0x002e, 0x0005, 0x6810, 0x6a14,
++      0xa205, 0x1d00, 0x684c, 0xc0dc, 0x684e, 0x2c10, 0x080c, 0x2068,
++      0x2001, 0x0105, 0x2003, 0x0010, 0x20e1, 0x9040, 0x7803, 0x0004,
++      0x7003, 0x0000, 0x2069, 0xc927, 0x6833, 0x0000, 0x683f, 0x0000,
++      0x08f8, 0x8840, 0x2805, 0xa005, 0x1170, 0x6004, 0xa005, 0x0168,
++      0x681a, 0x2060, 0x6034, 0xa084, 0x000f, 0xa080, 0x23c7, 0x2045,
++      0x88ff, 0x090c, 0x1519, 0x8a51, 0x0005, 0x2050, 0x0005, 0x8a50,
++      0x8841, 0x2805, 0xa005, 0x1190, 0x2c00, 0xad06, 0x0120, 0x6000,
++      0xa005, 0x1108, 0x2d00, 0x2060, 0x681a, 0x6034, 0xa084, 0x000f,
++      0xa080, 0x23d7, 0x2045, 0x88ff, 0x090c, 0x1519, 0x0005, 0x0000,
++      0x0011, 0x0015, 0x0019, 0x001d, 0x0021, 0x0025, 0x0029, 0x0000,
++      0x000f, 0x0015, 0x001b, 0x0021, 0x0027, 0x0000, 0x0000, 0x0000,
++      0x23bc, 0x23b8, 0x23bc, 0x23bc, 0x23c6, 0x0000, 0x23bc, 0x0000,
++      0x23c3, 0x23c0, 0x23c3, 0x23c3, 0x0000, 0x23c6, 0x23c3, 0x0000,
++      0x23be, 0x23be, 0x0000, 0x23be, 0x23c6, 0x0000, 0x23be, 0x0000,
++      0x23c4, 0x23c4, 0x0000, 0x23c4, 0x0000, 0x23c6, 0x23c4, 0x0136,
++      0x0146, 0x0156, 0x2099, 0xc765, 0x20a1, 0x0018, 0x20a9, 0x0008,
++      0x53a3, 0x7803, 0x0020, 0x0126, 0x2091, 0x8000, 0x7803, 0x0041,
++      0x7007, 0x0005, 0x7000, 0xc094, 0x7002, 0x700b, 0xc760, 0x012e,
++      0x015e, 0x014e, 0x013e, 0x0005, 0x2099, 0x0014, 0x7803, 0x0040,
++      0x2001, 0xc765, 0x2004, 0x2010, 0x080c, 0x72ad, 0x2009, 0xc699,
++      0x2104, 0xa084, 0xfffc, 0x200a, 0x080c, 0x721f, 0x7007, 0x0000,
++      0x080c, 0x1676, 0x0005, 0x00a6, 0x0096, 0x0086, 0x6b2e, 0x6c2a,
++      0x6858, 0xa055, 0x0904, 0x24ac, 0x2d60, 0x6034, 0xa0cc, 0x000f,
++      0xa9c0, 0x23c7, 0xa986, 0x0007, 0x0130, 0xa986, 0x000e, 0x0118,
++      0xa986, 0x000f, 0x1120, 0x605c, 0xa422, 0x6060, 0xa31b, 0x2805,
++      0xa045, 0x1140, 0x0310, 0x0804, 0x24ac, 0x6004, 0xa065, 0x0904,
++      0x24ac, 0x0c18, 0x2805, 0xa005, 0x01a8, 0xac68, 0xd99c, 0x1128,
++      0x6808, 0xa422, 0x680c, 0xa31b, 0x0020, 0x6810, 0xa422, 0x6814,
++      0xa31b, 0x0620, 0x2300, 0xa405, 0x0150, 0x8a51, 0x0904, 0x24ac,
++      0x8840, 0x0c40, 0x6004, 0xa065, 0x0904, 0x24ac, 0x0830, 0x8a51,
++      0x0904, 0x24ac, 0x8840, 0x2805, 0xa005, 0x1158, 0x6004, 0xa065,
++      0x0904, 0x24ac, 0x6034, 0xa0cc, 0x000f, 0xa9c0, 0x23c7, 0x2805,
++      0x2040, 0x2b68, 0x6850, 0xc0fc, 0x6852, 0x0458, 0x8422, 0x8420,
++      0x831a, 0xa399, 0x0000, 0x00d6, 0x2b68, 0x6c6e, 0x6b72, 0x00de,
++      0xd99c, 0x1168, 0x6908, 0x2400, 0xa122, 0x690c, 0x2300, 0xa11b,
++      0x0a0c, 0x1519, 0x6800, 0xa420, 0x6804, 0xa319, 0x0060, 0x6910,
++      0x2400, 0xa122, 0x6914, 0x2300, 0xa11b, 0x0a0c, 0x1519, 0x6800,
++      0xa420, 0x6804, 0xa319, 0x2b68, 0x6c1e, 0x6b22, 0x6850, 0xc0fd,
++      0x6852, 0x2c00, 0x681a, 0x2800, 0x6832, 0x2a00, 0x6826, 0x000e,
++      0x000e, 0x000e, 0xa006, 0x0028, 0x008e, 0x009e, 0x00ae, 0xa085,
++      0x0001, 0x0005, 0x2001, 0x0005, 0x2004, 0xa084, 0x0007, 0x0002,
++      0x24c0, 0x24c1, 0x24c4, 0x24c7, 0x24cc, 0x24cf, 0x24d4, 0x24d9,
++      0x0005, 0x080c, 0x222c, 0x0005, 0x080c, 0x1b83, 0x0005, 0x080c,
++      0x1b83, 0x080c, 0x222c, 0x0005, 0x080c, 0x1729, 0x0005, 0x080c,
++      0x222c, 0x080c, 0x1729, 0x0005, 0x080c, 0x1b83, 0x080c, 0x1729,
++      0x0005, 0x080c, 0x1b83, 0x080c, 0x222c, 0x080c, 0x1729, 0x0005,
++      0x0006, 0x0016, 0x0156, 0x20a9, 0x0009, 0x2009, 0xc977, 0x2104,
++      0xac06, 0x1108, 0x200a, 0xa188, 0x0003, 0x1f04, 0x24e7, 0x015e,
++      0x001e, 0x000e, 0x0005, 0x00e6, 0x00d6, 0x2071, 0xc96a, 0x700c,
++      0x7110, 0xa106, 0x01b8, 0x2104, 0xa005, 0x0138, 0xa080, 0x0004,
++      0x2004, 0x2068, 0x080c, 0x7684, 0x0158, 0xa188, 0x0003, 0xa182,
++      0xc992, 0x0210, 0x2009, 0xc977, 0x700c, 0xa106, 0x1d60, 0x0010,
++      0xa085, 0x0001, 0x00de, 0x00ee, 0x0005, 0x0126, 0x2091, 0x2600,
++      0x2079, 0x0200, 0x2071, 0xcc80, 0x2069, 0xc600, 0x080c, 0x260b,
++      0x080c, 0x25fb, 0x2009, 0x0004, 0x7912, 0x7817, 0x0004, 0x080c,
++      0x29a2, 0x781b, 0x0002, 0x20e1, 0x9080, 0x20e1, 0x4000, 0x20a9,
++      0x0080, 0x782f, 0x0000, 0x1f04, 0x2531, 0x20e1, 0x9080, 0x783b,
++      0x001f, 0x20e1, 0x8700, 0x012e, 0x0005, 0x0126, 0x2091, 0x2600,
++      0x781c, 0xd0a4, 0x190c, 0x25f8, 0xa084, 0x0007, 0x0002, 0x2561,
++      0x254f, 0x2552, 0x2555, 0x255a, 0x255c, 0x255e, 0x2560, 0x080c,
++      0x68c9, 0x0078, 0x080c, 0x6916, 0x0060, 0x080c, 0x68c9, 0x080c,
++      0x6916, 0x0038, 0x0041, 0x0028, 0x0031, 0x0018, 0x0021, 0x0008,
++      0x0011, 0x012e, 0x0005, 0x0006, 0x0016, 0x0026, 0x080c, 0xc5a7,
++      0x7930, 0xa184, 0x0003, 0x01b0, 0x2001, 0xc936, 0x2004, 0xa005,
++      0x0170, 0x2001, 0x0133, 0x2004, 0xa005, 0x090c, 0x1519, 0x00c6,
++      0x2001, 0xc936, 0x2064, 0x080c, 0xa961, 0x00ce, 0x04b8, 0x20e1,
++      0x9040, 0x04a0, 0xa184, 0x0030, 0x01e0, 0x6a00, 0xa286, 0x0003,
++      0x1108, 0x00a0, 0x080c, 0x5f22, 0x1178, 0x2001, 0xc8e6, 0x2003,
++      0x0001, 0x2001, 0xc600, 0x2003, 0x0001, 0xa085, 0x0001, 0x080c,
++      0x5f66, 0x080c, 0x5e5a, 0x0010, 0x080c, 0x4e5b, 0x080c, 0x25fb,
++      0x00a8, 0xa184, 0x00c0, 0x0168, 0x00e6, 0x0036, 0x0046, 0x0056,
++      0x2071, 0xc96a, 0x080c, 0x1ec3, 0x005e, 0x004e, 0x003e, 0x00ee,
++      0x0028, 0xa184, 0x0300, 0x0110, 0x20e1, 0x9020, 0x7932, 0x002e,
++      0x001e, 0x000e, 0x0005, 0x0016, 0x00e6, 0x00f6, 0x2071, 0xc600,
++      0x7128, 0x2001, 0xc8d8, 0x2102, 0x2001, 0xc8e0, 0x2102, 0xa182,
++      0x0211, 0x1218, 0x2009, 0x0008, 0x0400, 0xa182, 0x0259, 0x1218,
++      0x2009, 0x0007, 0x00d0, 0xa182, 0x02c1, 0x1218, 0x2009, 0x0006,
++      0x00a0, 0xa182, 0x0349, 0x1218, 0x2009, 0x0005, 0x0070, 0xa182,
++      0x0421, 0x1218, 0x2009, 0x0004, 0x0040, 0xa182, 0x0581, 0x1218,
++      0x2009, 0x0003, 0x0010, 0x2009, 0x0002, 0x2079, 0x0200, 0x7912,
++      0x7817, 0x0004, 0x080c, 0x29a2, 0x00fe, 0x00ee, 0x001e, 0x0005,
++      0x7938, 0x080c, 0x1519, 0x00e6, 0x0026, 0x2071, 0x0200, 0x20e1,
++      0x1000, 0x7220, 0x7028, 0x7020, 0xa206, 0x0de0, 0x20e1, 0x9010,
++      0x002e, 0x00ee, 0x0005, 0x20e1, 0xa000, 0x7837, 0x0001, 0x782f,
++      0x0000, 0x782f, 0x0000, 0x782f, 0x0000, 0x782f, 0x0000, 0x7837,
++      0x0005, 0x20a9, 0x0210, 0x7830, 0xd0bc, 0x1110, 0x1f04, 0x261b,
++      0x7837, 0x0001, 0x7837, 0x0000, 0xe000, 0xe000, 0x20e1, 0xa000,
++      0x0005, 0x0126, 0x2091, 0x2800, 0x2061, 0x0100, 0x2071, 0xc600,
++      0x6024, 0x6026, 0x6053, 0x0030, 0x080c, 0x29e1, 0x6050, 0xa084,
++      0xfe7f, 0x6052, 0x2009, 0x00ef, 0x6132, 0x6136, 0x080c, 0x29f1,
++      0x60e7, 0x0000, 0x61ea, 0x60e3, 0x0008, 0x604b, 0xf7f7, 0x6043,
++      0x0000, 0x602f, 0x0080, 0x602f, 0x0000, 0x6007, 0x0e9f, 0x601b,
++      0x001e, 0x600f, 0x00ff, 0x2001, 0xc8d4, 0x2003, 0x00ff, 0x602b,
++      0x002f, 0x012e, 0x0005, 0x2001, 0xc632, 0x2003, 0x0000, 0x2001,
++      0xc631, 0x2003, 0x0001, 0x0005, 0x0126, 0x2091, 0x2800, 0x0006,
++      0x0016, 0x0026, 0x6124, 0x0066, 0x2031, 0xc635, 0x2634, 0xa6b4,
++      0x0028, 0x006e, 0x11c0, 0x6020, 0xd0bc, 0x01a8, 0xd1bc, 0x0198,
++      0x783c, 0xa005, 0x0180, 0x00e6, 0x0006, 0x2070, 0x701c, 0xa086,
++      0x0009, 0x000e, 0x00ee, 0x1138, 0x00e6, 0x783c, 0x2070, 0x7008,
++      0xd0fc, 0x00ee, 0x1130, 0xa184, 0x1e2c, 0x1118, 0xa184, 0x0007,
++      0x002a, 0xa195, 0x0004, 0xa284, 0x0007, 0x0002, 0x26b8, 0x269e,
++      0x26a1, 0x26a4, 0x26a9, 0x26ab, 0x26af, 0x26b3, 0x080c, 0x7873,
++      0x00b8, 0x080c, 0x794e, 0x00a0, 0x080c, 0x794e, 0x080c, 0x7873,
++      0x0078, 0x0099, 0x0068, 0x080c, 0x7873, 0x0079, 0x0048, 0x080c,
++      0x794e, 0x0059, 0x0028, 0x080c, 0x794e, 0x080c, 0x7873, 0x0029,
++      0x002e, 0x001e, 0x000e, 0x012e, 0x0005, 0x6124, 0x6028, 0xd09c,
++      0x0118, 0xd19c, 0x1904, 0x2910, 0x080c, 0x5f22, 0x0578, 0x7000,
++      0xa086, 0x0003, 0x0198, 0x6024, 0xa084, 0x1800, 0x0178, 0x080c,
++      0x5f48, 0x0118, 0x080c, 0x5f34, 0x1148, 0x6027, 0x0020, 0x6043,
++      0x0000, 0x2001, 0xc8e5, 0x2003, 0xaaaa, 0x0458, 0x080c, 0x5f48,
++      0x15d0, 0x6024, 0xa084, 0x1800, 0x1108, 0x04a8, 0x2001, 0xc8e5,
++      0x2003, 0xaaaa, 0x2001, 0xc8e6, 0x2003, 0x0001, 0x2001, 0xc600,
++      0x2003, 0x0001, 0x080c, 0x5e5a, 0x0804, 0x2910, 0xd1ac, 0x1518,
++      0x6024, 0xd0dc, 0x1170, 0xd0e4, 0x1188, 0xd0d4, 0x11a0, 0xd0cc,
++      0x0130, 0x708c, 0xa086, 0x0028, 0x1110, 0x080c, 0x60b1, 0x0804,
++      0x2910, 0x2001, 0xc8e6, 0x2003, 0x0000, 0x0048, 0x2001, 0xc8e6,
++      0x2003, 0x0002, 0x0020, 0x080c, 0x6024, 0x0804, 0x2910, 0x080c,
++      0x6156, 0x0804, 0x2910, 0x6220, 0xd1bc, 0x0568, 0xd2bc, 0x0558,
++      0x783c, 0xa005, 0x0540, 0x00e6, 0x2070, 0x7008, 0xd0fc, 0x00ee,
++      0x0510, 0x6028, 0xc0bc, 0x602a, 0x0026, 0x0036, 0x6288, 0x638c,
++      0x608b, 0xbc91, 0x608f, 0xffff, 0x6043, 0x0001, 0xe000, 0xe000,
++      0x6027, 0x0080, 0x6017, 0x0000, 0x6043, 0x0000, 0x628a, 0x638e,
++      0x003e, 0x002e, 0x0016, 0x2001, 0xc696, 0x200c, 0xc184, 0x2102,
++      0x001e, 0x0804, 0x2969, 0xd1ac, 0x0904, 0x284c, 0x0036, 0x6328,
++      0xc3bc, 0x632a, 0x003e, 0x080c, 0x5f22, 0x11d8, 0x6027, 0x0020,
++      0x0006, 0x0026, 0x0036, 0x080c, 0x5f3e, 0x1170, 0x2001, 0xc8e6,
++      0x2003, 0x0001, 0x2001, 0xc600, 0x2003, 0x0001, 0x080c, 0x5e5a,
++      0x003e, 0x002e, 0x000e, 0x0005, 0x003e, 0x002e, 0x000e, 0x080c,
++      0x5ef9, 0x0016, 0x0046, 0x00c6, 0x644c, 0xa486, 0xf0f0, 0x1138,
++      0x2061, 0x0100, 0x644a, 0x6043, 0x0090, 0x6043, 0x0010, 0x74ce,
++      0xa48c, 0xff00, 0x7034, 0xd084, 0x0178, 0xa186, 0xf800, 0x1160,
++      0x703c, 0xd084, 0x1148, 0xc085, 0x703e, 0x0036, 0x2418, 0x2011,
++      0x8016, 0x080c, 0x407d, 0x003e, 0xa196, 0xff00, 0x05b8, 0x7054,
++      0xa084, 0x00ff, 0x810f, 0xa116, 0x0588, 0x7130, 0xd184, 0x1570,
++      0x2011, 0xc653, 0x2214, 0xd2ec, 0x0138, 0xc18d, 0x7132, 0x2011,
++      0xc653, 0x2214, 0xd2ac, 0x1510, 0x6240, 0xa294, 0x0010, 0x0130,
++      0x6248, 0xa294, 0xff00, 0xa296, 0xff00, 0x01c0, 0x7030, 0xd08c,
++      0x0904, 0x2819, 0x7034, 0xd08c, 0x1140, 0x2001, 0xc60c, 0x200c,
++      0xd1ac, 0x1904, 0x2819, 0xc1ad, 0x2102, 0x0036, 0x73cc, 0x2011,
++      0x8013, 0x080c, 0x407d, 0x003e, 0x0804, 0x2819, 0x7034, 0xd08c,
++      0x1140, 0x2001, 0xc60c, 0x200c, 0xd1ac, 0x1904, 0x2819, 0xc1ad,
++      0x2102, 0x0036, 0x73cc, 0x2011, 0x8013, 0x080c, 0x407d, 0x003e,
++      0x7130, 0xc185, 0x7132, 0x2011, 0xc653, 0x220c, 0xd1a4, 0x01d0,
++      0x0016, 0x2009, 0x0001, 0x2011, 0x0100, 0x080c, 0x712e, 0x2019,
++      0x000e, 0x080c, 0xc10d, 0xa484, 0x00ff, 0xa080, 0x2f6e, 0x200d,
++      0xa18c, 0xff00, 0x810f, 0x8127, 0xa006, 0x2009, 0x000e, 0x080c,
++      0xc190, 0x001e, 0x0016, 0x2009, 0x0000, 0x2019, 0x0004, 0x080c,
++      0x2e19, 0x001e, 0x0070, 0x0156, 0x20a9, 0x007f, 0x2009, 0x0000,
++      0x080c, 0x533d, 0x1110, 0x080c, 0x4f47, 0x8108, 0x1f04, 0x2810,
++      0x015e, 0x00ce, 0x004e, 0x2011, 0x0003, 0x080c, 0x8f0e, 0x2011,
++      0x0002, 0x080c, 0x8f18, 0x080c, 0x8dee, 0x0036, 0x2019, 0x0000,
++      0x080c, 0x8e79, 0x003e, 0x60e3, 0x0000, 0x001e, 0x2001, 0xc600,
++      0x2014, 0xa296, 0x0004, 0x1128, 0xd19c, 0x11b0, 0x6228, 0xc29d,
++      0x622a, 0x2003, 0x0001, 0x2001, 0xc623, 0x2003, 0x0000, 0x6027,
++      0x0020, 0x080c, 0x5f48, 0x1140, 0x0016, 0x2009, 0x07d0, 0x2011,
++      0x5e37, 0x080c, 0x7036, 0x001e, 0xd194, 0x0904, 0x2910, 0x0016,
++      0x6220, 0xd2b4, 0x0904, 0x28b5, 0x080c, 0x7024, 0x080c, 0x8bf5,
++      0x6027, 0x0004, 0x00f6, 0x2019, 0xc930, 0x2304, 0xa07d, 0x0570,
++      0x7804, 0xa086, 0x0032, 0x1550, 0x00d6, 0x00c6, 0x00e6, 0x2069,
++      0x0140, 0x618c, 0x6288, 0x7818, 0x608e, 0x7808, 0x608a, 0x6043,
++      0x0002, 0x2001, 0x0003, 0x8001, 0x1df0, 0x6043, 0x0000, 0x6803,
++      0x1000, 0x6803, 0x0000, 0x618e, 0x628a, 0x080c, 0x7db1, 0x080c,
++      0x7e94, 0x7810, 0x2070, 0x7037, 0x0103, 0x2f60, 0x080c, 0x95e3,
++      0x00ee, 0x00ce, 0x00de, 0x00fe, 0x001e, 0x0005, 0x00fe, 0x00d6,
++      0x2069, 0x0140, 0x6804, 0xa084, 0x4000, 0x0120, 0x6803, 0x1000,
++      0x6803, 0x0000, 0x00de, 0x00c6, 0x2061, 0xc927, 0x6028, 0xa09a,
++      0x00c8, 0x1238, 0x8000, 0x602a, 0x00ce, 0x080c, 0x8be8, 0x0804,
++      0x290f, 0x2019, 0xc930, 0x2304, 0xa065, 0x0120, 0x2009, 0x0027,
++      0x080c, 0x9613, 0x00ce, 0x0804, 0x290f, 0xd2bc, 0x0904, 0x290f,
++      0x080c, 0x7031, 0x6014, 0xa084, 0x0184, 0xa085, 0x0010, 0x6016,
++      0x6027, 0x0004, 0x00d6, 0x2069, 0x0140, 0x6804, 0xa084, 0x4000,
++      0x0120, 0x6803, 0x1000, 0x6803, 0x0000, 0x00de, 0x00c6, 0x2061,
++      0xc927, 0x6044, 0xa09a, 0x00c8, 0x1620, 0x8000, 0x6046, 0x603c,
++      0x00ce, 0xa005, 0x05a0, 0x2009, 0x07d0, 0x080c, 0x7029, 0xa080,
++      0x0007, 0x2004, 0xa086, 0x0006, 0x1138, 0x6114, 0xa18c, 0x0184,
++      0xa18d, 0x0012, 0x6116, 0x0418, 0xa080, 0x0007, 0x2004, 0xa086,
++      0x0009, 0x0d98, 0x6114, 0xa18c, 0x0184, 0xa18d, 0x0016, 0x6116,
++      0x00b0, 0x0036, 0x2019, 0x0001, 0x080c, 0x8e79, 0x003e, 0x2019,
++      0xc936, 0x2304, 0xa065, 0x0150, 0x2009, 0x004f, 0x601c, 0xa086,
++      0x0009, 0x1110, 0x2009, 0x0105, 0x080c, 0x9613, 0x00ce, 0x001e,
++      0xd19c, 0x0904, 0x2969, 0x7034, 0xd0ac, 0x1560, 0x0016, 0x0156,
++      0x6027, 0x0008, 0x602f, 0x0020, 0x20a9, 0x0006, 0x1d04, 0x291e,
++      0x2091, 0x6000, 0x1f04, 0x291e, 0x602f, 0x0000, 0x6150, 0xa185,
++      0x1400, 0x6052, 0x20a9, 0x0366, 0x1d04, 0x292c, 0x2091, 0x6000,
++      0x6020, 0xd09c, 0x1130, 0x015e, 0x6152, 0x001e, 0x6027, 0x0008,
++      0x0480, 0x080c, 0x2ab1, 0x1f04, 0x292c, 0x015e, 0x6152, 0x001e,
++      0x6027, 0x0008, 0x0016, 0x6028, 0xc09c, 0x602a, 0x2011, 0x0003,
++      0x080c, 0x8f0e, 0x2011, 0x0002, 0x080c, 0x8f18, 0x080c, 0x8dee,
++      0x0036, 0x2019, 0x0000, 0x080c, 0x8e79, 0x003e, 0x60e3, 0x0000,
++      0x080c, 0xc586, 0x080c, 0xc5a1, 0xa085, 0x0001, 0x080c, 0x5f66,
++      0x2001, 0xc600, 0x2003, 0x0004, 0x6027, 0x0008, 0x080c, 0x12e1,
++      0x001e, 0xa18c, 0xffd0, 0x6126, 0x0005, 0x0006, 0x0016, 0x0026,
++      0x00e6, 0x00f6, 0x0126, 0x2091, 0x8000, 0x2071, 0xc600, 0x71c4,
++      0x70c6, 0xa116, 0x0500, 0x81ff, 0x0128, 0x2011, 0x8011, 0x080c,
++      0x407d, 0x00c8, 0x2011, 0x8012, 0x080c, 0x407d, 0x2001, 0xc672,
++      0x2004, 0xd0fc, 0x1180, 0x0036, 0x00c6, 0x080c, 0x2a3c, 0x080c,
++      0x8dca, 0x2061, 0x0100, 0x2019, 0x0028, 0x2009, 0x0000, 0x080c,
++      0x2e19, 0x00ce, 0x003e, 0x012e, 0x00fe, 0x00ee, 0x002e, 0x001e,
++      0x000e, 0x0005, 0x00c6, 0x00f6, 0x0006, 0x0026, 0x2061, 0x0100,
++      0xa190, 0x29b5, 0x2205, 0x60f2, 0x2011, 0x29c2, 0x2205, 0x60ee,
++      0x002e, 0x000e, 0x00fe, 0x00ce, 0x0005, 0x0840, 0x0840, 0x0840,
++      0x0580, 0x0420, 0x0348, 0x02c0, 0x0258, 0x0210, 0x01a8, 0x01a8,
++      0x01a8, 0x01a8, 0x0140, 0x00f8, 0x00d0, 0x00b0, 0x00a0, 0x2028,
++      0xa18c, 0x00ff, 0x2130, 0xa094, 0xff00, 0x1110, 0x81ff, 0x0118,
++      0x080c, 0x6be0, 0x0038, 0xa080, 0x2f6e, 0x200d, 0xa18c, 0xff00,
++      0x810f, 0xa006, 0x0005, 0xa080, 0x2f6e, 0x200d, 0xa18c, 0x00ff,
++      0x0005, 0x00d6, 0x2069, 0x0140, 0x2001, 0xc615, 0x2003, 0x00ef,
++      0x20a9, 0x0010, 0xa006, 0x6852, 0x6856, 0x1f04, 0x29ec, 0x00de,
++      0x0005, 0x0006, 0x00d6, 0x0026, 0x2069, 0x0140, 0x2001, 0xc615,
++      0x2102, 0x8114, 0x8214, 0x8214, 0x8214, 0x20a9, 0x0010, 0x6853,
++      0x0000, 0xa006, 0x82ff, 0x1128, 0xa184, 0x000f, 0xa080, 0xc5b5,
++      0x2005, 0x6856, 0x8211, 0x1f04, 0x2a01, 0x002e, 0x00de, 0x000e,
++      0x0005, 0x00c6, 0x2061, 0xc600, 0x6030, 0x0110, 0xc09d, 0x0008,
++      0xc09c, 0x6032, 0x00ce, 0x0005, 0x0156, 0x00d6, 0x0026, 0x0016,
++      0x0006, 0x2069, 0x0140, 0x6980, 0xa116, 0x0180, 0xa112, 0x1230,
++      0x8212, 0x8210, 0x22a8, 0x2001, 0x0402, 0x0018, 0x22a8, 0x2001,
++      0x0404, 0x680e, 0x1f04, 0x2a31, 0x680f, 0x0000, 0x000e, 0x001e,
++      0x002e, 0x00de, 0x015e, 0x0005, 0x2001, 0xc653, 0x2004, 0xd0c4,
++      0x0150, 0xd0a4, 0x0140, 0xa006, 0x0046, 0x2020, 0x2009, 0x002e,
++      0x080c, 0xc190, 0x004e, 0x0005, 0x00f6, 0x0016, 0x0026, 0x2079,
++      0x0140, 0x78c4, 0xd0dc, 0x0548, 0xa084, 0x0700, 0xa08e, 0x0300,
++      0x1520, 0x2011, 0x0000, 0x2009, 0x0002, 0x2300, 0xa080, 0x0020,
++      0x2018, 0x2300, 0x080c, 0x783f, 0x2011, 0x0030, 0x2200, 0x8007,
++      0xa085, 0x004c, 0x78c2, 0x2009, 0x0204, 0x210c, 0x2200, 0xa100,
++      0x2009, 0x0138, 0x200a, 0x080c, 0x5f22, 0x1118, 0x2009, 0xc8d6,
++      0x200a, 0x002e, 0x001e, 0x00fe, 0x0005, 0x78c3, 0x0000, 0x0cc8,
++      0x0126, 0x2091, 0x2800, 0x0006, 0x0016, 0x0026, 0x2001, 0x0170,
++      0x200c, 0x8000, 0x2014, 0xa184, 0x0003, 0x0110, 0x0804, 0x1b81,
++      0x002e, 0x001e, 0x000e, 0x012e, 0x0005, 0x0006, 0x2001, 0x0100,
++      0x2004, 0xa082, 0x0005, 0x000e, 0x0268, 0x2001, 0x0170, 0x200c,
++      0xa18c, 0x00ff, 0xa18e, 0x004c, 0x1128, 0x200c, 0xa18c, 0xff00,
++      0x810f, 0x0010, 0x2009, 0x0000, 0x2001, 0x0204, 0x2004, 0xa108,
++      0x0005, 0x0006, 0x0156, 0x00f6, 0x2079, 0x0100, 0x20a9, 0x000a,
++      0x7854, 0xd08c, 0x1110, 0x1f04, 0x2ab8, 0x00fe, 0x015e, 0x000e,
++      0x0005, 0x0016, 0x00c6, 0x0006, 0x2061, 0x0100, 0x6030, 0x0006,
++      0x6048, 0x0006, 0x60e4, 0x0006, 0x60e8, 0x0006, 0x6050, 0x0006,
++      0x60f0, 0x0006, 0x60ec, 0x0006, 0x600c, 0x0006, 0x6004, 0x0006,
++      0x6028, 0x0006, 0x60e0, 0x0006, 0x602f, 0x0100, 0x602f, 0x0000,
++      0xe000, 0xe000, 0xe000, 0xe000, 0x602f, 0x0040, 0x602f, 0x0000,
++      0x000e, 0x60e2, 0x000e, 0x602a, 0x000e, 0x6006, 0x000e, 0x600e,
++      0x000e, 0x60ee, 0x000e, 0x60f2, 0x000e, 0x6052, 0x000e, 0x60ea,
++      0x000e, 0x60e6, 0x000e, 0x604a, 0x000e, 0x6032, 0x6036, 0x2008,
++      0x080c, 0x29f1, 0x000e, 0x00ce, 0x001e, 0x0005, 0x2009, 0x0171,
++      0x2104, 0xd0dc, 0x0140, 0x2009, 0x0170, 0x2104, 0x200b, 0x0080,
++      0xe000, 0xe000, 0x200a, 0x0005, 0x2ba4, 0x2ba8, 0x2bac, 0x2bb2,
++      0x2bb8, 0x2bbe, 0x2bc4, 0x2bcc, 0x2bd4, 0x2bda, 0x2be0, 0x2be8,
++      0x2bf0, 0x2bf8, 0x2c00, 0x2c0a, 0x2c57, 0x2c57, 0x2c57, 0x2c57,
++      0x2c57, 0x2c57, 0x2c57, 0x2c57, 0x2c57, 0x2c57, 0x2c57, 0x2c57,
++      0x2c57, 0x2c57, 0x2c57, 0x2c57, 0x2c14, 0x2c14, 0x2c14, 0x2c14,
++      0x2c14, 0x2c14, 0x2c14, 0x2c14, 0x2c14, 0x2c14, 0x2c14, 0x2c14,
++      0x2c14, 0x2c14, 0x2c14, 0x2c14, 0x2c57, 0x2c57, 0x2c57, 0x2c57,
++      0x2c57, 0x2c57, 0x2c57, 0x2c57, 0x2c57, 0x2c57, 0x2c57, 0x2c57,
++      0x2c57, 0x2c57, 0x2c57, 0x2c57, 0x2c16, 0x2c16, 0x2c1c, 0x2c1c,
++      0x2c23, 0x2c23, 0x2c2a, 0x2c2a, 0x2c33, 0x2c33, 0x2c3a, 0x2c3a,
++      0x2c43, 0x2c43, 0x2c4c, 0x2c4c, 0x2c57, 0x2c57, 0x2c57, 0x2c57,
++      0x2c57, 0x2c57, 0x2c57, 0x2c57, 0x2c57, 0x2c57, 0x2c57, 0x2c57,
++      0x2c57, 0x2c57, 0x2c57, 0x2c57, 0x2c14, 0x2c14, 0x2c14, 0x2c14,
++      0x2c14, 0x2c14, 0x2c14, 0x2c14, 0x2c14, 0x2c14, 0x2c14, 0x2c14,
++      0x2c14, 0x2c14, 0x2c14, 0x2c14, 0x2c57, 0x2c57, 0x2c57, 0x2c57,
++      0x2c57, 0x2c57, 0x2c57, 0x2c57, 0x2c57, 0x2c57, 0x2c57, 0x2c57,
++      0x2c57, 0x2c57, 0x2c57, 0x2c57, 0x2c14, 0x2c14, 0x2c14, 0x2c14,
++      0x2c14, 0x2c14, 0x2c14, 0x2c14, 0x2c14, 0x2c14, 0x2c14, 0x2c14,
++      0x2c14, 0x2c14, 0x2c14, 0x2c14, 0x0106, 0x0006, 0x0804, 0x2c5f,
++      0x0106, 0x0006, 0x0804, 0x2c5f, 0x0106, 0x0006, 0x080c, 0x2664,
++      0x0804, 0x2c5f, 0x0106, 0x0006, 0x080c, 0x2664, 0x0804, 0x2c5f,
++      0x0106, 0x0006, 0x080c, 0x24b2, 0x0804, 0x2c5f, 0x0106, 0x0006,
++      0x080c, 0x24b2, 0x0804, 0x2c5f, 0x0106, 0x0006, 0x080c, 0x2664,
++      0x080c, 0x24b2, 0x0804, 0x2c5f, 0x0106, 0x0006, 0x080c, 0x2664,
++      0x080c, 0x24b2, 0x0804, 0x2c5f, 0x0106, 0x0006, 0x080c, 0x253d,
++      0x0804, 0x2c5f, 0x0106, 0x0006, 0x080c, 0x253d, 0x0804, 0x2c5f,
++      0x0106, 0x0006, 0x080c, 0x2664, 0x080c, 0x253d, 0x0804, 0x2c5f,
++      0x0106, 0x0006, 0x080c, 0x2664, 0x080c, 0x253d, 0x0804, 0x2c5f,
++      0x0106, 0x0006, 0x080c, 0x24b2, 0x080c, 0x253d, 0x0804, 0x2c5f,
++      0x0106, 0x0006, 0x080c, 0x24b2, 0x080c, 0x253d, 0x0804, 0x2c5f,
++      0x0106, 0x0006, 0x080c, 0x2664, 0x080c, 0x24b2, 0x080c, 0x253d,
++      0x0804, 0x2c5f, 0x0106, 0x0006, 0x080c, 0x2664, 0x080c, 0x24b2,
++      0x080c, 0x253d, 0x0804, 0x2c5f, 0xe000, 0x0cf0, 0x0106, 0x0006,
++      0x080c, 0x2a80, 0x0804, 0x2c5f, 0x0106, 0x0006, 0x080c, 0x2a80,
++      0x080c, 0x2664, 0x04e0, 0x0106, 0x0006, 0x080c, 0x2a80, 0x080c,
++      0x24b2, 0x04a8, 0x0106, 0x0006, 0x080c, 0x2a80, 0x080c, 0x2664,
++      0x080c, 0x24b2, 0x0460, 0x0106, 0x0006, 0x080c, 0x2a80, 0x080c,
++      0x253d, 0x0428, 0x0106, 0x0006, 0x080c, 0x2a80, 0x080c, 0x2664,
++      0x080c, 0x253d, 0x00e0, 0x0106, 0x0006, 0x080c, 0x2a80, 0x080c,
++      0x24b2, 0x080c, 0x253d, 0x0098, 0x0106, 0x0006, 0x080c, 0x2a80,
++      0x080c, 0x2664, 0x080c, 0x24b2, 0x080c, 0x253d, 0x0040, 0x20d1,
++      0x0000, 0x20d1, 0x0001, 0x20d1, 0x0000, 0x080c, 0x1519, 0x000e,
++      0x010e, 0x000d, 0x00c6, 0x0026, 0x0046, 0x2021, 0x0000, 0x080c,
++      0x570b, 0x1904, 0x2d3f, 0x72d4, 0x2001, 0xc8e5, 0x2004, 0xa005,
++      0x1110, 0xd29c, 0x0148, 0xd284, 0x1138, 0xd2bc, 0x1904, 0x2d3f,
++      0x080c, 0x2d43, 0x0804, 0x2d3f, 0xd2cc, 0x1904, 0x2d3f, 0x080c,
++      0x5f22, 0x1120, 0x709f, 0xffff, 0x0804, 0x2d3f, 0xd294, 0x0120,
++      0x709f, 0xffff, 0x0804, 0x2d3f, 0x2001, 0xc615, 0x203c, 0x7288,
++      0xd284, 0x0904, 0x2ce1, 0xd28c, 0x1904, 0x2ce1, 0x0036, 0x739c,
++      0xa38e, 0xffff, 0x1110, 0x2019, 0x0001, 0x8314, 0xa2e0, 0xcdc0,
++      0x2c04, 0xa38c, 0x0001, 0x0120, 0xa084, 0xff00, 0x8007, 0x0010,
++      0xa084, 0x00ff, 0xa70e, 0x0560, 0xa08e, 0x0000, 0x0548, 0xa08e,
++      0x00ff, 0x1150, 0x7230, 0xd284, 0x1538, 0x7288, 0xc28d, 0x728a,
++      0x709f, 0xffff, 0x003e, 0x0428, 0x2009, 0x0000, 0x080c, 0x29c7,
++      0x080c, 0x52e1, 0x11b8, 0x6004, 0xa084, 0x00ff, 0xa086, 0x0006,
++      0x1150, 0x7030, 0xd08c, 0x0118, 0x6000, 0xd0bc, 0x0120, 0x080c,
++      0x2d56, 0x0140, 0x0028, 0x080c, 0x2e87, 0x080c, 0x2d84, 0x0110,
++      0x8318, 0x0818, 0x739e, 0x0010, 0x709f, 0xffff, 0x003e, 0x0804,
++      0x2d3f, 0xa780, 0x2f6e, 0x203d, 0xa7bc, 0xff00, 0x873f, 0x2041,
++      0x007e, 0x709c, 0xa096, 0xffff, 0x1120, 0x2009, 0x0000, 0x28a8,
++      0x0050, 0xa812, 0x0220, 0x2008, 0xa802, 0x20a8, 0x0020, 0x709f,
++      0xffff, 0x0804, 0x2d3f, 0x2700, 0x0156, 0x0016, 0xa106, 0x05a0,
++      0xc484, 0x080c, 0x533d, 0x0120, 0x080c, 0x52e1, 0x15a8, 0x0008,
++      0xc485, 0x6004, 0xa084, 0x00ff, 0xa086, 0x0006, 0x1130, 0x7030,
++      0xd08c, 0x01e8, 0x6000, 0xd0bc, 0x11d0, 0x7288, 0xd28c, 0x0188,
++      0x6004, 0xa084, 0x00ff, 0xa082, 0x0006, 0x02b0, 0xd484, 0x1118,
++      0x080c, 0x5300, 0x0028, 0x080c, 0x2f14, 0x0170, 0x080c, 0x2f41,
++      0x0058, 0x080c, 0x2e87, 0x080c, 0x2d84, 0x0170, 0x0028, 0x080c,
++      0x2f14, 0x0110, 0x0419, 0x0140, 0x001e, 0x8108, 0x015e, 0x1f04,
++      0x2cfb, 0x709f, 0xffff, 0x0018, 0x001e, 0x015e, 0x719e, 0x004e,
++      0x002e, 0x00ce, 0x0005, 0x00c6, 0x0016, 0x709f, 0x0001, 0x2009,
++      0x007e, 0x080c, 0x52e1, 0x1138, 0x080c, 0x2e87, 0x04a9, 0x0118,
++      0x70d4, 0xc0bd, 0x70d6, 0x001e, 0x00ce, 0x0005, 0x0016, 0x0076,
++      0x00d6, 0x00c6, 0x2c68, 0x2001, 0xc657, 0x2004, 0xa084, 0x00ff,
++      0x6842, 0x080c, 0xaf0d, 0x01d8, 0x2d00, 0x601a, 0x080c, 0xb05e,
++      0x601f, 0x0001, 0x2001, 0x0000, 0x080c, 0x527f, 0x2001, 0x0000,
++      0x080c, 0x5291, 0x0126, 0x2091, 0x8000, 0x7098, 0x8000, 0x709a,
++      0x012e, 0x2009, 0x0004, 0x080c, 0x9613, 0xa085, 0x0001, 0x00ce,
++      0x00de, 0x007e, 0x001e, 0x0005, 0x0016, 0x0076, 0x00d6, 0x00c6,
++      0x2c68, 0x2001, 0xc657, 0x2004, 0xa084, 0x00ff, 0x6842, 0x080c,
++      0xaf0d, 0x0550, 0x2d00, 0x601a, 0x6800, 0xc0c4, 0x6802, 0x68a0,
++      0xa086, 0x007e, 0x0140, 0x6804, 0xa084, 0x00ff, 0xa086, 0x0006,
++      0x1110, 0x080c, 0x2e46, 0x080c, 0xb05e, 0x601f, 0x0001, 0x2001,
++      0x0000, 0x080c, 0x527f, 0x2001, 0x0002, 0x080c, 0x5291, 0x0126,
++      0x2091, 0x8000, 0x7098, 0x8000, 0x709a, 0x012e, 0x2009, 0x0002,
++      0x080c, 0x9613, 0xa085, 0x0001, 0x00ce, 0x00de, 0x007e, 0x001e,
++      0x0005, 0x00c6, 0x0026, 0x2009, 0x0080, 0x080c, 0x52e1, 0x1120,
++      0x0031, 0x0110, 0x70db, 0xffff, 0x002e, 0x00ce, 0x0005, 0x0016,
++      0x0076, 0x00d6, 0x00c6, 0x2c68, 0x080c, 0x958d, 0x01e8, 0x2d00,
++      0x601a, 0x080c, 0xb05e, 0x601f, 0x0001, 0x2001, 0x0000, 0x080c,
++      0x527f, 0x2001, 0x0002, 0x080c, 0x5291, 0x0126, 0x2091, 0x8000,
++      0x080c, 0x2e46, 0x70dc, 0x8000, 0x70de, 0x012e, 0x2009, 0x0002,
++      0x080c, 0x9613, 0xa085, 0x0001, 0x00ce, 0x00de, 0x007e, 0x001e,
++      0x0005, 0x00c6, 0x00d6, 0x0126, 0x2091, 0x8000, 0x2009, 0x007f,
++      0x080c, 0x52e1, 0x1190, 0x2c68, 0x080c, 0x958d, 0x0170, 0x2d00,
++      0x601a, 0x6312, 0x601f, 0x0001, 0x620a, 0x080c, 0xb05e, 0x2009,
++      0x0022, 0x080c, 0x9613, 0xa085, 0x0001, 0x012e, 0x00de, 0x00ce,
++      0x0005, 0x00e6, 0x00c6, 0x0066, 0x0036, 0x0026, 0x080c, 0x7b22,
++      0x080c, 0x7abb, 0x080c, 0xa090, 0x2130, 0x81ff, 0x0128, 0x20a9,
++      0x007e, 0x2009, 0x0000, 0x0020, 0x20a9, 0x007f, 0x2009, 0x0000,
++      0x0016, 0x080c, 0x533d, 0x1120, 0x080c, 0x553e, 0x080c, 0x4f47,
++      0x001e, 0x8108, 0x1f04, 0x2e30, 0x86ff, 0x1110, 0x080c, 0x11f4,
++      0x002e, 0x003e, 0x006e, 0x00ce, 0x00ee, 0x0005, 0x00e6, 0x00c6,
++      0x0036, 0x0026, 0x0016, 0x6218, 0x2270, 0x72a0, 0x0026, 0x2019,
++      0x0029, 0x080c, 0x7b16, 0x0076, 0x2039, 0x0000, 0x080c, 0x7a0e,
++      0x2c08, 0x080c, 0xbef7, 0x007e, 0x001e, 0x2e60, 0x080c, 0x553e,
++      0x6210, 0x6314, 0x080c, 0x4f47, 0x6212, 0x6316, 0x001e, 0x002e,
++      0x003e, 0x00ce, 0x00ee, 0x0005, 0x00e6, 0x0006, 0x6018, 0xa080,
++      0x0028, 0x2004, 0xa086, 0x0080, 0x0150, 0x2071, 0xc600, 0x7098,
++      0xa005, 0x0110, 0x8001, 0x709a, 0x000e, 0x00ee, 0x0005, 0x2071,
++      0xc600, 0x70dc, 0xa005, 0x0dc0, 0x8001, 0x70de, 0x0ca8, 0x6000,
++      0xc08c, 0x6002, 0x0005, 0x00f6, 0x00e6, 0x00c6, 0x0036, 0x0026,
++      0x0016, 0x0156, 0x2178, 0x81ff, 0x1118, 0x20a9, 0x0001, 0x0098,
++      0x2001, 0xc653, 0x2004, 0xd0c4, 0x0150, 0xd0a4, 0x0140, 0xa006,
++      0x0046, 0x2020, 0x2009, 0x002d, 0x080c, 0xc190, 0x004e, 0x20a9,
++      0x00ff, 0x2011, 0x0000, 0x0026, 0xa28e, 0x007e, 0x0904, 0x2ef3,
++      0xa28e, 0x007f, 0x0904, 0x2ef3, 0xa28e, 0x0080, 0x05e0, 0xa288,
++      0xc77b, 0x210c, 0x81ff, 0x05b8, 0x8fff, 0x1148, 0x2001, 0xc905,
++      0x0006, 0x2003, 0x0001, 0x04d9, 0x000e, 0x2003, 0x0000, 0x00c6,
++      0x2160, 0x2001, 0x0001, 0x080c, 0x5715, 0x00ce, 0x2019, 0x0029,
++      0x080c, 0x7b16, 0x0076, 0x2039, 0x0000, 0x080c, 0x7a0e, 0x00c6,
++      0x0026, 0x2160, 0x6204, 0xa294, 0x00ff, 0xa286, 0x0006, 0x1118,
++      0x6007, 0x0404, 0x0028, 0x2001, 0x0004, 0x8007, 0xa215, 0x6206,
++      0x002e, 0x00ce, 0x0016, 0x2c08, 0x080c, 0xbef7, 0x001e, 0x007e,
++      0x2160, 0x080c, 0x553e, 0x002e, 0x8210, 0x1f04, 0x2eab, 0x015e,
++      0x001e, 0x002e, 0x003e, 0x00ce, 0x00ee, 0x00fe, 0x0005, 0x0046,
++      0x0026, 0x0016, 0x2001, 0xc653, 0x2004, 0xd0c4, 0x0148, 0xd0a4,
++      0x0138, 0xa006, 0x2220, 0x8427, 0x2009, 0x0029, 0x080c, 0xc190,
++      0x001e, 0x002e, 0x004e, 0x0005, 0x0016, 0x0026, 0x0036, 0x00c6,
++      0x7288, 0x82ff, 0x01f8, 0x2011, 0xc653, 0x2214, 0xd2ac, 0x11d0,
++      0x2100, 0x080c, 0x29db, 0x81ff, 0x01b8, 0x2019, 0x0001, 0x8314,
++      0xa2e0, 0xcdc0, 0x2c04, 0xd384, 0x0120, 0xa084, 0xff00, 0x8007,
++      0x0010, 0xa084, 0x00ff, 0xa116, 0x0138, 0xa096, 0x00ff, 0x0110,
++      0x8318, 0x0c68, 0xa085, 0x0001, 0x00ce, 0x003e, 0x002e, 0x001e,
++      0x0005, 0x0016, 0x00c6, 0x0126, 0x2091, 0x8000, 0x0016, 0x0026,
++      0x0036, 0x2110, 0x0026, 0x2019, 0x0029, 0x080c, 0x9132, 0x002e,
++      0x080c, 0xc4e4, 0x003e, 0x002e, 0x001e, 0xa180, 0xc77b, 0x2004,
++      0xa065, 0x0158, 0x0016, 0x00c6, 0x2061, 0xca3c, 0x001e, 0x611a,
++      0x080c, 0x2e46, 0x001e, 0x080c, 0x5300, 0x012e, 0x00ce, 0x001e,
++      0x0005, 0x2001, 0xc635, 0x2004, 0xd0cc, 0x0005, 0x7eef, 0x7de8,
++      0x7ce4, 0x80e2, 0x7be1, 0x80e0, 0x80dc, 0x80da, 0x7ad9, 0x80d6,
++      0x80d5, 0x80d4, 0x80d3, 0x80d2, 0x80d1, 0x79ce, 0x78cd, 0x80cc,
++      0x80cb, 0x80ca, 0x80c9, 0x80c7, 0x80c6, 0x77c5, 0x76c3, 0x80bc,
++      0x80ba, 0x75b9, 0x80b6, 0x74b5, 0x73b4, 0x72b3, 0x80b2, 0x80b1,
++      0x80ae, 0x71ad, 0x80ac, 0x70ab, 0x6faa, 0x6ea9, 0x80a7, 0x6da6,
++      0x6ca5, 0x6ba3, 0x6a9f, 0x699e, 0x689d, 0x809b, 0x8098, 0x6797,
++      0x6690, 0x658f, 0x6488, 0x6384, 0x6282, 0x8081, 0x8080, 0x617c,
++      0x607a, 0x8079, 0x5f76, 0x8075, 0x8074, 0x8073, 0x8072, 0x8071,
++      0x806e, 0x5e6d, 0x806c, 0x5d6b, 0x5c6a, 0x5b69, 0x8067, 0x5a66,
++      0x5965, 0x5863, 0x575c, 0x565a, 0x5559, 0x8056, 0x8055, 0x5454,
++      0x5353, 0x5252, 0x5151, 0x504e, 0x4f4d, 0x804c, 0x804b, 0x4e4a,
++      0x4d49, 0x8047, 0x4c46, 0x8045, 0x8043, 0x803c, 0x803a, 0x8039,
++      0x8036, 0x4b35, 0x8034, 0x4a33, 0x4932, 0x4831, 0x802e, 0x472d,
++      0x462c, 0x452b, 0x442a, 0x4329, 0x4227, 0x8026, 0x8025, 0x4123,
++      0x401f, 0x3f1e, 0x3e1d, 0x3d1b, 0x3c18, 0x8017, 0x8010, 0x3b0f,
++      0x3a08, 0x8004, 0x3902, 0x8001, 0x8000, 0x8000, 0x3800, 0x3700,
++      0x3600, 0x8000, 0x3500, 0x8000, 0x8000, 0x8000, 0x3400, 0x8000,
++      0x8000, 0x8000, 0x8000, 0x8000, 0x8000, 0x3300, 0x3200, 0x8000,
++      0x8000, 0x8000, 0x8000, 0x8000, 0x8000, 0x3100, 0x3000, 0x8000,
++      0x8000, 0x2f00, 0x8000, 0x2e00, 0x2d00, 0x2c00, 0x8000, 0x8000,
++      0x8000, 0x2b00, 0x8000, 0x2a00, 0x2900, 0x2800, 0x8000, 0x2700,
++      0x2600, 0x2500, 0x2400, 0x2300, 0x2200, 0x8000, 0x8000, 0x2100,
++      0x2000, 0x1f00, 0x1e00, 0x1d00, 0x1c00, 0x8000, 0x8000, 0x1b00,
++      0x1a00, 0x8000, 0x1900, 0x8000, 0x8000, 0x8000, 0x8000, 0x8000,
++      0x8000, 0x1800, 0x8000, 0x1700, 0x1600, 0x1500, 0x8000, 0x1400,
++      0x1300, 0x1200, 0x1100, 0x1000, 0x0f00, 0x8000, 0x8000, 0x0e00,
++      0x0d00, 0x0c00, 0x0b00, 0x0a00, 0x0900, 0x8000, 0x8000, 0x0800,
++      0x0700, 0x8000, 0x0600, 0x8000, 0x8000, 0x8000, 0x0500, 0x0400,
++      0x0300, 0x8000, 0x0200, 0x8000, 0x8000, 0x8000, 0x0100, 0x8000,
++      0x8000, 0x8000, 0x8000, 0x8000, 0x8000, 0x0000, 0x8000, 0x8000,
++      0x8000, 0x8000, 0x8000, 0x8000, 0x8000, 0x8000, 0x8000, 0x8000,
++      0x8000, 0x8000, 0x8000, 0x8000, 0x8000, 0x8000, 0x2071, 0xc6a2,
++      0x7003, 0x0002, 0xa006, 0x7012, 0x7016, 0x703a, 0x703e, 0x7033,
++      0xc6b2, 0x7037, 0xc6b2, 0x7007, 0x0001, 0x2061, 0xc6f2, 0x6003,
++      0x0002, 0x0005, 0x1004, 0x3094, 0x0e04, 0x3094, 0x2071, 0xc6a2,
++      0x2b78, 0x7818, 0xd084, 0x1140, 0x2a60, 0x7820, 0xa08e, 0x0069,
++      0x1904, 0x3179, 0x0804, 0x3112, 0x0005, 0x2071, 0xc6a2, 0x7004,
++      0x0002, 0x309d, 0x309e, 0x30a7, 0x30b8, 0x0005, 0x1004, 0x30a6,
++      0x0e04, 0x30a6, 0x2b78, 0x7818, 0xd084, 0x01e8, 0x0005, 0x2b78,
++      0x2061, 0xc6f2, 0x6008, 0xa08e, 0x0100, 0x0128, 0xa086, 0x0200,
++      0x0904, 0x3173, 0x0005, 0x7014, 0x2068, 0x2a60, 0x7018, 0x0807,
++      0x7010, 0x2068, 0x6834, 0xa086, 0x0103, 0x0108, 0x0005, 0x2a60,
++      0x2b78, 0x7018, 0x0807, 0x2a60, 0x7820, 0xa08a, 0x0040, 0x1210,
++      0x61c4, 0x0042, 0x2100, 0xa08a, 0x003f, 0x1a04, 0x3170, 0x61c4,
++      0x0804, 0x3112, 0x3154, 0x317f, 0x3187, 0x318b, 0x3193, 0x3199,
++      0x319d, 0x31a9, 0x31ac, 0x31b6, 0x31b9, 0x3170, 0x3170, 0x3170,
++      0x31bc, 0x3170, 0x31cb, 0x31e2, 0x31f9, 0x3273, 0x3278, 0x32a1,
++      0x32f2, 0x3303, 0x3322, 0x335a, 0x3364, 0x3371, 0x3384, 0x33a5,
++      0x33ae, 0x33e4, 0x33ea, 0x3170, 0x3413, 0x3170, 0x3170, 0x3170,
++      0x3170, 0x3170, 0x341a, 0x3424, 0x3170, 0x3170, 0x3170, 0x3170,
++      0x3170, 0x3170, 0x3170, 0x3170, 0x342c, 0x3170, 0x3170, 0x3170,
++      0x3170, 0x3170, 0x343e, 0x3448, 0x3170, 0x3170, 0x3170, 0x3170,
++      0x3170, 0x3170, 0x0002, 0x3472, 0x34c6, 0x3521, 0x353b, 0x3170,
++      0x356c, 0x399f, 0x456f, 0x3170, 0x3170, 0x3170, 0x3170, 0x3170,
++      0x3170, 0x3170, 0x3170, 0x31b6, 0x31b9, 0x39a1, 0x3170, 0x39ae,
++      0x4608, 0x4663, 0x46c7, 0x3170, 0x472a, 0x4754, 0x4773, 0x47a5,
++      0x3170, 0x3170, 0x3170, 0x39b2, 0x3b57, 0x3b71, 0x3b8f, 0x3bf0,
++      0x3c50, 0x3c5b, 0x3c93, 0x3ca2, 0x3cb1, 0x3cb4, 0x3cd7, 0x3d21,
++      0x3d97, 0x3da4, 0x3ea5, 0x3fd4, 0x3ffd, 0x40fb, 0x411d, 0x4129,
++      0x4162, 0x4232, 0x428c, 0x4352, 0x43a4, 0x4404, 0x4419, 0x4434,
++      0x44a6, 0x4558, 0x713c, 0x0000, 0x2021, 0x4000, 0x080c, 0x405a,
++      0x0126, 0x2091, 0x8000, 0x0e04, 0x3160, 0x7818, 0xd084, 0x0110,
++      0x012e, 0x0cb0, 0x7c22, 0x7926, 0x7a2a, 0x7b2e, 0x781b, 0x0001,
++      0x2091, 0x4080, 0x7007, 0x0001, 0x2091, 0x5000, 0x012e, 0x0005,
++      0x2021, 0x4001, 0x0c18, 0x2021, 0x4002, 0x0c00, 0x2021, 0x4003,
++      0x08e8, 0x2021, 0x4005, 0x08d0, 0x2021, 0x4006, 0x08b8, 0xa02e,
++      0x2520, 0x7b28, 0x7a2c, 0x7824, 0x7930, 0x0804, 0x4067, 0x7823,
++      0x0004, 0x7824, 0x0807, 0xa02e, 0x2520, 0x7b28, 0x7a2c, 0x7824,
++      0x7930, 0x0804, 0x406a, 0x7924, 0x7828, 0x2114, 0x200a, 0x0804,
++      0x3154, 0x7924, 0x2114, 0x0804, 0x3154, 0x2099, 0x0009, 0x20a1,
++      0x0009, 0x20a9, 0x0007, 0x53a3, 0x7924, 0x7a28, 0x7b2c, 0x0804,
++      0x3154, 0x7824, 0x2060, 0x0090, 0x2009, 0x0002, 0x2011, 0x0002,
++      0x2019, 0x0005, 0x783b, 0x0037, 0x0804, 0x3154, 0x7d38, 0x7c3c,
++      0x0840, 0x7d38, 0x7c3c, 0x0888, 0x2061, 0x1000, 0xe10c, 0xa006,
++      0x2c15, 0xa200, 0x8c60, 0x8109, 0x1dd8, 0x2010, 0xa005, 0x0904,
++      0x3154, 0x0804, 0x3176, 0x2069, 0xc652, 0x7824, 0x7930, 0xa11a,
++      0x1a04, 0x317c, 0x8019, 0x0904, 0x317c, 0x684a, 0x6942, 0x782c,
++      0x6852, 0x7828, 0x6856, 0xa006, 0x685a, 0x685e, 0x080c, 0x61f8,
++      0x0804, 0x3154, 0x2069, 0xc652, 0x7824, 0x7934, 0xa11a, 0x1a04,
++      0x317c, 0x8019, 0x0904, 0x317c, 0x684e, 0x6946, 0x782c, 0x6862,
++      0x7828, 0x6866, 0xa006, 0x686a, 0x686e, 0x080c, 0x57d7, 0x0804,
++      0x3154, 0xa02e, 0x2520, 0x81ff, 0x1904, 0x3179, 0x7924, 0x7b28,
++      0x7a2c, 0x20a9, 0x0005, 0x20a1, 0xc6a9, 0x41a1, 0x080c, 0x4026,
++      0x0904, 0x3179, 0x2009, 0x0020, 0x080c, 0x4067, 0x701b, 0x3211,
++      0x0005, 0x6834, 0x2008, 0xa084, 0x00ff, 0xa096, 0x0011, 0x0138,
++      0xa096, 0x0019, 0x0120, 0xa096, 0x0015, 0x1904, 0x3179, 0x810f,
++      0xa18c, 0x00ff, 0x0904, 0x3179, 0x710e, 0x700c, 0x8001, 0x0528,
++      0x700e, 0x080c, 0x4026, 0x0904, 0x3179, 0x2009, 0x0020, 0x2061,
++      0xc6f2, 0x6224, 0x6328, 0x642c, 0x6530, 0xa290, 0x0040, 0xa399,
++      0x0000, 0xa4a1, 0x0000, 0xa5a9, 0x0000, 0x080c, 0x4067, 0x701b,
++      0x3242, 0x0005, 0x6834, 0xa084, 0x00ff, 0xa096, 0x0002, 0x0120,
++      0xa096, 0x000a, 0x1904, 0x3179, 0x08c0, 0x7010, 0x2068, 0x6838,
++      0xc0fd, 0x683a, 0x080c, 0x51dd, 0x1128, 0x7007, 0x0003, 0x701b,
++      0x325c, 0x0005, 0x080c, 0x592e, 0x0126, 0x2091, 0x8000, 0x20a9,
++      0x0005, 0x2099, 0xc6a9, 0x530a, 0x2100, 0xa210, 0xa399, 0x0000,
++      0xa4a1, 0x0000, 0xa5a9, 0x0000, 0xad80, 0x000d, 0x2009, 0x0020,
++      0x012e, 0x0804, 0x406a, 0x61ac, 0x7824, 0x60ae, 0x0804, 0x3154,
++      0x2091, 0x8000, 0x7823, 0x4000, 0x7827, 0x4953, 0x782b, 0x5020,
++      0x782f, 0x2020, 0x2009, 0x017f, 0x2104, 0x7832, 0x3f00, 0x7836,
++      0x2061, 0x0100, 0x6200, 0x2061, 0x0200, 0x603c, 0x8007, 0xa205,
++      0x783a, 0x2009, 0x04fd, 0x2104, 0x783e, 0x781b, 0x0001, 0x2091,
++      0x5000, 0x2091, 0x4080, 0x2071, 0x0010, 0x20c1, 0x00f0, 0x0804,
++      0x0427, 0x81ff, 0x1904, 0x3179, 0x7924, 0x810f, 0xa18c, 0x00ff,
++      0x080c, 0x533d, 0x1904, 0x317c, 0x7e38, 0xa684, 0x3fff, 0xa082,
++      0x4000, 0x0210, 0x0804, 0x317c, 0x7c28, 0x7d2c, 0x080c, 0x5505,
++      0xd28c, 0x1118, 0x080c, 0x54ae, 0x0010, 0x080c, 0x54de, 0x1518,
++      0x2061, 0xce00, 0x0126, 0x2091, 0x8000, 0x6000, 0xa086, 0x0000,
++      0x0148, 0x6010, 0xa06d, 0x0130, 0x683c, 0xa406, 0x1118, 0x6840,
++      0xa506, 0x0150, 0x012e, 0xace0, 0x0018, 0x2001, 0xc617, 0x2004,
++      0xac02, 0x1a04, 0x3179, 0x0c30, 0x080c, 0xa961, 0x012e, 0x0904,
++      0x3179, 0x0804, 0x3154, 0xa00e, 0x2001, 0x0005, 0x080c, 0x592e,
++      0x0126, 0x2091, 0x8000, 0x080c, 0xaf09, 0x080c, 0x580a, 0x012e,
++      0x0804, 0x3154, 0x81ff, 0x1904, 0x3179, 0x080c, 0x403b, 0x0904,
++      0x317c, 0x080c, 0x5403, 0x0904, 0x3179, 0x080c, 0x5511, 0x0904,
++      0x3179, 0x0804, 0x3154, 0x81ff, 0x1904, 0x3179, 0x080c, 0x404b,
++      0x0904, 0x317c, 0x080c, 0x557d, 0x0904, 0x3179, 0x2019, 0x0005,
++      0x7924, 0x080c, 0x552c, 0x0904, 0x3179, 0x7828, 0xa08a, 0x1000,
++      0x1a04, 0x317c, 0x8003, 0x800b, 0x810b, 0xa108, 0x080c, 0x6fb9,
++      0x0804, 0x3154, 0x0126, 0x2091, 0x8000, 0x81ff, 0x0118, 0x2009,
++      0x0001, 0x0450, 0x2029, 0x00ff, 0x6450, 0x2400, 0xa506, 0x01f8,
++      0x2508, 0x080c, 0x533d, 0x11d8, 0x080c, 0x557d, 0x1128, 0x2009,
++      0x0002, 0x62b4, 0x2518, 0x00c0, 0x2019, 0x0004, 0xa00e, 0x080c,
++      0x552c, 0x1118, 0x2009, 0x0006, 0x0078, 0x7824, 0xa08a, 0x1000,
++      0x1270, 0x8003, 0x800b, 0x810b, 0xa108, 0x080c, 0x6fb9, 0x8529,
++      0x1ae0, 0x012e, 0x0804, 0x3154, 0x012e, 0x0804, 0x3179, 0x012e,
++      0x0804, 0x317c, 0x080c, 0x403b, 0x0904, 0x317c, 0x080c, 0x5469,
++      0x080c, 0x5505, 0x0804, 0x3154, 0x81ff, 0x1904, 0x3179, 0x080c,
++      0x403b, 0x0904, 0x317c, 0x080c, 0x545a, 0x080c, 0x5505, 0x0804,
++      0x3154, 0x81ff, 0x1904, 0x3179, 0x080c, 0x403b, 0x0904, 0x317c,
++      0x080c, 0x54e0, 0x0904, 0x3179, 0x080c, 0x5221, 0x080c, 0x54a7,
++      0x080c, 0x5505, 0x0804, 0x3154, 0x080c, 0x403b, 0x0904, 0x317c,
++      0x080c, 0x5403, 0x0904, 0x3179, 0x62a0, 0x2019, 0x0005, 0x00c6,
++      0x080c, 0x553e, 0x2061, 0x0000, 0x080c, 0x7b16, 0x0076, 0x2039,
++      0x0000, 0x080c, 0x7a0e, 0x2009, 0x0000, 0x080c, 0xbef7, 0x007e,
++      0x00ce, 0x080c, 0x5505, 0x0804, 0x3154, 0x080c, 0x403b, 0x0904,
++      0x317c, 0x080c, 0x5505, 0x2208, 0x0804, 0x3154, 0x0156, 0x00d6,
++      0x00e6, 0x2069, 0xc734, 0x6810, 0x6914, 0xa10a, 0x1210, 0x2009,
++      0x0000, 0x6816, 0x2011, 0x0000, 0x2019, 0x0000, 0x20a9, 0x007e,
++      0x2069, 0xc77b, 0x2d04, 0xa075, 0x0130, 0x704c, 0x0071, 0xa210,
++      0x7080, 0x0059, 0xa318, 0x8d68, 0x1f04, 0x33c2, 0x2300, 0xa218,
++      0x00ee, 0x00de, 0x015e, 0x0804, 0x3154, 0x00f6, 0x0016, 0xa07d,
++      0x0140, 0x2001, 0x0000, 0x8000, 0x2f0c, 0x81ff, 0x0110, 0x2178,
++      0x0cd0, 0x001e, 0x00fe, 0x0005, 0x2069, 0xc734, 0x6910, 0x62b0,
++      0x0804, 0x3154, 0x81ff, 0x1904, 0x3179, 0x6150, 0xa190, 0x2f6e,
++      0x2215, 0xa294, 0x00ff, 0x6370, 0x83ff, 0x0108, 0x6274, 0x67d4,
++      0xd79c, 0x0118, 0x2031, 0x0001, 0x0090, 0xd7ac, 0x0118, 0x2031,
++      0x0003, 0x0068, 0xd7a4, 0x0118, 0x2031, 0x0002, 0x0040, 0x080c,
++      0x5f22, 0x1118, 0x2031, 0x0004, 0x0010, 0x2031, 0x0000, 0x7e3a,
++      0x7f3e, 0x0804, 0x3154, 0x6140, 0x6244, 0x2019, 0xc8fd, 0x231c,
++      0x0804, 0x3154, 0x0126, 0x2091, 0x8000, 0x6134, 0xa006, 0x2010,
++      0x6338, 0x012e, 0x0804, 0x3154, 0x080c, 0x404b, 0x0904, 0x317c,
++      0x6244, 0x6338, 0x0804, 0x3154, 0x6140, 0x6244, 0x7824, 0x6042,
++      0x7b28, 0x6346, 0x2069, 0xc652, 0x831f, 0xa305, 0x6816, 0x782c,
++      0x2069, 0xc8fd, 0x2d1c, 0x206a, 0x0804, 0x3154, 0x0126, 0x2091,
++      0x8000, 0x7824, 0x6036, 0x782c, 0x603a, 0x012e, 0x0804, 0x3154,
++      0x7838, 0xa005, 0x01a8, 0x7828, 0xa025, 0x0904, 0x317c, 0x782c,
++      0xa02d, 0x0904, 0x317c, 0xa00e, 0x080c, 0x533d, 0x1120, 0x6244,
++      0x6338, 0x6446, 0x653a, 0xa186, 0x00ff, 0x0190, 0x8108, 0x0ca0,
++      0x080c, 0x404b, 0x0904, 0x317c, 0x7828, 0xa00d, 0x0904, 0x317c,
++      0x782c, 0xa005, 0x0904, 0x317c, 0x6244, 0x6146, 0x6338, 0x603a,
++      0x0804, 0x3154, 0x2001, 0xc600, 0x2004, 0xa086, 0x0003, 0x1904,
++      0x3179, 0x00c6, 0x2061, 0x0100, 0x7924, 0x810f, 0xa18c, 0x00ff,
++      0xa196, 0x00ff, 0x1130, 0x2001, 0xc615, 0x2004, 0xa085, 0xff00,
++      0x0078, 0xa182, 0x007f, 0x16a0, 0xa188, 0x2f6e, 0x210d, 0xa18c,
++      0x00ff, 0x2001, 0xc615, 0x2004, 0xa116, 0x0550, 0x810f, 0xa105,
++      0x0126, 0x2091, 0x8000, 0x0006, 0x080c, 0x958d, 0x000e, 0x01e0,
++      0x601a, 0x600b, 0xbc09, 0x601f, 0x0001, 0x080c, 0x4026, 0x01d8,
++      0x6837, 0x0000, 0x7007, 0x0003, 0x6833, 0x0000, 0x6838, 0xc0fd,
++      0x683a, 0x701b, 0x351a, 0x2d00, 0x6012, 0x2009, 0x0032, 0x080c,
++      0x9613, 0x012e, 0x00ce, 0x0005, 0x012e, 0x00ce, 0x0804, 0x3179,
++      0x00ce, 0x0804, 0x317c, 0x080c, 0x95e3, 0x0cb0, 0x2001, 0xc600,
++      0x2004, 0xa086, 0x0003, 0x1904, 0x3179, 0x00c6, 0x2061, 0x0100,
++      0x7924, 0x810f, 0xa18c, 0x00ff, 0xa196, 0x00ff, 0x1130, 0x2001,
++      0xc615, 0x2004, 0xa085, 0xff00, 0x0078, 0xa182, 0x007f, 0x16a0,
++      0xa188, 0x2f6e, 0x210d, 0xa18c, 0x00ff, 0x2001, 0xc615, 0x2004,
++      0xa116, 0x0550, 0x810f, 0xa105, 0x0126, 0x2091, 0x8000, 0x0006,
++      0x080c, 0x958d, 0x000e, 0x01e0, 0x601a, 0x600b, 0xbc05, 0x601f,
++      0x0001, 0x080c, 0x4026, 0x01d8, 0x6837, 0x0000, 0x7007, 0x0003,
++      0x6833, 0x0000, 0x6838, 0xc0fd, 0x683a, 0x701b, 0x351a, 0x2d00,
++      0x6012, 0x2009, 0x0032, 0x080c, 0x9613, 0x012e, 0x00ce, 0x0005,
++      0x012e, 0x00ce, 0x0804, 0x3179, 0x00ce, 0x0804, 0x317c, 0x080c,
++      0x95e3, 0x0cb0, 0x6830, 0xa086, 0x0100, 0x0904, 0x3179, 0x0804,
++      0x3154, 0x2061, 0xc9bc, 0x0126, 0x2091, 0x8000, 0x6000, 0xd084,
++      0x0178, 0x6104, 0x6208, 0x2a60, 0x6068, 0x783a, 0x60b4, 0x783e,
++      0x60b0, 0x2019, 0x0072, 0x201a, 0x6348, 0x012e, 0x0804, 0x3154,
++      0xa00e, 0x2110, 0x0c80, 0x81ff, 0x1904, 0x3179, 0x080c, 0x5f22,
++      0x0904, 0x3179, 0x0126, 0x2091, 0x8000, 0x6248, 0x6068, 0xa202,
++      0x0248, 0xa085, 0x0001, 0x080c, 0x2a11, 0x080c, 0x4968, 0x012e,
++      0x0804, 0x3154, 0x012e, 0x0804, 0x317c, 0x0006, 0x0016, 0x00c6,
++      0x00e6, 0x2001, 0xc906, 0x2070, 0x2061, 0xc652, 0x6008, 0x2072,
++      0x2009, 0x0000, 0x2011, 0x1000, 0x080c, 0x783f, 0x7206, 0x00ee,
++      0x00ce, 0x001e, 0x000e, 0x0005, 0x0126, 0x2091, 0x8000, 0x7824,
++      0xa084, 0x0007, 0x0002, 0x357e, 0x3587, 0x358e, 0x357b, 0x357b,
++      0x357b, 0x357b, 0x357b, 0x012e, 0x0804, 0x317c, 0x2009, 0x0114,
++      0x2104, 0xa085, 0x0800, 0x200a, 0x080c, 0x36f9, 0x0070, 0x2009,
++      0x010b, 0x200b, 0x0010, 0x080c, 0x36f9, 0x0038, 0x81ff, 0x0128,
++      0x012e, 0x2021, 0x400b, 0x0804, 0x3156, 0x0086, 0x0096, 0x00a6,
++      0x00b6, 0x00c6, 0x00d6, 0x00e6, 0x00f6, 0x080c, 0x3555, 0x2009,
++      0x0101, 0x210c, 0x0016, 0x2001, 0x0138, 0x200c, 0x2003, 0x0001,
++      0x0016, 0x2001, 0x007a, 0x2034, 0x2001, 0x007b, 0x202c, 0xa006,
++      0x2048, 0x2050, 0x2058, 0x080c, 0x3944, 0x080c, 0x38a8, 0xa03e,
++      0x2720, 0x00f6, 0x00e6, 0x00c6, 0x2d60, 0x2071, 0xc992, 0x2079,
++      0x0020, 0x00d6, 0x2069, 0x0000, 0x6824, 0xd0b4, 0x0140, 0x2001,
++      0x007d, 0x2004, 0x783e, 0x2001, 0x007c, 0x2004, 0x783a, 0x00de,
++      0x2011, 0x0001, 0x080c, 0x3854, 0x080c, 0x3854, 0x00ce, 0x00ee,
++      0x00fe, 0x080c, 0x379f, 0x080c, 0x387c, 0x080c, 0x37f9, 0x080c,
++      0x375e, 0x080c, 0x378f, 0x00f6, 0x2079, 0x0100, 0x7824, 0xd094,
++      0x0530, 0x7814, 0xa084, 0x0184, 0xa085, 0x0010, 0x7816, 0x2079,
++      0x0140, 0x080c, 0x36d7, 0x1110, 0x00fe, 0x0430, 0x7804, 0xd0dc,
++      0x0dc0, 0x2079, 0x0100, 0x7827, 0x0086, 0x7814, 0xa084, 0x0184,
++      0xa085, 0x0032, 0x7816, 0x080c, 0x36d7, 0x1110, 0x00fe, 0x00a0,
++      0x7824, 0xd0bc, 0x0dc0, 0x7827, 0x0080, 0xa026, 0x7c16, 0x7824,
++      0xd0ac, 0x0130, 0x8b58, 0x080c, 0x36e1, 0x00fe, 0x0804, 0x36a1,
++      0x00fe, 0x080c, 0x36d7, 0x1150, 0x8948, 0x2001, 0x007a, 0x2602,
++      0x2001, 0x007b, 0x2502, 0x080c, 0x36e1, 0x0088, 0x87ff, 0x0140,
++      0x2001, 0x0201, 0x2004, 0xa005, 0x1904, 0x35db, 0x8739, 0x0038,
++      0x2001, 0xc96a, 0x2004, 0xa086, 0x0000, 0x1904, 0x35db, 0x2001,
++      0x0033, 0x2003, 0x00f6, 0x8631, 0x1208, 0x8529, 0x2500, 0xa605,
++      0x0904, 0x36a1, 0x7824, 0xd0bc, 0x0128, 0x2900, 0xaa05, 0xab05,
++      0x1904, 0x36a1, 0x6033, 0x000d, 0x2001, 0x0030, 0x2003, 0x0004,
++      0x7824, 0xd0ac, 0x1148, 0x2001, 0xc96a, 0x2003, 0x0003, 0x2001,
++      0x0030, 0x2003, 0x0009, 0x0040, 0x6027, 0x0001, 0x2001, 0x0075,
++      0x2004, 0xa005, 0x0108, 0x6026, 0x2c00, 0x601a, 0x20e1, 0x9040,
++      0x2d00, 0x681a, 0x6833, 0x000d, 0x7824, 0xd0a4, 0x1180, 0x6827,
++      0x0000, 0x00c6, 0x20a9, 0x0004, 0x2061, 0x0020, 0x6003, 0x0008,
++      0x2001, 0x0203, 0x2004, 0x1f04, 0x3676, 0x00ce, 0x0040, 0x6827,
++      0x0001, 0x2001, 0x0074, 0x2004, 0xa005, 0x0108, 0x6826, 0x00f6,
++      0x00c6, 0x2079, 0x0100, 0x2061, 0x0020, 0x7827, 0x0002, 0x2001,
++      0x0072, 0x2004, 0xa084, 0xfff8, 0x601a, 0x0006, 0x2001, 0x0073,
++      0x2004, 0x601e, 0x78c6, 0x000e, 0x78ca, 0x00ce, 0x00fe, 0x0804,
++      0x35b9, 0x2061, 0x0100, 0x6027, 0x0002, 0x001e, 0x61e2, 0x001e,
++      0x6106, 0x7824, 0xa084, 0x0003, 0xa086, 0x0002, 0x0188, 0x20e1,
++      0x9028, 0x6050, 0xa084, 0xf7ef, 0x6052, 0x602f, 0x0000, 0x602c,
++      0xc0ac, 0x602e, 0x604b, 0xf7f7, 0x6043, 0x0090, 0x6043, 0x0010,
++      0x2908, 0x2a10, 0x2b18, 0x2b00, 0xaa05, 0xa905, 0x00fe, 0x00ee,
++      0x00de, 0x00ce, 0x00be, 0x00ae, 0x009e, 0x008e, 0x1118, 0x012e,
++      0x0804, 0x3154, 0x012e, 0x2021, 0x400c, 0x0804, 0x3156, 0xa085,
++      0x0001, 0x1d04, 0x36e0, 0x2091, 0x6000, 0x8420, 0xa486, 0x0064,
++      0x0005, 0x2001, 0x0105, 0x2003, 0x0010, 0x2001, 0x0030, 0x2003,
++      0x0004, 0x2001, 0x0020, 0x2003, 0x0004, 0x2001, 0xc96a, 0x2003,
++      0x0000, 0x2001, 0xc992, 0x2003, 0x0000, 0x20e1, 0xf000, 0xa026,
++      0x0005, 0x00f6, 0x2079, 0x0100, 0x2001, 0xc615, 0x200c, 0x7932,
++      0x7936, 0x080c, 0x29f1, 0x7850, 0xa084, 0x0980, 0xa085, 0x0030,
++      0x7852, 0x2019, 0x01f4, 0x8319, 0x1df0, 0xa084, 0x0980, 0x7852,
++      0x782c, 0xc0ad, 0x782e, 0x20a9, 0x0046, 0x1d04, 0x3715, 0x2091,
++      0x6000, 0x1f04, 0x3715, 0x7850, 0xa085, 0x0400, 0x7852, 0x2001,
++      0x0009, 0x2004, 0xa084, 0x0003, 0xa086, 0x0001, 0x1118, 0x782c,
++      0xc0ac, 0x782e, 0x784b, 0xf7f7, 0x7843, 0x0090, 0x7843, 0x0010,
++      0x20a9, 0x000e, 0xe000, 0x1f04, 0x3732, 0x7850, 0xa085, 0x1400,
++      0x7852, 0x2019, 0x61a8, 0x7854, 0xe000, 0xe000, 0xd08c, 0x1110,
++      0x8319, 0x1dc8, 0x7827, 0x0048, 0x7850, 0xa085, 0x0400, 0x7852,
++      0x7843, 0x0040, 0x2019, 0x01f4, 0xe000, 0xe000, 0x8319, 0x1de0,
++      0x2001, 0x0140, 0x2003, 0x0100, 0x7827, 0x0020, 0x7843, 0x0000,
++      0x2003, 0x0000, 0x7827, 0x0048, 0x00fe, 0x0005, 0x7824, 0xd0ac,
++      0x11c8, 0x00f6, 0x00e6, 0x2071, 0xc96a, 0x2079, 0x0030, 0x2001,
++      0x0201, 0x2004, 0xa005, 0x0160, 0x7000, 0xa086, 0x0000, 0x1140,
++      0x0051, 0xd0bc, 0x0108, 0x8738, 0x7003, 0x0003, 0x7803, 0x0019,
++      0x00ee, 0x00fe, 0x0005, 0x780c, 0xa08c, 0x0070, 0x0178, 0x2009,
++      0x007a, 0x260a, 0x2009, 0x007b, 0x250a, 0xd0b4, 0x0108, 0x8a50,
++      0xd0ac, 0x0108, 0x8948, 0xd0a4, 0x0108, 0x8b58, 0x0005, 0x00f6,
++      0x2079, 0x0200, 0x781c, 0xd084, 0x0140, 0x20e1, 0x0007, 0x20e1,
++      0x2000, 0x2001, 0x020a, 0x2004, 0x0ca8, 0x00fe, 0x0005, 0x00e6,
++      0x2071, 0x0100, 0x2001, 0xc907, 0x2004, 0x70e2, 0x2009, 0xc615,
++      0x210c, 0x716e, 0x7063, 0x0100, 0x7166, 0x719e, 0x706b, 0x0000,
++      0x7073, 0x0809, 0x7077, 0x0008, 0x7078, 0xa080, 0x0100, 0x707a,
++      0x7080, 0x8000, 0x7082, 0x7087, 0xaaaa, 0xa006, 0x708a, 0x708e,
++      0x707e, 0x70d6, 0x70ab, 0x0036, 0x70af, 0x95d5, 0x7027, 0x0080,
++      0x7014, 0xa084, 0x0184, 0xa085, 0x0032, 0x7016, 0x080c, 0x387c,
++      0x080c, 0x36d7, 0x1110, 0x8421, 0x0028, 0x7024, 0xd0bc, 0x0db0,
++      0x7027, 0x0080, 0x00f6, 0x00e6, 0x2071, 0xc96a, 0x2079, 0x0030,
++      0x00d6, 0x2069, 0x0000, 0x6824, 0xd0b4, 0x0120, 0x683c, 0x783e,
++      0x6838, 0x783a, 0x00de, 0x2011, 0x0011, 0x080c, 0x3854, 0x2011,
++      0x0001, 0x080c, 0x3854, 0x00ee, 0x00fe, 0x7017, 0x0000, 0x00ee,
++      0x0005, 0x00f6, 0x00e6, 0x2071, 0xc96a, 0x2079, 0x0030, 0x7904,
++      0xd1fc, 0x0904, 0x3851, 0x7803, 0x0002, 0xa026, 0xd19c, 0x1904,
++      0x384d, 0x7000, 0x0002, 0x3851, 0x380f, 0x3833, 0x384d, 0xd1bc,
++      0x1150, 0xd1dc, 0x1150, 0x8001, 0x7002, 0x2011, 0x0001, 0x04e1,
++      0x05c0, 0x04d1, 0x04b0, 0x780f, 0x0000, 0x7820, 0x7924, 0x7803,
++      0x0004, 0x7822, 0x7926, 0x2001, 0x0201, 0x200c, 0x81ff, 0x0de8,
++      0x080c, 0x377b, 0x2009, 0x0001, 0x7808, 0xd0ec, 0x0110, 0x2009,
++      0x0011, 0x7902, 0x00f0, 0x8001, 0x7002, 0xa184, 0x0880, 0x1138,
++      0x7804, 0xd0fc, 0x1940, 0x2011, 0x0001, 0x00b1, 0x0090, 0x6030,
++      0xa092, 0x0004, 0xa086, 0x0009, 0x1120, 0x6000, 0x601a, 0x2011,
++      0x0025, 0x6232, 0xd1dc, 0x1988, 0x0870, 0x7803, 0x0004, 0x7003,
++      0x0000, 0x00ee, 0x00fe, 0x0005, 0x6024, 0xa005, 0x0520, 0x8001,
++      0x6026, 0x6018, 0x6130, 0xa140, 0x2804, 0x7832, 0x8840, 0x2804,
++      0x7836, 0x8840, 0x2804, 0x7822, 0x8840, 0x2804, 0x7826, 0x8840,
++      0x7a02, 0x7000, 0x8000, 0x7002, 0x6018, 0xa802, 0xa08a, 0x0029,
++      0x1138, 0x6018, 0xa080, 0x0001, 0x2004, 0x601a, 0x2001, 0x000d,
++      0x6032, 0xa085, 0x0001, 0x0005, 0x00f6, 0x00e6, 0x00c6, 0x2071,
++      0xc992, 0x2079, 0x0020, 0x7904, 0xd1fc, 0x01f0, 0x7803, 0x0002,
++      0x2d60, 0xa026, 0x7000, 0x0002, 0x38a4, 0x388f, 0x389b, 0x8001,
++      0x7002, 0xd19c, 0x1188, 0x2011, 0x0001, 0x080c, 0x3854, 0x0160,
++      0x080c, 0x3854, 0x0048, 0x8001, 0x7002, 0x7804, 0xd0fc, 0x1d30,
++      0x2011, 0x0001, 0x080c, 0x3854, 0x00ce, 0x00ee, 0x00fe, 0x0005,
++      0x00f6, 0x00e6, 0x00c6, 0x2061, 0x0200, 0x2001, 0xc907, 0x2004,
++      0x601a, 0x2061, 0x0100, 0x2001, 0xc906, 0x2004, 0x60ce, 0x6004,
++      0xc0ac, 0xa085, 0x0200, 0x6006, 0x2001, 0x0074, 0x2004, 0xa005,
++      0x01f8, 0x2038, 0x2001, 0x0076, 0x2024, 0x2001, 0x0077, 0x201c,
++      0x080c, 0x4026, 0x6833, 0x000d, 0x6f26, 0x2d00, 0x681a, 0xa78a,
++      0x0007, 0x0220, 0x2138, 0x2009, 0x0007, 0x0010, 0x2708, 0xa03e,
++      0x6818, 0xa080, 0x000d, 0x04b1, 0x1d90, 0x2d00, 0x681a, 0x0088,
++      0x080c, 0x4026, 0x6833, 0x000d, 0x2070, 0x6827, 0x0001, 0x2d00,
++      0x681a, 0x2001, 0x0076, 0x2004, 0x2072, 0x2001, 0x0077, 0x2004,
++      0x7006, 0x2061, 0x0020, 0x2079, 0x0100, 0x2001, 0xc906, 0x2004,
++      0x6012, 0x20e1, 0x9040, 0x2001, 0x0072, 0x2004, 0xa084, 0xfff8,
++      0x700a, 0x601a, 0x0006, 0x2001, 0x0073, 0x2004, 0x700e, 0x601e,
++      0x78c6, 0x000e, 0x78ca, 0xa006, 0x603a, 0x603e, 0x00ce, 0x00ee,
++      0x00fe, 0x0005, 0x00e6, 0x2071, 0x0010, 0x20a0, 0x2099, 0x0014,
++      0x7003, 0x0026, 0x7432, 0x7336, 0xa006, 0x703a, 0x703e, 0x810b,
++      0x810b, 0x21a8, 0x810b, 0x7122, 0x7003, 0x0041, 0x7004, 0xd0fc,
++      0x0de8, 0x7003, 0x0002, 0x7003, 0x0040, 0x53a5, 0x7430, 0x7334,
++      0x87ff, 0x0180, 0x00c6, 0x00d6, 0x2d60, 0x00c6, 0x080c, 0x4026,
++      0x00ce, 0x6018, 0x2070, 0x2d00, 0x7006, 0x601a, 0x00de, 0x00ce,
++      0xa085, 0x0001, 0x00ee, 0x0005, 0x00e6, 0x2001, 0x0075, 0x2004,
++      0xa005, 0x0508, 0x2038, 0x2001, 0x0078, 0x2024, 0x2001, 0x0079,
++      0x201c, 0x080c, 0x4026, 0x2d60, 0x6833, 0x000d, 0x6f26, 0x2d00,
++      0x681a, 0xa78a, 0x0007, 0x0220, 0x2138, 0x2009, 0x0007, 0x0010,
++      0x2708, 0xa03e, 0x6818, 0xa080, 0x000d, 0x080c, 0x3912, 0x1d88,
++      0x2d00, 0x681a, 0x00e0, 0x080c, 0x4026, 0x2d60, 0x6033, 0x000d,
++      0x2070, 0x6027, 0x0001, 0x2c00, 0x601a, 0x2001, 0x0078, 0x2004,
++      0x2072, 0x2001, 0x0079, 0x2004, 0x7006, 0x2001, 0x0072, 0x2004,
++      0xa084, 0xfff8, 0x700a, 0x2001, 0x0073, 0x2004, 0x700e, 0x2001,
++      0x0030, 0x2003, 0x0004, 0x7824, 0xd0ac, 0x1178, 0x2001, 0x0101,
++      0x200c, 0xc1ed, 0x2102, 0x6027, 0x0000, 0x2001, 0xc96a, 0x2003,
++      0x0003, 0x2001, 0x0030, 0x2003, 0x0009, 0x00ee, 0x0005, 0x0804,
++      0x3154, 0x0126, 0x2091, 0x8000, 0x20a9, 0x0012, 0x2001, 0xc640,
++      0x20a0, 0xa006, 0x40a4, 0x012e, 0x0804, 0x3154, 0x7d38, 0x7c3c,
++      0x0804, 0x31fb, 0x080c, 0x4026, 0x0904, 0x3179, 0x080c, 0x5f22,
++      0x0110, 0x080c, 0x4f2c, 0x2009, 0x001c, 0x7a2c, 0x7b28, 0x7c3c,
++      0x7d38, 0x080c, 0x4067, 0x701b, 0x39c6, 0x0005, 0xade8, 0x000d,
++      0x6800, 0xa005, 0x0904, 0x317c, 0x6804, 0xd0ac, 0x0118, 0xd0a4,
++      0x0904, 0x317c, 0xd094, 0x00c6, 0x2061, 0x0100, 0x6104, 0x0138,
++      0x6200, 0xa292, 0x0005, 0x0218, 0xa18c, 0xffdf, 0x0010, 0xa18d,
++      0x0020, 0x6106, 0x00ce, 0xd08c, 0x00c6, 0x2061, 0x0100, 0x6104,
++      0x0118, 0xa18d, 0x0010, 0x0010, 0xa18c, 0xffef, 0x6106, 0x00ce,
++      0x2009, 0x0100, 0x210c, 0xa18a, 0x0002, 0x0268, 0xd084, 0x0158,
++      0x6a28, 0xa28a, 0x007f, 0x1a04, 0x317c, 0xa288, 0x2f6e, 0x210d,
++      0xa18c, 0x00ff, 0x615a, 0xd0dc, 0x0130, 0x6828, 0xa08a, 0x007f,
++      0x1a04, 0x317c, 0x6052, 0x6808, 0xa08a, 0x0100, 0x0a04, 0x317c,
++      0xa08a, 0x0841, 0x1a04, 0x317c, 0xa084, 0x0007, 0x1904, 0x317c,
++      0x680c, 0xa005, 0x0904, 0x317c, 0x6810, 0xa005, 0x0904, 0x317c,
++      0x6848, 0x6940, 0xa10a, 0x1a04, 0x317c, 0x8001, 0x0904, 0x317c,
++      0x684c, 0x6944, 0xa10a, 0x1a04, 0x317c, 0x8001, 0x0904, 0x317c,
++      0x6804, 0xd0fc, 0x0560, 0x080c, 0x4026, 0x0904, 0x3179, 0x2009,
++      0x0014, 0x7a2c, 0x7b28, 0x7c3c, 0x7d38, 0xa290, 0x0038, 0xa399,
++      0x0000, 0x080c, 0x4067, 0x701b, 0x3a46, 0x0005, 0xade8, 0x000d,
++      0x20a9, 0x0014, 0x2d98, 0x2069, 0xc66e, 0x2da0, 0x53a3, 0x7010,
++      0xa0e8, 0x000d, 0x2001, 0xc672, 0x200c, 0xd1e4, 0x0140, 0x00c6,
++      0x2061, 0x0100, 0x6004, 0xa085, 0x0b00, 0x6006, 0x00ce, 0x2009,
++      0xc8f8, 0x200b, 0x0000, 0x2001, 0xc674, 0x2004, 0xd0ac, 0x0158,
++      0x7824, 0x200a, 0x2009, 0x017f, 0x200a, 0x3200, 0xa084, 0x003f,
++      0xa085, 0x3020, 0x2090, 0x20a9, 0x001c, 0x2d98, 0x2069, 0xc652,
++      0x2da0, 0x53a3, 0x6814, 0xa08c, 0x00ff, 0x6142, 0x8007, 0xa084,
++      0x00ff, 0x6046, 0x080c, 0x61f8, 0x080c, 0x576e, 0x080c, 0x57d7,
++      0x6000, 0xa086, 0x0000, 0x1904, 0x3b41, 0x6808, 0x602a, 0x080c,
++      0x25bb, 0x0006, 0x2001, 0x0100, 0x2004, 0xa082, 0x0005, 0x000e,
++      0x0268, 0x2009, 0x0170, 0x200b, 0x0080, 0xe000, 0xe000, 0x200b,
++      0x0000, 0x0036, 0x6b08, 0x080c, 0x2a4c, 0x003e, 0x6818, 0x691c,
++      0x6a20, 0x6b24, 0x8007, 0x810f, 0x8217, 0x831f, 0x6016, 0x611a,
++      0x621e, 0x6322, 0x6c04, 0xd4f4, 0x0148, 0x6830, 0x6934, 0x6a38,
++      0x6b3c, 0x8007, 0x810f, 0x8217, 0x831f, 0x0010, 0xa084, 0xf0ff,
++      0x6006, 0x610a, 0x620e, 0x6312, 0x8007, 0x810f, 0x8217, 0x831f,
++      0x20a9, 0x0004, 0x20a1, 0xc90d, 0x40a1, 0x080c, 0x707c, 0x6904,
++      0xd1fc, 0x0520, 0x00c6, 0x2009, 0x0000, 0x20a9, 0x0001, 0x6b70,
++      0xd384, 0x01c8, 0x0020, 0x839d, 0x12b0, 0x3508, 0x8109, 0x080c,
++      0x67ed, 0x6878, 0x6016, 0x6874, 0x2008, 0xa084, 0xff00, 0x8007,
++      0x600a, 0xa184, 0x00ff, 0x6006, 0x8108, 0x1118, 0x6003, 0x0003,
++      0x0010, 0x6003, 0x0001, 0x1f04, 0x3adb, 0x00ce, 0x2069, 0xc652,
++      0x2001, 0xc8e5, 0x6a80, 0xa294, 0x0030, 0xa28e, 0x0000, 0x0170,
++      0xa28e, 0x0010, 0x0118, 0xa28e, 0x0020, 0x0140, 0x2003, 0xaaaa,
++      0x080c, 0x2a95, 0x2001, 0xc8d6, 0x2102, 0x0008, 0x2102, 0x00c6,
++      0x2061, 0x0100, 0x602f, 0x0040, 0x602f, 0x0000, 0x00ce, 0x080c,
++      0x5f22, 0x0128, 0x080c, 0x440b, 0x0110, 0x080c, 0x2a11, 0x60c8,
++      0xa005, 0x01d0, 0x6003, 0x0001, 0x2009, 0x3b27, 0x00e0, 0x080c,
++      0x5f22, 0x1178, 0x2011, 0x5df5, 0x080c, 0x6fad, 0x2011, 0x5de8,
++      0x080c, 0x7070, 0x2001, 0xc8e6, 0x2003, 0x0000, 0x080c, 0x5e5a,
++      0x0040, 0x080c, 0x4e5b, 0x0028, 0x6003, 0x0004, 0x2009, 0x3b41,
++      0x0010, 0x0804, 0x3154, 0x2001, 0x0100, 0x2004, 0xa082, 0x0005,
++      0x0258, 0x2001, 0x0170, 0x2004, 0xa084, 0x00ff, 0xa086, 0x004c,
++      0x1118, 0x2091, 0x309d, 0x0817, 0x2091, 0x301d, 0x0817, 0x6000,
++      0xa086, 0x0000, 0x0904, 0x3179, 0x2069, 0xc652, 0x7830, 0x6842,
++      0x7834, 0x6846, 0x6804, 0xd0fc, 0x0118, 0x2009, 0x0030, 0x0010,
++      0x2009, 0x001c, 0x2d00, 0x7a2c, 0x7b28, 0x7c3c, 0x7d38, 0x0804,
++      0x406a, 0xa006, 0x080c, 0x2a11, 0x81ff, 0x1904, 0x3179, 0x080c,
++      0x5f22, 0x1178, 0x2001, 0xc8e6, 0x2003, 0x0001, 0x2001, 0xc600,
++      0x2003, 0x0001, 0xa085, 0x0001, 0x080c, 0x5f66, 0x080c, 0x5e5a,
++      0x0020, 0x080c, 0x4f2c, 0x080c, 0x4e5b, 0x0804, 0x3154, 0x81ff,
++      0x1904, 0x3179, 0x080c, 0x5f22, 0x1110, 0x0804, 0x3179, 0x6188,
++      0x81ff, 0x0198, 0x703f, 0x0000, 0x2001, 0xcdc0, 0x2009, 0x0040,
++      0x7a2c, 0x7b28, 0x7c3c, 0x7d38, 0x0126, 0x2091, 0x8000, 0x080c,
++      0x406a, 0x701b, 0x3152, 0x012e, 0x0005, 0x703f, 0x0001, 0x00d6,
++      0x2069, 0xcdc0, 0x20a9, 0x0040, 0x20a1, 0xcdc0, 0x2019, 0xffff,
++      0x43a4, 0x6550, 0xa588, 0x2f6e, 0x210d, 0xa18c, 0x00ff, 0x216a,
++      0xa00e, 0x2011, 0x0002, 0x2100, 0xa506, 0x01a8, 0x080c, 0x533d,
++      0x1190, 0x6014, 0x821c, 0x0238, 0xa398, 0xcdc0, 0xa085, 0xff00,
++      0x8007, 0x201a, 0x0038, 0xa398, 0xcdc0, 0x2324, 0xa4a4, 0xff00,
++      0xa405, 0x201a, 0x8210, 0x8108, 0xa182, 0x0080, 0x1208, 0x0c18,
++      0x8201, 0x8007, 0x2d0c, 0xa105, 0x206a, 0x00de, 0x20a9, 0x0040,
++      0x20a1, 0xcdc0, 0x2099, 0xcdc0, 0x080c, 0x4ecb, 0x0804, 0x3b9c,
++      0x080c, 0x404b, 0x0904, 0x317c, 0x00c6, 0x080c, 0x4026, 0x00ce,
++      0x1120, 0x2009, 0x0002, 0x0804, 0x3179, 0x2001, 0xc653, 0x2004,
++      0xd0b4, 0x0550, 0x7824, 0xa084, 0xff00, 0xa08e, 0x7e00, 0x0520,
++      0xa08e, 0x7f00, 0x0508, 0xa08e, 0x8000, 0x01f0, 0x6000, 0xd08c,
++      0x11d8, 0x6004, 0xa084, 0x00ff, 0xa086, 0x0006, 0x11a8, 0x6837,
++      0x0000, 0x6838, 0xc0fd, 0x683a, 0x080c, 0xae11, 0x1120, 0x2009,
++      0x0003, 0x0804, 0x3179, 0x7007, 0x0003, 0x701b, 0x3c28, 0x0005,
++      0x080c, 0x404b, 0x0904, 0x317c, 0x20a9, 0x002b, 0x2c98, 0xade8,
++      0x0002, 0x2da0, 0x53a3, 0x20a9, 0x0004, 0xac80, 0x0006, 0x2098,
++      0xad80, 0x0006, 0x20a0, 0x080c, 0x4ecb, 0x20a9, 0x0004, 0xac80,
++      0x000a, 0x2098, 0xad80, 0x000a, 0x20a0, 0x080c, 0x4ecb, 0x2d00,
++      0x2009, 0x002b, 0x7a2c, 0x7b28, 0x7c3c, 0x7d38, 0x0804, 0x406a,
++      0x81ff, 0x1904, 0x3179, 0x080c, 0x403b, 0x0904, 0x317c, 0x080c,
++      0x551a, 0x0804, 0x3154, 0x81ff, 0x1904, 0x3179, 0x7828, 0xa08a,
++      0x1000, 0x1a04, 0x317c, 0x080c, 0x404b, 0x0904, 0x317c, 0x080c,
++      0x557d, 0x0904, 0x3179, 0x2019, 0x0004, 0xa00e, 0x080c, 0x552c,
++      0x7924, 0x810f, 0x7a28, 0x0011, 0x0804, 0x3154, 0xa186, 0x00ff,
++      0x0110, 0x0071, 0x0060, 0x2029, 0x007e, 0x2061, 0xc600, 0x6450,
++      0x2400, 0xa506, 0x0110, 0x2508, 0x0019, 0x8529, 0x1ec8, 0x0005,
++      0x080c, 0x533d, 0x1138, 0x2200, 0x8003, 0x800b, 0x810b, 0xa108,
++      0x080c, 0x6fb9, 0x0005, 0x81ff, 0x1904, 0x3179, 0x080c, 0x403b,
++      0x0904, 0x317c, 0x080c, 0x5403, 0x0904, 0x3179, 0x080c, 0x5523,
++      0x0804, 0x3154, 0x81ff, 0x1904, 0x3179, 0x080c, 0x403b, 0x0904,
++      0x317c, 0x080c, 0x5403, 0x0904, 0x3179, 0x080c, 0x5511, 0x0804,
++      0x3154, 0x6100, 0x0804, 0x3154, 0x080c, 0x404b, 0x0904, 0x317c,
++      0x2001, 0xc600, 0x2004, 0xa086, 0x0003, 0x1904, 0x3179, 0x00d6,
++      0xace8, 0x000a, 0x7924, 0xd184, 0x0110, 0xace8, 0x0006, 0x680c,
++      0x8007, 0x783e, 0x6808, 0x8007, 0x783a, 0x6b04, 0x831f, 0x6a00,
++      0x8217, 0x00de, 0x6100, 0xa18c, 0x0200, 0x0804, 0x3154, 0x7824,
++      0xa09c, 0x00ff, 0xa39a, 0x0003, 0x1a04, 0x3179, 0x6250, 0xa294,
++      0x00ff, 0xa084, 0xff00, 0x8007, 0xa206, 0x1150, 0x2001, 0xc640,
++      0x2009, 0x000c, 0x7a2c, 0x7b28, 0x7c3c, 0x7d38, 0x0804, 0x406a,
++      0x81ff, 0x1904, 0x3179, 0x080c, 0x404b, 0x0904, 0x317c, 0x6004,
++      0xa084, 0x00ff, 0xa086, 0x0006, 0x1904, 0x3179, 0x00c6, 0x080c,
++      0x4026, 0x00ce, 0x0904, 0x3179, 0x6837, 0x0000, 0x6838, 0xc0fd,
++      0x683a, 0x080c, 0xadbd, 0x0904, 0x3179, 0x7007, 0x0003, 0x701b,
++      0x3d12, 0x0005, 0x6830, 0xa086, 0x0100, 0x0904, 0x3179, 0xad80,
++      0x000e, 0x2009, 0x000c, 0x7a2c, 0x7b28, 0x7c3c, 0x7d38, 0x0804,
++      0x406a, 0xa006, 0x080c, 0x2a11, 0x7824, 0xa084, 0x00ff, 0xa086,
++      0x00ff, 0x0118, 0x81ff, 0x1904, 0x3179, 0x080c, 0x5f22, 0x0110,
++      0x080c, 0x4f2c, 0x7828, 0xa08a, 0x1000, 0x1a04, 0x317c, 0x7924,
++      0xa18c, 0xff00, 0x810f, 0xa186, 0x00ff, 0x0138, 0xa182, 0x007f,
++      0x1a04, 0x317c, 0x2100, 0x080c, 0x29db, 0x0026, 0x00c6, 0x0126,
++      0x2091, 0x8000, 0x2061, 0xc93a, 0x601b, 0x0000, 0x601f, 0x0000,
++      0x080c, 0x5f22, 0x1178, 0x2001, 0xc8e6, 0x2003, 0x0001, 0x2001,
++      0xc600, 0x2003, 0x0001, 0xa085, 0x0001, 0x080c, 0x5f66, 0x080c,
++      0x5e5a, 0x0420, 0x2011, 0x0003, 0x080c, 0x8f0e, 0x2011, 0x0002,
++      0x080c, 0x8f18, 0x080c, 0x8dee, 0x0036, 0x2019, 0x0000, 0x080c,
++      0x8e79, 0x003e, 0x2061, 0x0100, 0x2001, 0xc615, 0x2004, 0xa084,
++      0x00ff, 0x810f, 0xa105, 0x604a, 0x6043, 0x0090, 0x6043, 0x0010,
++      0x2009, 0x002d, 0x2011, 0x4e90, 0x080c, 0x7036, 0x7924, 0xa18c,
++      0xff00, 0x810f, 0x080c, 0x5f22, 0x1110, 0x2009, 0x00ff, 0x7a28,
++      0x080c, 0x3c76, 0x012e, 0x00ce, 0x002e, 0x0804, 0x3154, 0x7924,
++      0xa18c, 0xff00, 0x810f, 0x00c6, 0x080c, 0x52e1, 0x2c08, 0x00ce,
++      0x1904, 0x317c, 0x0804, 0x3154, 0x81ff, 0x0120, 0x2009, 0x0001,
++      0x0804, 0x3179, 0x60d4, 0xd0ac, 0x1130, 0xd09c, 0x1120, 0x2009,
++      0x0005, 0x0804, 0x3179, 0x080c, 0x4026, 0x1120, 0x2009, 0x0002,
++      0x0804, 0x3179, 0x7924, 0x7a2c, 0x7b28, 0x7c3c, 0x7d38, 0x080c,
++      0x4067, 0x701b, 0x3dc4, 0x0005, 0x2009, 0x0080, 0x080c, 0x533d,
++      0x1130, 0x6004, 0xa084, 0x00ff, 0xa086, 0x0006, 0x0120, 0x2021,
++      0x400a, 0x0804, 0x3156, 0x00d6, 0xade8, 0x000d, 0x6900, 0x6a08,
++      0x6b0c, 0x6c10, 0x6d14, 0x6e18, 0x6820, 0xa0be, 0x0100, 0x0904,
++      0x3e3b, 0xa0be, 0x0112, 0x0904, 0x3e3b, 0xa0be, 0x0113, 0x0904,
++      0x3e3b, 0xa0be, 0x0114, 0x0904, 0x3e3b, 0xa0be, 0x0117, 0x0904,
++      0x3e3b, 0xa0be, 0x011a, 0x0904, 0x3e3b, 0xa0be, 0x011c, 0x0904,
++      0x3e3b, 0xa0be, 0x0121, 0x05b0, 0xa0be, 0x0131, 0x0598, 0xa0be,
++      0x0171, 0x05c8, 0xa0be, 0x0173, 0x05b0, 0xa0be, 0x01a1, 0x1120,
++      0x6830, 0x8007, 0x6832, 0x04a8, 0xa0be, 0x0212, 0x0540, 0xa0be,
++      0x0213, 0x0528, 0xa0be, 0x0214, 0x01b0, 0xa0be, 0x0217, 0x0168,
++      0xa0be, 0x021a, 0x1120, 0x6838, 0x8007, 0x683a, 0x00e0, 0xa0be,
++      0x0300, 0x01c8, 0x00de, 0x0804, 0x317c, 0xad80, 0x0010, 0x20a9,
++      0x0007, 0x080c, 0x3e81, 0xad80, 0x000e, 0x20a9, 0x0001, 0x080c,
++      0x3e81, 0x0048, 0xad80, 0x000c, 0x080c, 0x3e8f, 0x0050, 0xad80,
++      0x000e, 0x080c, 0x3e8f, 0xad80, 0x000c, 0x20a9, 0x0001, 0x080c,
++      0x3e81, 0x00c6, 0x080c, 0x4026, 0x0568, 0x6838, 0xc0fd, 0x683a,
++      0x6837, 0x0119, 0x6853, 0x0000, 0x684f, 0x0020, 0x685b, 0x0001,
++      0x810b, 0x697e, 0x6883, 0x0000, 0x6a86, 0x6b8a, 0x6c8e, 0x6d92,
++      0x6996, 0x689b, 0x0000, 0x00ce, 0x00de, 0x6837, 0x0000, 0x6838,
++      0xc0fd, 0x683a, 0x6823, 0x0000, 0x6804, 0x2068, 0x080c, 0xadd9,
++      0x1120, 0x2009, 0x0003, 0x0804, 0x3179, 0x7007, 0x0003, 0x701b,
++      0x3e78, 0x0005, 0x00ce, 0x00de, 0x2009, 0x0002, 0x0804, 0x3179,
++      0x6820, 0xa086, 0x8001, 0x1904, 0x3154, 0x2009, 0x0004, 0x0804,
++      0x3179, 0x0016, 0x2008, 0x2044, 0x8000, 0x204c, 0x8000, 0x290a,
++      0x8108, 0x280a, 0x8108, 0x1f04, 0x3e83, 0x001e, 0x0005, 0x0016,
++      0x00a6, 0x00b6, 0x2008, 0x2044, 0x8000, 0x204c, 0x8000, 0x2054,
++      0x8000, 0x205c, 0x2b0a, 0x8108, 0x2a0a, 0x8108, 0x290a, 0x8108,
++      0x280a, 0x00be, 0x00ae, 0x001e, 0x0005, 0x81ff, 0x0120, 0x2009,
++      0x0001, 0x0804, 0x3179, 0x60d4, 0xd0ac, 0x1130, 0xd09c, 0x1120,
++      0x2009, 0x0005, 0x0804, 0x3179, 0x7924, 0x2140, 0xa18c, 0xff00,
++      0x810f, 0x60d4, 0xd0ac, 0x1120, 0xa182, 0x0080, 0x0a04, 0x317c,
++      0xa182, 0x00ff, 0x1a04, 0x317c, 0x7a2c, 0x7b28, 0x6070, 0xa306,
++      0x1140, 0x6074, 0xa24e, 0x0904, 0x317c, 0xa9cc, 0xff00, 0x0904,
++      0x317c, 0x00c6, 0x080c, 0x3f6e, 0x2c68, 0x00ce, 0x0538, 0xa0c6,
++      0x4000, 0x1180, 0x00c6, 0x0006, 0x2d60, 0x2009, 0x0000, 0x080c,
++      0x55de, 0x1108, 0xc185, 0x6000, 0xd0bc, 0x0108, 0xc18d, 0x000e,
++      0x00ce, 0x0088, 0xa0c6, 0x4007, 0x1110, 0x2408, 0x0060, 0xa0c6,
++      0x4008, 0x1118, 0x2708, 0x2610, 0x0030, 0xa0c6, 0x4009, 0x1108,
++      0x0010, 0x2001, 0x4006, 0x2020, 0x0804, 0x3156, 0x2d00, 0x7022,
++      0x0016, 0x00b6, 0x00c6, 0x00e6, 0x2c70, 0x080c, 0x958d, 0x05d8,
++      0x2d00, 0x601a, 0x080c, 0xb05e, 0x2e58, 0x00ee, 0x00e6, 0x00c6,
++      0x080c, 0x4026, 0x00ce, 0x2b70, 0x1150, 0x080c, 0x95e3, 0x00ee,
++      0x00ce, 0x00be, 0x001e, 0x2009, 0x0002, 0x0804, 0x3179, 0x6837,
++      0x0000, 0x683b, 0x0000, 0x2d00, 0x6012, 0x6833, 0x0000, 0x6838,
++      0xc0fd, 0xd88c, 0x0108, 0xc0f5, 0x683a, 0x0126, 0x2091, 0x8000,
++      0x080c, 0x2e46, 0x012e, 0x601f, 0x0001, 0x2001, 0x0000, 0x080c,
++      0x527f, 0x2001, 0x0002, 0x080c, 0x5291, 0x2009, 0x0002, 0x080c,
++      0x9613, 0xa085, 0x0001, 0x00ee, 0x00ce, 0x00be, 0x001e, 0x1120,
++      0x2009, 0x0003, 0x0804, 0x3179, 0x7007, 0x0003, 0x701b, 0x3f51,
++      0x0005, 0x6830, 0xa086, 0x0100, 0x7020, 0x2060, 0x1138, 0x2009,
++      0x0004, 0x6204, 0xa294, 0x00ff, 0x0804, 0x3179, 0x2009, 0x0000,
++      0x6838, 0xd0f4, 0x1904, 0x3154, 0x080c, 0x55de, 0x1108, 0xc185,
++      0x6000, 0xd0bc, 0x0108, 0xc18d, 0x0804, 0x3154, 0x00e6, 0x00d6,
++      0x2029, 0x0000, 0x2001, 0xc635, 0x2004, 0xd0ac, 0x0138, 0x2021,
++      0x0000, 0x20a9, 0x00ff, 0x2071, 0xc77b, 0x0030, 0x2021, 0x0080,
++      0x20a9, 0x007f, 0x2071, 0xc7fb, 0x2e04, 0xa005, 0x1130, 0x2100,
++      0xa406, 0x15a0, 0x2428, 0xc5fd, 0x0488, 0x2068, 0x6f10, 0x2700,
++      0xa306, 0x11e0, 0x6e14, 0x2600, 0xa206, 0x11c0, 0x2400, 0xa106,
++      0x1190, 0x2d60, 0xd884, 0x0598, 0x080c, 0x56ed, 0x1580, 0x2001,
++      0x4000, 0x0470, 0x6004, 0xa084, 0x00ff, 0xa086, 0x0006, 0x1538,
++      0x2001, 0x4000, 0x0428, 0x2001, 0x4007, 0x0410, 0x2400, 0xa106,
++      0x1168, 0x6e14, 0x87ff, 0x1138, 0x86ff, 0x09a0, 0x2001, 0xc635,
++      0x2004, 0xd0ac, 0x1978, 0x2001, 0x4008, 0x0090, 0x8420, 0x8e70,
++      0x1f04, 0x3f84, 0x85ff, 0x1130, 0x2001, 0x4009, 0x0048, 0x2001,
++      0x0001, 0x0030, 0x080c, 0x52e1, 0x1dd0, 0x6312, 0x6216, 0xa006,
++      0xa005, 0x00de, 0x00ee, 0x0005, 0x81ff, 0x1904, 0x3179, 0x080c,
++      0x4026, 0x0904, 0x3179, 0x6837, 0x0000, 0x6838, 0xc0fd, 0x683a,
++      0x7824, 0xa005, 0x0904, 0x317c, 0xa096, 0x00ff, 0x0120, 0xa092,
++      0x0004, 0x1a04, 0x317c, 0x2010, 0x2d18, 0x080c, 0x2df9, 0x0904,
++      0x3179, 0x7007, 0x0003, 0x701b, 0x3ff6, 0x0005, 0x6830, 0xa086,
++      0x0100, 0x0904, 0x3179, 0x0804, 0x3154, 0x7924, 0xa18c, 0xff00,
++      0x810f, 0x60d4, 0xd0ac, 0x1120, 0xa182, 0x0080, 0x0a04, 0x317c,
++      0xa182, 0x00ff, 0x1a04, 0x317c, 0x0126, 0x2091, 0x8000, 0x080c,
++      0xacc1, 0x1188, 0xa190, 0xc77b, 0x2204, 0xa065, 0x0160, 0x080c,
++      0x4f47, 0x2001, 0xc635, 0x2004, 0xd0ac, 0x0110, 0x6017, 0x0000,
++      0x012e, 0x0804, 0x3154, 0x012e, 0x0804, 0x3179, 0x080c, 0x1602,
++      0x0188, 0xa006, 0x6802, 0x7010, 0xa005, 0x1120, 0x2d00, 0x7012,
++      0x7016, 0x0030, 0x7014, 0x6802, 0x2060, 0x2d00, 0x6006, 0x7016,
++      0xad80, 0x000d, 0x0005, 0x7924, 0x810f, 0xa18c, 0x00ff, 0x080c,
++      0x533d, 0x1130, 0x7e28, 0xa684, 0x3fff, 0xa082, 0x4000, 0x0208,
++      0xa066, 0x8cff, 0x0005, 0x7e24, 0x860f, 0xa18c, 0x00ff, 0x080c,
++      0x533d, 0x1128, 0xa6b4, 0x00ff, 0xa682, 0x4000, 0x0208, 0xa066,
++      0x8cff, 0x0005, 0x0016, 0x7110, 0x81ff, 0x0128, 0x2168, 0x6904,
++      0x080c, 0x1619, 0x0cc8, 0x7112, 0x7116, 0x001e, 0x0005, 0x2031,
++      0x0001, 0x0010, 0x2031, 0x0000, 0x2061, 0xc6f2, 0x6606, 0x6112,
++      0x600e, 0x6226, 0x632a, 0x642e, 0x6532, 0x2c10, 0x080c, 0x164d,
++      0x7007, 0x0002, 0x701b, 0x3154, 0x0005, 0x00f6, 0x0126, 0x2091,
++      0x8000, 0x2079, 0x0000, 0x2001, 0xc6b0, 0x2004, 0xa005, 0x1168,
++      0x0e04, 0x4095, 0x7818, 0xd084, 0x1140, 0x7a22, 0x7b26, 0x7c2a,
++      0x781b, 0x0001, 0x2091, 0x4080, 0x0408, 0x0016, 0x00c6, 0x00e6,
++      0x2071, 0xc6a2, 0x7138, 0xa182, 0x0010, 0x0218, 0x7030, 0x2060,
++      0x0078, 0x7030, 0xa0e0, 0x0004, 0xac82, 0xc6f2, 0x0210, 0x2061,
++      0xc6b2, 0x2c00, 0x7032, 0x81ff, 0x1108, 0x7036, 0x8108, 0x713a,
++      0x2262, 0x6306, 0x640a, 0x00ee, 0x00ce, 0x001e, 0x012e, 0x00fe,
++      0x0005, 0x00e6, 0x2071, 0xc6a2, 0x7038, 0xa005, 0x0570, 0x0126,
++      0x2091, 0x8000, 0x0e04, 0x40ec, 0x00f6, 0x2079, 0x0000, 0x7818,
++      0xd084, 0x1508, 0x00c6, 0x7034, 0x2060, 0x2c04, 0x7822, 0x6004,
++      0x7826, 0x6008, 0x782a, 0x781b, 0x0001, 0x2091, 0x4080, 0x7038,
++      0x8001, 0x703a, 0xa005, 0x1130, 0x7033, 0xc6b2, 0x7037, 0xc6b2,
++      0x00ce, 0x0048, 0xac80, 0x0004, 0xa0fa, 0xc6f2, 0x0210, 0x2001,
++      0xc6b2, 0x7036, 0x00ce, 0x00fe, 0x012e, 0x00ee, 0x0005, 0x0026,
++      0x2001, 0xc653, 0x2004, 0xd0c4, 0x0120, 0x2011, 0x8014, 0x080c,
++      0x407d, 0x002e, 0x0005, 0x81ff, 0x1904, 0x3179, 0x0126, 0x2091,
++      0x8000, 0x6030, 0xc08d, 0xc085, 0xc0ac, 0x6032, 0x080c, 0x5f22,
++      0x1178, 0x2001, 0xc8e6, 0x2003, 0x0001, 0x2001, 0xc600, 0x2003,
++      0x0001, 0xa085, 0x0001, 0x080c, 0x5f66, 0x080c, 0x5e5a, 0x0010,
++      0x080c, 0x4e5b, 0x012e, 0x0804, 0x3154, 0x7824, 0x2008, 0xa18c,
++      0xfffd, 0x1128, 0x61e0, 0xa10d, 0x61e2, 0x0804, 0x3154, 0x0804,
++      0x317c, 0x81ff, 0x1904, 0x3179, 0x6000, 0xa086, 0x0003, 0x1904,
++      0x3179, 0x2001, 0xc653, 0x2004, 0xd0ac, 0x1904, 0x3179, 0x080c,
++      0x404b, 0x0904, 0x317c, 0x6004, 0xa084, 0x00ff, 0xa086, 0x0006,
++      0x1120, 0x7828, 0xa005, 0x0904, 0x3154, 0x00c6, 0x080c, 0x4026,
++      0x00ce, 0x0904, 0x3179, 0x6837, 0x0000, 0x6833, 0x0000, 0x6838,
++      0xc0fd, 0x683a, 0x080c, 0xaea2, 0x0904, 0x3179, 0x7007, 0x0003,
++      0x701b, 0x415b, 0x0005, 0x6830, 0xa086, 0x0100, 0x0904, 0x3179,
++      0x0804, 0x3154, 0x2001, 0xc600, 0x2004, 0xa086, 0x0003, 0x1904,
++      0x3179, 0x7f24, 0x7a2c, 0x7b28, 0x7c3c, 0x7d38, 0x080c, 0x4026,
++      0x0904, 0x3179, 0x2009, 0x0000, 0x2031, 0x0000, 0x7023, 0x0000,
++      0x702f, 0x0000, 0xad80, 0x0005, 0x7026, 0x20a0, 0x080c, 0x533d,
++      0x1904, 0x41e1, 0x6004, 0xa0c4, 0x00ff, 0xa8c6, 0x0006, 0x0148,
++      0xa0c4, 0xff00, 0xa8c6, 0x0600, 0x0120, 0x080c, 0x56ed, 0x1904,
++      0x41e1, 0xd794, 0x1110, 0xd784, 0x0158, 0xac80, 0x0006, 0x2098,
++      0x3400, 0x20a9, 0x0004, 0x53a3, 0x080c, 0x3e8f, 0xd794, 0x0148,
++      0xac80, 0x000a, 0x2098, 0x3400, 0x20a9, 0x0004, 0x53a3, 0x080c,
++      0x3e8f, 0xa186, 0x007e, 0x0178, 0xa186, 0x0080, 0x0160, 0x6004,
++      0xa084, 0x00ff, 0xa0c2, 0x0006, 0x1210, 0xc1fd, 0x0020, 0x080c,
++      0x55de, 0x1108, 0xc1fd, 0x21a2, 0xc1fc, 0xd794, 0x01d8, 0xac80,
++      0x0000, 0x2098, 0x94a0, 0x20a9, 0x0002, 0x53a3, 0xac80, 0x0003,
++      0x20a6, 0x94a0, 0xac80, 0x0004, 0x2098, 0x3400, 0x20a9, 0x0002,
++      0x53a3, 0x080c, 0x3e81, 0xac80, 0x0026, 0x2098, 0x20a9, 0x0002,
++      0x53a3, 0x0008, 0x94a0, 0xd794, 0x0110, 0xa6b0, 0x000b, 0xa6b0,
++      0x0005, 0x8108, 0x2001, 0xc635, 0x2004, 0xd0ac, 0x0118, 0xa186,
++      0x0100, 0x0040, 0xd78c, 0x0120, 0xa186, 0x0100, 0x0170, 0x0018,
++      0xa186, 0x007e, 0x0150, 0xd794, 0x0118, 0xa686, 0x0020, 0x0010,
++      0xa686, 0x0028, 0x0150, 0x0804, 0x417e, 0x86ff, 0x1120, 0x7120,
++      0x810b, 0x0804, 0x3154, 0x702f, 0x0001, 0x711e, 0x7020, 0xa600,
++      0x7022, 0x772a, 0x2061, 0xc6f2, 0x6007, 0x0000, 0x6612, 0x7024,
++      0x600e, 0x6226, 0x632a, 0x642e, 0x6532, 0x2c10, 0x080c, 0x164d,
++      0x7007, 0x0002, 0x701b, 0x421d, 0x0005, 0x702c, 0xa005, 0x1170,
++      0x711c, 0x7024, 0x20a0, 0x7728, 0x2031, 0x0000, 0x2061, 0xc6f2,
++      0x6224, 0x6328, 0x642c, 0x6530, 0x0804, 0x417e, 0x7120, 0x810b,
++      0x0804, 0x3154, 0x2029, 0x007e, 0x7924, 0x7a28, 0x7b2c, 0x7c38,
++      0xa184, 0xff00, 0x8007, 0xa0e2, 0x0020, 0x0a04, 0x317c, 0xa502,
++      0x0a04, 0x317c, 0xa184, 0x00ff, 0xa0e2, 0x0020, 0x0a04, 0x317c,
++      0xa502, 0x0a04, 0x317c, 0xa284, 0xff00, 0x8007, 0xa0e2, 0x0020,
++      0x0a04, 0x317c, 0xa502, 0x0a04, 0x317c, 0xa284, 0x00ff, 0xa0e2,
++      0x0020, 0x0a04, 0x317c, 0xa502, 0x0a04, 0x317c, 0xa384, 0xff00,
++      0x8007, 0xa0e2, 0x0020, 0x0a04, 0x317c, 0xa502, 0x0a04, 0x317c,
++      0xa384, 0x00ff, 0xa0e2, 0x0020, 0x0a04, 0x317c, 0xa502, 0x0a04,
++      0x317c, 0xa484, 0xff00, 0x8007, 0xa0e2, 0x0020, 0x0a04, 0x317c,
++      0xa502, 0x0a04, 0x317c, 0xa484, 0x00ff, 0xa0e2, 0x0020, 0x0a04,
++      0x317c, 0xa502, 0x0a04, 0x317c, 0x2061, 0xc900, 0x6102, 0x6206,
++      0x630a, 0x640e, 0x0804, 0x3154, 0x080c, 0x4026, 0x0904, 0x3179,
++      0x2009, 0x0020, 0x7a2c, 0x7b28, 0x7c3c, 0x7d38, 0x080c, 0x4067,
++      0x701b, 0x429b, 0x0005, 0x0126, 0xade8, 0x000d, 0x2001, 0x0138,
++      0x2003, 0x0000, 0x00e6, 0x2071, 0xc96a, 0x700c, 0x7110, 0xa106,
++      0x1de0, 0x00ee, 0x2091, 0x8000, 0x6800, 0xa005, 0x0904, 0x432f,
++      0x6804, 0x2008, 0xa18c, 0xffe0, 0x1904, 0x432f, 0x680c, 0xa005,
++      0x0904, 0x432f, 0xa082, 0xff01, 0x1a04, 0x432f, 0x6810, 0xa082,
++      0x005c, 0x0a04, 0x432f, 0x6824, 0x2008, 0xa082, 0x0008, 0x0a04,
++      0x432f, 0xa182, 0x0400, 0x1a04, 0x432f, 0x080c, 0x7394, 0x6820,
++      0x8000, 0x6822, 0x6944, 0x6820, 0xa102, 0x0a04, 0x432f, 0x6828,
++      0x6944, 0x810c, 0xa102, 0x0a04, 0x432f, 0x6840, 0xa082, 0x000f,
++      0x1a04, 0x432f, 0x00d6, 0x6848, 0xa005, 0x0148, 0x2008, 0x2069,
++      0xc600, 0x68e8, 0xa108, 0x68b0, 0xa102, 0x1208, 0x69ea, 0x00de,
++      0x20a9, 0x0020, 0x2d98, 0x2069, 0xc682, 0x2da0, 0x53a3, 0x00d6,
++      0x080c, 0x15e5, 0x2d00, 0x00de, 0x0904, 0x4346, 0x684e, 0x080c,
++      0x725b, 0x05d8, 0x080c, 0x7158, 0x080c, 0x5695, 0x0580, 0x00c6,
++      0x2061, 0x0100, 0x6104, 0xa18d, 0x8000, 0x6106, 0x610c, 0xa18d,
++      0x0300, 0xa18c, 0xffbf, 0x610e, 0x2001, 0xc8d4, 0x200c, 0xa18d,
++      0x0300, 0xa18c, 0xffbf, 0x2102, 0x6b10, 0x2061, 0xc96a, 0x6316,
++      0x00ce, 0x685f, 0x0000, 0x2001, 0xc696, 0x2003, 0x0000, 0x080c,
++      0x2a95, 0x2001, 0x0138, 0x2102, 0x012e, 0x0804, 0x3154, 0x080c,
++      0x2a95, 0x2001, 0x0138, 0x2102, 0x012e, 0x0804, 0x317c, 0x080c,
++      0x7475, 0x080c, 0x7484, 0x080c, 0x7147, 0x2001, 0xc695, 0x206c,
++      0x080c, 0x1619, 0x2001, 0xc695, 0x2003, 0x0000, 0x2001, 0xc63a,
++      0x2003, 0x0010, 0x080c, 0x2a95, 0x2001, 0x0138, 0x2102, 0x012e,
++      0x0804, 0x3179, 0x2001, 0xc756, 0x2004, 0xa086, 0x0000, 0x0904,
++      0x3179, 0x080c, 0x768f, 0x1904, 0x3179, 0x2001, 0xc8e5, 0x2004,
++      0xa086, 0xaaaa, 0x0138, 0x2001, 0xc635, 0x2004, 0xa084, 0x0028,
++      0x0904, 0x3170, 0x2001, 0xc600, 0x2004, 0xa086, 0x0003, 0x1904,
++      0x3179, 0x7924, 0x810c, 0x7a2c, 0x7b28, 0x7c3c, 0x7d38, 0x080c,
++      0x4026, 0x0904, 0x3179, 0x080c, 0x4067, 0x701b, 0x4380, 0x0005,
++      0x080c, 0x958d, 0x0904, 0x3179, 0x2001, 0xc8d3, 0x2004, 0x601a,
++      0x0016, 0x0026, 0x2001, 0xc61c, 0x2004, 0x8007, 0x6934, 0xa105,
++      0x6836, 0x2001, 0xc61d, 0x2004, 0x8007, 0x683a, 0x002e, 0x001e,
++      0x2d00, 0x6012, 0x601f, 0x0001, 0x2009, 0x0040, 0x080c, 0x9613,
++      0x0804, 0x3154, 0x0804, 0x3179, 0x2001, 0xc756, 0x200c, 0xa18e,
++      0x0000, 0x0904, 0x4402, 0x2001, 0x0101, 0x200c, 0xa18c, 0x7fff,
++      0x2102, 0x2001, 0x0103, 0x200c, 0xa18c, 0xfeff, 0xa18c, 0xfdff,
++      0xa18d, 0x0040, 0x2102, 0x2001, 0xc8d4, 0x200c, 0xa18c, 0xfeff,
++      0xa18c, 0xfdff, 0xa18d, 0x0040, 0x2102, 0x2001, 0x0138, 0x2003,
++      0x0000, 0x0126, 0x2091, 0x8000, 0x080c, 0x24f3, 0x012e, 0x0128,
++      0x20a9, 0x006e, 0x1f04, 0x43d2, 0x0ca0, 0x2001, 0xc756, 0x2003,
++      0x0000, 0x080c, 0x2a95, 0x2001, 0x0138, 0x2102, 0x0126, 0x2091,
++      0x8000, 0x2001, 0xc695, 0x200c, 0x81ff, 0x0138, 0x2168, 0x080c,
++      0x1619, 0x2001, 0xc695, 0x2003, 0x0000, 0x2001, 0xc8d3, 0x200c,
++      0x81ff, 0x0138, 0x2168, 0x080c, 0x1619, 0x2001, 0xc8d3, 0x2003,
++      0x0000, 0x2001, 0xc63a, 0x2003, 0x0010, 0x080c, 0x7475, 0x080c,
++      0x7484, 0x012e, 0x0804, 0x3154, 0x7824, 0x00e6, 0x2071, 0xc682,
++      0x00ee, 0x0804, 0x3154, 0x0006, 0x2001, 0xc653, 0x2004, 0xd0cc,
++      0x000e, 0x0005, 0x0006, 0x2001, 0xc672, 0x2004, 0xd0bc, 0x000e,
++      0x0005, 0x6168, 0x7a24, 0x6300, 0x82ff, 0x1118, 0x7926, 0x0804,
++      0x3154, 0x83ff, 0x1904, 0x317c, 0x2001, 0xfff0, 0xa200, 0x1a04,
++      0x317c, 0x2019, 0xffff, 0x606c, 0xa302, 0xa200, 0x0a04, 0x317c,
++      0x7926, 0x626a, 0x0804, 0x3154, 0x2001, 0xc600, 0x2004, 0xa086,
++      0x0003, 0x1904, 0x3179, 0x7c28, 0x7d24, 0x7e38, 0x7f2c, 0x080c,
++      0x4026, 0x0904, 0x3179, 0x2009, 0x0000, 0x2019, 0x0000, 0x7023,
++      0x0000, 0x702f, 0x0000, 0xad80, 0x0003, 0x7026, 0x20a0, 0xa1e0,
++      0xc77b, 0x2c64, 0x8cff, 0x01b8, 0x6004, 0xa084, 0x00ff, 0xa086,
++      0x0006, 0x0130, 0x6004, 0xa084, 0xff00, 0xa086, 0x0600, 0x1158,
++      0x6014, 0x20a2, 0x94a0, 0x6010, 0x8007, 0xa105, 0x8007, 0x20a2,
++      0x94a0, 0xa398, 0x0002, 0x8108, 0xa182, 0x00ff, 0x0120, 0xa386,
++      0x002a, 0x0148, 0x08e0, 0x83ff, 0x1120, 0x7120, 0x810c, 0x0804,
++      0x3154, 0x702f, 0x0001, 0x711e, 0x7020, 0xa300, 0x7022, 0x2061,
++      0xc6f2, 0x6007, 0x0000, 0x6312, 0x7024, 0x600e, 0x6426, 0x652a,
++      0x662e, 0x6732, 0x2c10, 0x080c, 0x164d, 0x7007, 0x0002, 0x701b,
++      0x4492, 0x0005, 0x702c, 0xa005, 0x1168, 0x711c, 0x7024, 0x20a0,
++      0x2019, 0x0000, 0x2061, 0xc6f2, 0x6424, 0x6528, 0x662c, 0x6730,
++      0x0804, 0x444f, 0x7120, 0x810c, 0x0804, 0x3154, 0x81ff, 0x1904,
++      0x3179, 0x60d4, 0xd0ac, 0x1118, 0xd09c, 0x0904, 0x3179, 0x080c,
++      0x4026, 0x0904, 0x3179, 0x7924, 0x7a2c, 0x7b28, 0x7c3c, 0x7d38,
++      0x080c, 0x4067, 0x701b, 0x44bd, 0x0005, 0x00d6, 0xade8, 0x000d,
++      0x6828, 0xa0be, 0x7000, 0x0148, 0xa0be, 0x7100, 0x0130, 0xa0be,
++      0x7200, 0x0118, 0x00de, 0x0804, 0x317c, 0x6820, 0x6924, 0x080c,
++      0x29c7, 0x1510, 0x080c, 0x52e1, 0x11f8, 0x7122, 0x6612, 0x6516,
++      0x6e18, 0x00c6, 0x080c, 0x4026, 0x01b8, 0x080c, 0x4026, 0x01a0,
++      0x00ce, 0x00de, 0x6837, 0x0000, 0x6838, 0xc0fd, 0x683a, 0x6823,
++      0x0000, 0x6804, 0x2068, 0x080c, 0xadf5, 0x0904, 0x3179, 0x7007,
++      0x0003, 0x701b, 0x44f7, 0x0005, 0x00de, 0x0804, 0x3179, 0x7120,
++      0x080c, 0x2f41, 0x6820, 0xa086, 0x8001, 0x0904, 0x3179, 0x2d00,
++      0x701e, 0x6804, 0xa080, 0x0002, 0x0006, 0x20a9, 0x002a, 0x2098,
++      0x20a0, 0x080c, 0x4ecb, 0x000e, 0xade8, 0x000d, 0x6a08, 0x6b0c,
++      0x6c10, 0x6d14, 0x2061, 0xc6f2, 0x6007, 0x0000, 0x6e00, 0x6f28,
++      0xa7c6, 0x7000, 0x1108, 0x0018, 0xa7c6, 0x7100, 0x1140, 0xa6c2,
++      0x0004, 0x0a04, 0x317c, 0x2009, 0x0004, 0x0804, 0x406a, 0xa7c6,
++      0x7200, 0x1904, 0x317c, 0xa6c2, 0x0054, 0x0a04, 0x317c, 0x600e,
++      0x6013, 0x002a, 0x6226, 0x632a, 0x642e, 0x6532, 0x2c10, 0x080c,
++      0x164d, 0x7007, 0x0002, 0x701b, 0x453e, 0x0005, 0x701c, 0x2068,
++      0x6804, 0xa080, 0x0001, 0x2004, 0xa080, 0x0002, 0x0006, 0x20a9,
++      0x002a, 0x2098, 0x20a0, 0x080c, 0x4ecb, 0x000e, 0x2009, 0x002a,
++      0x2061, 0xc6f2, 0x6224, 0x6328, 0x642c, 0x6530, 0x0804, 0x406a,
++      0x81ff, 0x1904, 0x3179, 0x792c, 0x2001, 0xc8e7, 0x2102, 0x080c,
++      0x403b, 0x0904, 0x317c, 0x080c, 0x5403, 0x0904, 0x3179, 0x0126,
++      0x2091, 0x8000, 0x080c, 0x5535, 0x012e, 0x0804, 0x3154, 0x7824,
++      0xd08c, 0x1118, 0xd084, 0x0904, 0x3bf0, 0x080c, 0x404b, 0x0904,
++      0x317c, 0x00c6, 0x080c, 0x4026, 0x00ce, 0x1120, 0x2009, 0x0002,
++      0x0804, 0x3179, 0x6004, 0xa084, 0x00ff, 0xa086, 0x0006, 0x0128,
++      0xa08e, 0x0004, 0x0110, 0xa08e, 0x0005, 0x15b8, 0x7824, 0xd08c,
++      0x0120, 0x6000, 0xc08c, 0x6002, 0x0030, 0x2001, 0xc653, 0x2004,
++      0xd0b4, 0x0904, 0x3c2c, 0x7824, 0xa084, 0xff00, 0xa08e, 0x7e00,
++      0x0904, 0x3c2c, 0xa08e, 0x7f00, 0x0904, 0x3c2c, 0xa08e, 0x8000,
++      0x0904, 0x3c2c, 0x6000, 0xd08c, 0x1904, 0x3c2c, 0x6837, 0x0000,
++      0x6838, 0xc0fd, 0x683a, 0x080c, 0xae11, 0x1120, 0x2009, 0x0003,
++      0x0804, 0x3179, 0x7007, 0x0003, 0x701b, 0x45bf, 0x0005, 0x080c,
++      0x404b, 0x0904, 0x317c, 0x0804, 0x3c2c, 0x2009, 0xc631, 0x210c,
++      0x81ff, 0x0120, 0x2009, 0x0001, 0x0804, 0x3179, 0x2001, 0xc600,
++      0x2004, 0xa086, 0x0003, 0x0120, 0x2009, 0x0007, 0x0804, 0x3179,
++      0x2001, 0xc653, 0x2004, 0xd0ac, 0x0120, 0x2009, 0x0008, 0x0804,
++      0x3179, 0x609c, 0xd0a4, 0x1118, 0xd0ac, 0x1904, 0x3c2c, 0x6837,
++      0x0000, 0x6833, 0x0000, 0x6838, 0xc0fd, 0x683a, 0x080c, 0xaea2,
++      0x1120, 0x2009, 0x0003, 0x0804, 0x3179, 0x7007, 0x0003, 0x701b,
++      0x45fa, 0x0005, 0x6830, 0xa086, 0x0100, 0x1120, 0x2009, 0x0004,
++      0x0804, 0x3179, 0x080c, 0x404b, 0x0904, 0x317c, 0x0804, 0x458e,
++      0x81ff, 0x2009, 0x0001, 0x1904, 0x3179, 0x6000, 0xa086, 0x0003,
++      0x2009, 0x0007, 0x1904, 0x3179, 0x2001, 0xc653, 0x2004, 0xd0ac,
++      0x2009, 0x0008, 0x1904, 0x3179, 0x080c, 0x404b, 0x0904, 0x317c,
++      0x6004, 0xa084, 0x00ff, 0xa086, 0x0006, 0x2009, 0x0009, 0x1904,
++      0x3179, 0x00c6, 0x080c, 0x4026, 0x00ce, 0x2009, 0x0002, 0x0904,
++      0x3179, 0x6837, 0x0000, 0x6833, 0x0000, 0x6838, 0xc0fd, 0x683a,
++      0x7928, 0xa194, 0xff00, 0xa18c, 0x00ff, 0xa006, 0x82ff, 0x1128,
++      0xc0ed, 0x6952, 0x792c, 0x6956, 0x0048, 0xa28e, 0x0100, 0x1904,
++      0x317c, 0xc0e5, 0x6853, 0x0000, 0x6857, 0x0000, 0x683e, 0x080c,
++      0xb05f, 0x2009, 0x0003, 0x0904, 0x3179, 0x7007, 0x0003, 0x701b,
++      0x465a, 0x0005, 0x6830, 0xa086, 0x0100, 0x2009, 0x0004, 0x0904,
++      0x3179, 0x0804, 0x3154, 0x81ff, 0x2009, 0x0001, 0x1904, 0x3179,
++      0x6000, 0xa086, 0x0003, 0x2009, 0x0007, 0x1904, 0x3179, 0x080c,
++      0x404b, 0x0904, 0x317c, 0x6004, 0xa084, 0x00ff, 0xa086, 0x0006,
++      0x2009, 0x0009, 0x1904, 0x3179, 0x00c6, 0x080c, 0x4026, 0x00ce,
++      0x2009, 0x0002, 0x0904, 0x3179, 0xad80, 0x000f, 0x2009, 0x0008,
++      0x7a2c, 0x7b28, 0x7c3c, 0x7d38, 0x080c, 0x4067, 0x701b, 0x4691,
++      0x0005, 0x00d6, 0xade8, 0x000f, 0x6800, 0xa086, 0x0500, 0x1140,
++      0x6804, 0xa005, 0x1128, 0x6808, 0xa084, 0xff00, 0x1108, 0x0018,
++      0x00de, 0x1904, 0x317c, 0x00de, 0x6837, 0x0000, 0x6833, 0x0000,
++      0x6838, 0xc0fd, 0x683a, 0x00c6, 0x080c, 0x404b, 0x1118, 0x00ce,
++      0x0804, 0x317c, 0x080c, 0xb0ae, 0x2009, 0x0003, 0x00ce, 0x0904,
++      0x3179, 0x7007, 0x0003, 0x701b, 0x46be, 0x0005, 0x6830, 0xa086,
++      0x0100, 0x2009, 0x0004, 0x0904, 0x3179, 0x0804, 0x3154, 0x81ff,
++      0x0120, 0x2009, 0x0001, 0x0804, 0x3179, 0x6000, 0xa086, 0x0003,
++      0x0120, 0x2009, 0x0007, 0x0804, 0x3179, 0x7e24, 0x860f, 0xa18c,
++      0x00ff, 0xa6b4, 0x00ff, 0x080c, 0x533d, 0x1904, 0x317c, 0xa186,
++      0x007f, 0x0150, 0x6004, 0xa084, 0x00ff, 0xa086, 0x0006, 0x0120,
++      0x2009, 0x0009, 0x0804, 0x3179, 0x00c6, 0x080c, 0x4026, 0x00ce,
++      0x1120, 0x2009, 0x0002, 0x0804, 0x3179, 0x6837, 0x0000, 0x6838,
++      0xc0fd, 0x683a, 0x2001, 0x0100, 0x8007, 0x680a, 0x080c, 0xae2c,
++      0x1120, 0x2009, 0x0003, 0x0804, 0x3179, 0x7007, 0x0003, 0x701b,
++      0x470a, 0x0005, 0x6808, 0x8007, 0xa086, 0x0100, 0x1120, 0x2009,
++      0x0004, 0x0804, 0x3179, 0x68b0, 0x6836, 0x6810, 0x8007, 0xa084,
++      0x00ff, 0x800c, 0x6814, 0x8007, 0xa084, 0x00ff, 0x8004, 0xa080,
++      0x0002, 0xa108, 0xad80, 0x0004, 0x7a2c, 0x7b28, 0x7c3c, 0x7d38,
++      0x0804, 0x406a, 0x080c, 0x4026, 0x1120, 0x2009, 0x0002, 0x0804,
++      0x3179, 0x7924, 0xa194, 0xff00, 0xa18c, 0x00ff, 0x8217, 0x82ff,
++      0x0110, 0x0804, 0x317c, 0x2009, 0x001a, 0x7a2c, 0x7b28, 0x7c3c,
++      0x7d38, 0x080c, 0x4067, 0x701b, 0x4746, 0x0005, 0x2001, 0xc62a,
++      0x2003, 0x0001, 0xad80, 0x000d, 0x2098, 0x20a9, 0x001a, 0x20a1,
++      0xc90d, 0x53a3, 0x0804, 0x3154, 0x080c, 0x4026, 0x1120, 0x2009,
++      0x0002, 0x0804, 0x3179, 0x7924, 0xa194, 0xff00, 0xa18c, 0x00ff,
++      0x8217, 0x82ff, 0x0110, 0x0804, 0x317c, 0x2099, 0xc90d, 0x20a0,
++      0x20a9, 0x001a, 0x53a3, 0x2009, 0x001a, 0x7a2c, 0x7b28, 0x7c3c,
++      0x7d38, 0x0804, 0x406a, 0x7824, 0xa08a, 0x1000, 0x1a04, 0x317c,
++      0x0126, 0x2091, 0x8000, 0x8003, 0x800b, 0x810b, 0xa108, 0x00c6,
++      0x2061, 0xc93a, 0x6142, 0x00ce, 0x012e, 0x0804, 0x3154, 0x00c6,
++      0x080c, 0x5f22, 0x1188, 0x2001, 0xc8e6, 0x2003, 0x0001, 0x2001,
++      0xc600, 0x2003, 0x0001, 0xa085, 0x0001, 0x080c, 0x5f66, 0x080c,
++      0x5e5a, 0x080c, 0x1519, 0x0038, 0x2061, 0xc600, 0x6030, 0xc09d,
++      0x6032, 0x080c, 0x4e5b, 0x00ce, 0x0005, 0x0126, 0x2091, 0x8000,
++      0x00c6, 0x2061, 0xc93a, 0x7924, 0x6152, 0x614e, 0x6057, 0x0000,
++      0x604b, 0x0009, 0x7838, 0x606a, 0x783c, 0x6066, 0x7828, 0x6062,
++      0x782c, 0x605e, 0x2061, 0xc8e8, 0x2001, 0xc94f, 0x600e, 0x6013,
++      0x0001, 0x6017, 0x0002, 0x6007, 0x0000, 0x6037, 0x0000, 0x00ce,
++      0x012e, 0x0804, 0x3154, 0x0126, 0x00c6, 0x00e6, 0x2061, 0x0100,
++      0x2071, 0xc600, 0x6044, 0xd0a4, 0x11b0, 0xd084, 0x0118, 0x080c,
++      0x4942, 0x0068, 0xd08c, 0x0118, 0x080c, 0x4863, 0x0040, 0xd094,
++      0x0118, 0x080c, 0x4834, 0x0018, 0xd09c, 0x0108, 0x0061, 0x00ee,
++      0x00ce, 0x012e, 0x0005, 0x0016, 0x6128, 0xd19c, 0x1110, 0xc19d,
++      0x612a, 0x001e, 0x0ca0, 0x624c, 0xa286, 0xf0f0, 0x1150, 0x6048,
++      0xa086, 0xf0f0, 0x0130, 0x624a, 0x6043, 0x0090, 0x6043, 0x0010,
++      0x0490, 0xa294, 0xff00, 0xa296, 0xf700, 0x0178, 0x7134, 0xd1a4,
++      0x1160, 0x6240, 0xa295, 0x0100, 0x6242, 0xa294, 0x0010, 0x0128,
++      0x2009, 0x00f7, 0x080c, 0x4eeb, 0x00f0, 0x6040, 0xa084, 0x0010,
++      0xa085, 0x0140, 0x6042, 0x6043, 0x0000, 0x707b, 0x0000, 0x7097,
++      0x0001, 0x70bb, 0x0000, 0x70d7, 0x0000, 0x2009, 0xcdc0, 0x200b,
++      0x0000, 0x708b, 0x0000, 0x707f, 0x000a, 0x2009, 0x000a, 0x2011,
++      0x4e11, 0x080c, 0x7036, 0x0005, 0x0156, 0x2001, 0xc674, 0x2004,
++      0xd08c, 0x0110, 0x7053, 0xffff, 0x707c, 0xa005, 0x1510, 0x2011,
++      0x4e11, 0x080c, 0x6fad, 0x6040, 0xa094, 0x0010, 0xa285, 0x0020,
++      0x6042, 0x20a9, 0x00c8, 0x6044, 0xd08c, 0x1168, 0x1f04, 0x484b,
++      0x6242, 0x708f, 0x0000, 0x6040, 0xa094, 0x0010, 0xa285, 0x0080,
++      0x6042, 0x6242, 0x0030, 0x6242, 0x708f, 0x0000, 0x7083, 0x0000,
++      0x0000, 0x015e, 0x0005, 0x7080, 0xa08a, 0x0003, 0x1210, 0x0023,
++      0x0010, 0x080c, 0x1519, 0x0005, 0x486f, 0x48bf, 0x4941, 0x00f6,
++      0x7083, 0x0001, 0x20e1, 0xa000, 0xe000, 0x20e1, 0x8700, 0x080c,
++      0x25bb, 0x20e1, 0x9080, 0x20e1, 0x4000, 0x2079, 0xcc00, 0x207b,
++      0x2200, 0x7807, 0x00ef, 0x780b, 0x0000, 0x780f, 0x00ef, 0x7813,
++      0x0138, 0x7817, 0x0000, 0x781b, 0x0000, 0x781f, 0x0000, 0x7823,
++      0xffff, 0x7827, 0xffff, 0x782b, 0x0000, 0x782f, 0x0000, 0x2079,
++      0xcc0c, 0x207b, 0x1101, 0x7807, 0x0000, 0x2099, 0xc605, 0x20a1,
++      0xcc0e, 0x20a9, 0x0004, 0x53a3, 0x2079, 0xcc12, 0x207b, 0x0000,
++      0x7807, 0x0000, 0x2099, 0xcc00, 0x20a1, 0x020b, 0x20a9, 0x0014,
++      0x53a6, 0x60c3, 0x000c, 0x600f, 0x0000, 0x080c, 0x4e42, 0x00fe,
++      0x7087, 0x0000, 0x6043, 0x0008, 0x6043, 0x0000, 0x0005, 0x00d6,
++      0x7084, 0x7087, 0x0000, 0xa025, 0x0904, 0x4929, 0x6020, 0xd0b4,
++      0x1904, 0x4927, 0x7194, 0x81ff, 0x0904, 0x4917, 0xa486, 0x000c,
++      0x1904, 0x4922, 0xa480, 0x0018, 0x8004, 0x20a8, 0x2011, 0xcc80,
++      0x2019, 0xcc00, 0x220c, 0x2304, 0xa106, 0x11b8, 0x8210, 0x8318,
++      0x1f04, 0x48da, 0x6043, 0x0004, 0x608b, 0xbc94, 0x608f, 0xf0f0,
++      0x6043, 0x0006, 0x7083, 0x0002, 0x708f, 0x0002, 0x2009, 0x07d0,
++      0x2011, 0x4e18, 0x080c, 0x7036, 0x0490, 0x2069, 0xcc80, 0x6930,
++      0xa18e, 0x1101, 0x1538, 0x6834, 0xa005, 0x1520, 0x6900, 0xa18c,
++      0x00ff, 0x1118, 0x6804, 0xa005, 0x0190, 0x2011, 0xcc8e, 0x2019,
++      0xc605, 0x20a9, 0x0004, 0x220c, 0x2304, 0xa102, 0x0230, 0x1190,
++      0x8210, 0x8318, 0x1f04, 0x490b, 0x0068, 0x7097, 0x0000, 0x20e1,
++      0x9080, 0x20e1, 0x4000, 0x2099, 0xcc80, 0x20a1, 0x020b, 0x20a9,
++      0x0014, 0x53a6, 0x6043, 0x0008, 0x6043, 0x0000, 0x0010, 0x00de,
++      0x0005, 0x6040, 0xa085, 0x0100, 0x6042, 0x6020, 0xd0b4, 0x1db8,
++      0x60c3, 0x000c, 0x2011, 0xc931, 0x2013, 0x0000, 0x7087, 0x0000,
++      0x20e1, 0x9080, 0x60a3, 0x0056, 0x60a7, 0x9575, 0x080c, 0x8bec,
++      0x0c30, 0x0005, 0x708c, 0xa08a, 0x001d, 0x1210, 0x0023, 0x0010,
++      0x080c, 0x1519, 0x0005, 0x4975, 0x4984, 0x49ac, 0x49c5, 0x49e9,
++      0x4a11, 0x4a35, 0x4a66, 0x4a8a, 0x4ab2, 0x4ae9, 0x4b11, 0x4b2d,
++      0x4b43, 0x4b63, 0x4b76, 0x4b7e, 0x4bae, 0x4bd2, 0x4bfa, 0x4c1e,
++      0x4c4f, 0x4c8c, 0x4cbb, 0x4cd7, 0x4d16, 0x4d36, 0x4d4f, 0x4d50,
++      0x00c6, 0x2061, 0xc600, 0x6003, 0x0007, 0x2061, 0x0100, 0x6004,
++      0xa084, 0xfff9, 0x6006, 0x00ce, 0x0005, 0x608b, 0xbc94, 0x608f,
++      0xf0f0, 0x6043, 0x0002, 0x708f, 0x0001, 0x2009, 0x07d0, 0x2011,
++      0x4e18, 0x080c, 0x7036, 0x0005, 0x00f6, 0x7084, 0xa086, 0x0014,
++      0x1508, 0x6043, 0x0000, 0x6020, 0xd0b4, 0x11e0, 0x2079, 0xcc80,
++      0x7a30, 0xa296, 0x1102, 0x11a0, 0x7834, 0xa005, 0x1188, 0x7a38,
++      0xd2fc, 0x0128, 0x70b8, 0xa005, 0x1110, 0x70bb, 0x0001, 0x2011,
++      0x4e18, 0x080c, 0x6fad, 0x708f, 0x0010, 0x080c, 0x4b7e, 0x0010,
++      0x080c, 0x4e5b, 0x00fe, 0x0005, 0x708f, 0x0003, 0x6043, 0x0004,
++      0x2011, 0x4e18, 0x080c, 0x6fad, 0x080c, 0x4ed3, 0x20a3, 0x1102,
++      0x20a3, 0x0000, 0x20a9, 0x000a, 0x20a3, 0x0000, 0x1f04, 0x49bc,
++      0x60c3, 0x0014, 0x080c, 0x4e42, 0x0005, 0x00f6, 0x7084, 0xa005,
++      0x01f0, 0x2011, 0x4e18, 0x080c, 0x6fad, 0xa086, 0x0014, 0x11a8,
++      0x2079, 0xcc80, 0x7a30, 0xa296, 0x1102, 0x1178, 0x7834, 0xa005,
++      0x1160, 0x7a38, 0xd2fc, 0x0128, 0x70b8, 0xa005, 0x1110, 0x70bb,
++      0x0001, 0x708f, 0x0004, 0x0029, 0x0010, 0x080c, 0x4e5b, 0x00fe,
++      0x0005, 0x708f, 0x0005, 0x080c, 0x4ed3, 0x20a3, 0x1103, 0x20a3,
++      0x0000, 0x3430, 0x2011, 0xcc8e, 0x080c, 0x4f24, 0x1160, 0x7078,
++      0xa005, 0x1148, 0x7150, 0xa186, 0xffff, 0x0128, 0x080c, 0x4ddc,
++      0x0110, 0x080c, 0x4f02, 0x20a9, 0x0008, 0x2298, 0x26a0, 0x53a6,
++      0x20a3, 0x0000, 0x20a3, 0x0000, 0x60c3, 0x0014, 0x080c, 0x4e42,
++      0x0005, 0x00f6, 0x7084, 0xa005, 0x01f0, 0x2011, 0x4e18, 0x080c,
++      0x6fad, 0xa086, 0x0014, 0x11a8, 0x2079, 0xcc80, 0x7a30, 0xa296,
++      0x1103, 0x1178, 0x7834, 0xa005, 0x1160, 0x7a38, 0xd2fc, 0x0128,
++      0x70b8, 0xa005, 0x1110, 0x70bb, 0x0001, 0x708f, 0x0006, 0x0029,
++      0x0010, 0x080c, 0x4e5b, 0x00fe, 0x0005, 0x708f, 0x0007, 0x080c,
++      0x4ed3, 0x20a3, 0x1104, 0x20a3, 0x0000, 0x3430, 0x2011, 0xcc8e,
++      0x080c, 0x4f24, 0x11a8, 0x7078, 0xa005, 0x1190, 0x7158, 0xa186,
++      0xffff, 0x0170, 0xa180, 0x2f6e, 0x200d, 0xa18c, 0xff00, 0x810f,
++      0x080c, 0x4ddc, 0x0128, 0x080c, 0x4412, 0x0110, 0x080c, 0x2a11,
++      0x20a9, 0x0008, 0x2298, 0x26a0, 0x53a6, 0x20a3, 0x0000, 0x20a3,
++      0x0000, 0x60c3, 0x0014, 0x080c, 0x4e42, 0x0005, 0x00f6, 0x7084,
++      0xa005, 0x01f0, 0x2011, 0x4e18, 0x080c, 0x6fad, 0xa086, 0x0014,
++      0x11a8, 0x2079, 0xcc80, 0x7a30, 0xa296, 0x1104, 0x1178, 0x7834,
++      0xa005, 0x1160, 0x7a38, 0xd2fc, 0x0128, 0x70b8, 0xa005, 0x1110,
++      0x70bb, 0x0001, 0x708f, 0x0008, 0x0029, 0x0010, 0x080c, 0x4e5b,
++      0x00fe, 0x0005, 0x708f, 0x0009, 0x080c, 0x4ed3, 0x20a3, 0x1105,
++      0x20a3, 0x0100, 0x3430, 0x080c, 0x4f24, 0x1150, 0x7078, 0xa005,
++      0x1138, 0x080c, 0x4d51, 0x1170, 0xa085, 0x0001, 0x080c, 0x2a11,
++      0x20a9, 0x0008, 0x2099, 0xcc8e, 0x26a0, 0x53a6, 0x20a3, 0x0000,
++      0x20a3, 0x0000, 0x60c3, 0x0014, 0x080c, 0x4e42, 0x0010, 0x080c,
++      0x4968, 0x0005, 0x00f6, 0x7084, 0xa005, 0x0588, 0x2011, 0x4e18,
++      0x080c, 0x6fad, 0xa086, 0x0014, 0x1540, 0x2079, 0xcc80, 0x7a30,
++      0xa296, 0x1105, 0x1510, 0x7834, 0x2011, 0x0100, 0xa21e, 0x1160,
++      0x7a38, 0xd2fc, 0x0128, 0x70b8, 0xa005, 0x1110, 0x70bb, 0x0001,
++      0x708f, 0x000a, 0x00b1, 0x0098, 0xa005, 0x1178, 0x7a38, 0xd2fc,
++      0x0128, 0x70b8, 0xa005, 0x1110, 0x70bb, 0x0001, 0x708b, 0x0000,
++      0x708f, 0x000e, 0x080c, 0x4b63, 0x0010, 0x080c, 0x4e5b, 0x00fe,
++      0x0005, 0x708f, 0x000b, 0x2011, 0xcc0e, 0x22a0, 0x20a9, 0x0040,
++      0x2019, 0xffff, 0x43a4, 0x20a9, 0x0002, 0x2009, 0x0000, 0x41a4,
++      0x080c, 0x4ed3, 0x20a3, 0x1106, 0x20a3, 0x0000, 0x080c, 0x4f24,
++      0x0118, 0x2013, 0x0000, 0x0020, 0x7054, 0xa085, 0x0100, 0x2012,
++      0x2298, 0x20a9, 0x0042, 0x53a6, 0x60c3, 0x0084, 0x080c, 0x4e42,
++      0x0005, 0x00f6, 0x7084, 0xa005, 0x01b0, 0x2011, 0x4e18, 0x080c,
++      0x6fad, 0xa086, 0x0084, 0x1168, 0x2079, 0xcc80, 0x7a30, 0xa296,
++      0x1106, 0x1138, 0x7834, 0xa005, 0x1120, 0x708f, 0x000c, 0x0029,
++      0x0010, 0x080c, 0x4e5b, 0x00fe, 0x0005, 0x708f, 0x000d, 0x080c,
++      0x4ed3, 0x20a3, 0x1107, 0x20a3, 0x0000, 0x2099, 0xcc8e, 0x20a9,
++      0x0040, 0x53a6, 0x20a3, 0x0000, 0x20a3, 0x0000, 0x60c3, 0x0084,
++      0x080c, 0x4e42, 0x0005, 0x00f6, 0x7084, 0xa005, 0x01d0, 0x2011,
++      0x4e18, 0x080c, 0x6fad, 0xa086, 0x0084, 0x1188, 0x2079, 0xcc80,
++      0x7a30, 0xa296, 0x1107, 0x1158, 0x7834, 0xa005, 0x1140, 0x708b,
++      0x0001, 0x080c, 0x4ec5, 0x708f, 0x000e, 0x0029, 0x0010, 0x080c,
++      0x4e5b, 0x00fe, 0x0005, 0x708f, 0x000f, 0x7087, 0x0000, 0x608b,
++      0xbc85, 0x608f, 0xb5b5, 0x6043, 0x0005, 0x6043, 0x0004, 0x2009,
++      0x07d0, 0x2011, 0x4e18, 0x080c, 0x6fa1, 0x0005, 0x7084, 0xa005,
++      0x0120, 0x2011, 0x4e18, 0x080c, 0x6fad, 0x0005, 0x708f, 0x0011,
++      0x080c, 0x4f24, 0x11a0, 0x7170, 0x81ff, 0x0188, 0x2009, 0x0000,
++      0x7074, 0xa084, 0x00ff, 0x080c, 0x29c7, 0xa186, 0x007e, 0x0138,
++      0xa186, 0x0080, 0x0120, 0x2011, 0xcc8e, 0x080c, 0x4ddc, 0x20e1,
++      0x9080, 0x20e1, 0x4000, 0x2099, 0xcc80, 0x20a1, 0x020b, 0x7484,
++      0xa480, 0x0018, 0xa080, 0x0007, 0xa084, 0x03f8, 0x8004, 0x20a8,
++      0x53a6, 0x60c3, 0x0014, 0x080c, 0x4e42, 0x0005, 0x00f6, 0x7084,
++      0xa005, 0x01f0, 0x2011, 0x4e18, 0x080c, 0x6fad, 0xa086, 0x0014,
++      0x11a8, 0x2079, 0xcc80, 0x7a30, 0xa296, 0x1103, 0x1178, 0x7834,
++      0xa005, 0x1160, 0x7a38, 0xd2fc, 0x0128, 0x70b8, 0xa005, 0x1110,
++      0x70bb, 0x0001, 0x708f, 0x0012, 0x0029, 0x0010, 0x080c, 0x4e5b,
++      0x00fe, 0x0005, 0x708f, 0x0013, 0x080c, 0x4edf, 0x20a3, 0x1103,
++      0x20a3, 0x0000, 0x3430, 0x2011, 0xcc8e, 0x080c, 0x4f24, 0x1160,
++      0x7078, 0xa005, 0x1148, 0x7150, 0xa186, 0xffff, 0x0128, 0x080c,
++      0x4ddc, 0x0110, 0x080c, 0x4f02, 0x20a9, 0x0008, 0x2298, 0x26a0,
++      0x53a6, 0x20a3, 0x0000, 0x20a3, 0x0000, 0x60c3, 0x0014, 0x080c,
++      0x4e42, 0x0005, 0x00f6, 0x7084, 0xa005, 0x01f0, 0x2011, 0x4e18,
++      0x080c, 0x6fad, 0xa086, 0x0014, 0x11a8, 0x2079, 0xcc80, 0x7a30,
++      0xa296, 0x1104, 0x1178, 0x7834, 0xa005, 0x1160, 0x7a38, 0xd2fc,
++      0x0128, 0x70b8, 0xa005, 0x1110, 0x70bb, 0x0001, 0x708f, 0x0014,
++      0x0029, 0x0010, 0x080c, 0x4e5b, 0x00fe, 0x0005, 0x708f, 0x0015,
++      0x080c, 0x4edf, 0x20a3, 0x1104, 0x20a3, 0x0000, 0x3430, 0x2011,
++      0xcc8e, 0x080c, 0x4f24, 0x11a8, 0x7078, 0xa005, 0x1190, 0x7158,
++      0xa186, 0xffff, 0x0170, 0xa180, 0x2f6e, 0x200d, 0xa18c, 0xff00,
++      0x810f, 0x080c, 0x4ddc, 0x0128, 0x080c, 0x4412, 0x0110, 0x080c,
++      0x2a11, 0x20a9, 0x0008, 0x2298, 0x26a0, 0x53a6, 0x20a3, 0x0000,
++      0x20a3, 0x0000, 0x60c3, 0x0014, 0x080c, 0x4e42, 0x0005, 0x00f6,
++      0x7084, 0xa005, 0x05b8, 0x2011, 0x4e18, 0x080c, 0x6fad, 0xa086,
++      0x0014, 0x1570, 0x2079, 0xcc80, 0x7a30, 0xa296, 0x1105, 0x1540,
++      0x7834, 0x2011, 0x0100, 0xa21e, 0x1148, 0x7a38, 0xd2fc, 0x0128,
++      0x70b8, 0xa005, 0x1110, 0x70bb, 0x0001, 0x0060, 0xa005, 0x11c0,
++      0x7a38, 0xd2fc, 0x0128, 0x70b8, 0xa005, 0x1110, 0x70bb, 0x0001,
++      0x708b, 0x0000, 0x7a38, 0xd2f4, 0x0138, 0x2001, 0xc674, 0x2004,
++      0xd0a4, 0x1110, 0x70d7, 0x0008, 0x708f, 0x0016, 0x0029, 0x0010,
++      0x080c, 0x4e5b, 0x00fe, 0x0005, 0x20e1, 0x9080, 0x20e1, 0x4000,
++      0x2099, 0xcc80, 0x20a1, 0x020b, 0x20a9, 0x000e, 0x53a6, 0x3430,
++      0x2011, 0xcc8e, 0x708f, 0x0017, 0x080c, 0x4f24, 0x1150, 0x7078,
++      0xa005, 0x1138, 0x080c, 0x4d51, 0x1170, 0xa085, 0x0001, 0x080c,
++      0x2a11, 0x20a9, 0x0008, 0x2099, 0xcc8e, 0x26a0, 0x53a6, 0x20a3,
++      0x0000, 0x20a3, 0x0000, 0x60c3, 0x0014, 0x080c, 0x4e42, 0x0010,
++      0x080c, 0x4968, 0x0005, 0x00f6, 0x7084, 0xa005, 0x01b0, 0x2011,
++      0x4e18, 0x080c, 0x6fad, 0xa086, 0x0084, 0x1168, 0x2079, 0xcc80,
++      0x7a30, 0xa296, 0x1106, 0x1138, 0x7834, 0xa005, 0x1120, 0x708f,
++      0x0018, 0x0029, 0x0010, 0x080c, 0x4e5b, 0x00fe, 0x0005, 0x708f,
++      0x0019, 0x080c, 0x4edf, 0x20a3, 0x1106, 0x20a3, 0x0000, 0x3430,
++      0x2099, 0xcc8e, 0x2039, 0xcc0e, 0x27a0, 0x20a9, 0x0040, 0x53a3,
++      0x080c, 0x4f24, 0x11e8, 0x2728, 0x2514, 0x8207, 0xa084, 0x00ff,
++      0x8000, 0x2018, 0xa294, 0x00ff, 0x8007, 0xa205, 0x202a, 0x7054,
++      0x2310, 0x8214, 0xa2a0, 0xcc0e, 0x2414, 0xa38c, 0x0001, 0x0118,
++      0xa294, 0xff00, 0x0018, 0xa294, 0x00ff, 0x8007, 0xa215, 0x2222,
++      0x2798, 0x26a0, 0x20a9, 0x0040, 0x53a6, 0x20a3, 0x0000, 0x20a3,
++      0x0000, 0x60c3, 0x0084, 0x080c, 0x4e42, 0x0005, 0x00f6, 0x7084,
++      0xa005, 0x01d0, 0x2011, 0x4e18, 0x080c, 0x6fad, 0xa086, 0x0084,
++      0x1188, 0x2079, 0xcc80, 0x7a30, 0xa296, 0x1107, 0x1158, 0x7834,
++      0xa005, 0x1140, 0x708b, 0x0001, 0x080c, 0x4ec5, 0x708f, 0x001a,
++      0x0029, 0x0010, 0x080c, 0x4e5b, 0x00fe, 0x0005, 0x708f, 0x001b,
++      0x20e1, 0x9080, 0x20e1, 0x4000, 0x2099, 0xcc80, 0x20a1, 0x020b,
++      0x7484, 0xa480, 0x0018, 0xa080, 0x0007, 0xa084, 0x03f8, 0x8004,
++      0x20a8, 0x53a6, 0x60c3, 0x0084, 0x080c, 0x4e42, 0x0005, 0x0005,
++      0x0005, 0x0086, 0x0096, 0x2029, 0xc653, 0x252c, 0x20a9, 0x0008,
++      0x2041, 0xcc0e, 0x28a0, 0x2099, 0xcc8e, 0x53a3, 0x20a9, 0x0008,
++      0x2011, 0x0007, 0xd5d4, 0x0110, 0x2011, 0x0000, 0x2800, 0xa200,
++      0x200c, 0xa1a6, 0xffff, 0x1148, 0xd5d4, 0x0110, 0x8210, 0x0008,
++      0x8211, 0x1f04, 0x4d66, 0x0804, 0x4dd4, 0x82ff, 0x1160, 0xd5d4,
++      0x0120, 0xa1a6, 0x3fff, 0x0d90, 0x0020, 0xa1a6, 0x3fff, 0x0904,
++      0x4dd4, 0xa18d, 0xc000, 0x20a9, 0x0010, 0x2019, 0x0001, 0xd5d4,
++      0x0110, 0x2019, 0x0010, 0x2120, 0xd5d4, 0x0110, 0x8423, 0x0008,
++      0x8424, 0x1240, 0xd5d4, 0x0110, 0x8319, 0x0008, 0x8318, 0x1f04,
++      0x4d8c, 0x04d0, 0x23a8, 0x2021, 0x0001, 0x8426, 0x8425, 0x1f04,
++      0x4d9e, 0x2328, 0x8529, 0xa2be, 0x0007, 0x0158, 0x0006, 0x2039,
++      0x0007, 0x2200, 0xa73a, 0x000e, 0x27a8, 0xa5a8, 0x0010, 0x1f04,
++      0x4dad, 0x7552, 0xa5c8, 0x2f6e, 0x292d, 0xa5ac, 0x00ff, 0x7576,
++      0x6532, 0x6536, 0x0016, 0x2508, 0x080c, 0x29f1, 0x001e, 0x60e7,
++      0x0000, 0x65ea, 0x2018, 0x2304, 0xa405, 0x201a, 0x707b, 0x0001,
++      0x26a0, 0x2898, 0x20a9, 0x0008, 0x53a6, 0x20a3, 0x0000, 0x20a3,
++      0x0000, 0xa085, 0x0001, 0x0028, 0xa006, 0x0018, 0xa006, 0x080c,
++      0x1519, 0x009e, 0x008e, 0x0005, 0x2118, 0x2021, 0x0000, 0x2001,
++      0x0007, 0xa39a, 0x0010, 0x0218, 0x8420, 0x8001, 0x0cd0, 0x2118,
++      0x84ff, 0x0120, 0xa39a, 0x0010, 0x8421, 0x1de0, 0x2021, 0x0001,
++      0x83ff, 0x0118, 0x8423, 0x8319, 0x1de8, 0xa238, 0x2704, 0xa42c,
++      0x11b8, 0xa405, 0x203a, 0x7152, 0xa1a0, 0x2f6e, 0x242d, 0xa5ac,
++      0x00ff, 0x7576, 0x6532, 0x6536, 0x0016, 0x2508, 0x080c, 0x29f1,
++      0x001e, 0x60e7, 0x0000, 0x65ea, 0x707b, 0x0001, 0xa084, 0x0000,
++      0x0005, 0x00e6, 0x2071, 0xc600, 0x707f, 0x0000, 0x00ee, 0x0005,
++      0x00e6, 0x00f6, 0x2079, 0x0100, 0x2071, 0x0140, 0x080c, 0x8bf5,
++      0x7004, 0xa084, 0x4000, 0x0120, 0x7003, 0x1000, 0x7003, 0x0000,
++      0x0126, 0x2091, 0x8000, 0x2071, 0xc623, 0x2073, 0x0000, 0x7840,
++      0x0026, 0x0016, 0x2009, 0x00f7, 0x080c, 0x4eeb, 0x001e, 0xa094,
++      0x0010, 0xa285, 0x0080, 0x7842, 0x7a42, 0x002e, 0x012e, 0x00fe,
++      0x00ee, 0x0005, 0x0126, 0x2091, 0x8000, 0x2011, 0xc931, 0x2013,
++      0x0000, 0x7087, 0x0000, 0x012e, 0x20e1, 0x9080, 0x60a3, 0x0056,
++      0x60a7, 0x9575, 0x080c, 0x8bec, 0x2009, 0x07d0, 0x2011, 0x4e18,
++      0x080c, 0x7036, 0x0005, 0x0016, 0x0026, 0x00c6, 0x0126, 0x2091,
++      0x8000, 0x2011, 0x0003, 0x080c, 0x8f0e, 0x2011, 0x0002, 0x080c,
++      0x8f18, 0x080c, 0x8dee, 0x0036, 0x2019, 0x0000, 0x080c, 0x8e79,
++      0x003e, 0x2009, 0x00f7, 0x080c, 0x4eeb, 0x2061, 0xc93a, 0x601b,
++      0x0000, 0x601f, 0x0000, 0x2061, 0xc600, 0x6003, 0x0001, 0x2061,
++      0x0100, 0x6043, 0x0090, 0x6043, 0x0010, 0x2009, 0x002d, 0x2011,
++      0x4e90, 0x080c, 0x6fa1, 0x012e, 0x00ce, 0x002e, 0x001e, 0x0005,
++      0x00e6, 0x0006, 0x0126, 0x2091, 0x8000, 0x2071, 0x0100, 0x080c,
++      0x8bf5, 0x2071, 0x0140, 0x7004, 0xa084, 0x4000, 0x0120, 0x7003,
++      0x1000, 0x7003, 0x0000, 0x080c, 0x5f2a, 0x01a8, 0x080c, 0x5f48,
++      0x1190, 0x2001, 0xc8e5, 0x2003, 0xaaaa, 0x0016, 0x080c, 0x2a95,
++      0x2001, 0xc8d6, 0x2102, 0x001e, 0x2001, 0xc8e6, 0x2003, 0x0000,
++      0x080c, 0x5e5a, 0x0030, 0x2001, 0x0001, 0x080c, 0x296d, 0x080c,
++      0x4e5b, 0x012e, 0x000e, 0x00ee, 0x0005, 0x20a9, 0x0040, 0x20a1,
++      0xcdc0, 0x2099, 0xcc8e, 0x3304, 0x8007, 0x20a2, 0x9398, 0x94a0,
++      0x1f04, 0x4ecb, 0x0005, 0x20e1, 0x9080, 0x20e1, 0x4000, 0x2099,
++      0xcc00, 0x20a1, 0x020b, 0x20a9, 0x000c, 0x53a6, 0x0005, 0x20e1,
++      0x9080, 0x20e1, 0x4000, 0x2099, 0xcc80, 0x20a1, 0x020b, 0x20a9,
++      0x000c, 0x53a6, 0x0005, 0x00c6, 0x0006, 0x2061, 0x0100, 0x810f,
++      0x2001, 0xc631, 0x2004, 0xa005, 0x1138, 0x2001, 0xc615, 0x2004,
++      0xa084, 0x00ff, 0xa105, 0x0010, 0xa185, 0x00f7, 0x604a, 0x000e,
++      0x00ce, 0x0005, 0x0016, 0x0046, 0x2001, 0xc653, 0x2004, 0xd0a4,
++      0x0158, 0xa006, 0x2020, 0x2009, 0x002a, 0x080c, 0xc190, 0x2001,
++      0xc60c, 0x200c, 0xc195, 0x2102, 0x2019, 0x002a, 0x2009, 0x0000,
++      0x080c, 0x2e19, 0x004e, 0x001e, 0x0005, 0x080c, 0x4e5b, 0x708f,
++      0x0000, 0x7087, 0x0000, 0x0005, 0x0006, 0x2001, 0xc60c, 0x2004,
++      0xd09c, 0x0100, 0x000e, 0x0005, 0x0006, 0x0016, 0x0126, 0x2091,
++      0x8000, 0x2001, 0x0101, 0x200c, 0xa18d, 0x0006, 0x2102, 0x012e,
++      0x001e, 0x000e, 0x0005, 0x0156, 0x20a9, 0x00ff, 0x2009, 0xc77b,
++      0xa006, 0x200a, 0x8108, 0x1f04, 0x4f41, 0x015e, 0x0005, 0x00d6,
++      0x0036, 0x0156, 0x0136, 0x0146, 0x2069, 0xc652, 0xa006, 0x6002,
++      0x6007, 0x0707, 0x600a, 0x600e, 0x6012, 0xa198, 0x2f6e, 0x231d,
++      0xa39c, 0x00ff, 0x6316, 0x20a9, 0x0004, 0xac98, 0x0006, 0x23a0,
++      0x40a4, 0x20a9, 0x0004, 0xac98, 0x000a, 0x23a0, 0x40a4, 0x603e,
++      0x6042, 0x604e, 0x6052, 0x6056, 0x605a, 0x605e, 0x6062, 0x6066,
++      0x606a, 0x606e, 0x6072, 0x6076, 0x607a, 0x607e, 0x6082, 0x6086,
++      0x608a, 0x608e, 0x6092, 0x6096, 0x609a, 0x609e, 0x60be, 0x61a2,
++      0x00d6, 0x60a4, 0xa06d, 0x0110, 0x080c, 0x1619, 0x60a7, 0x0000,
++      0x60a8, 0xa06d, 0x0110, 0x080c, 0x1619, 0x60ab, 0x0000, 0x00de,
++      0xa006, 0x604a, 0x6810, 0x603a, 0x680c, 0x6046, 0xa006, 0x60b2,
++      0x60ae, 0x60b6, 0x60bb, 0x0520, 0x6814, 0xa084, 0x00ff, 0x6042,
++      0x014e, 0x013e, 0x015e, 0x003e, 0x00de, 0x0005, 0x0126, 0x2091,
++      0x8000, 0x6944, 0x6e48, 0xa684, 0x3fff, 0xa082, 0x4000, 0x1a04,
++      0x505c, 0xa18c, 0xff00, 0x810f, 0xa182, 0x00ff, 0x1a04, 0x5061,
++      0x2001, 0xc60c, 0x2004, 0xa084, 0x0003, 0x01c0, 0x2001, 0xc60c,
++      0x2004, 0xd084, 0x1904, 0x5044, 0xa188, 0xc77b, 0x2104, 0xa065,
++      0x0904, 0x5044, 0x6004, 0xa084, 0x00ff, 0xa08e, 0x0006, 0x1904,
++      0x5044, 0x6000, 0xd0c4, 0x0904, 0x5044, 0x0068, 0xa188, 0xc77b,
++      0x2104, 0xa065, 0x0904, 0x5028, 0x6004, 0xa084, 0x00ff, 0xa08e,
++      0x0006, 0x1904, 0x502d, 0x60a4, 0xa00d, 0x0118, 0x080c, 0x5568,
++      0x05d0, 0x60a8, 0xa00d, 0x0188, 0x080c, 0x55b3, 0x1170, 0x694c,
++      0xd1fc, 0x1118, 0x080c, 0x5272, 0x0448, 0x080c, 0x5221, 0x694c,
++      0xd1ec, 0x1520, 0x080c, 0x545a, 0x0408, 0x694c, 0xa184, 0xa000,
++      0x0178, 0xd1ec, 0x0140, 0xd1fc, 0x0118, 0x080c, 0x5469, 0x0028,
++      0x080c, 0x5469, 0x0028, 0xd1fc, 0x0118, 0x080c, 0x5221, 0x0070,
++      0x6050, 0xa00d, 0x0130, 0x2d00, 0x200a, 0x6803, 0x0000, 0x6052,
++      0x0028, 0x2d00, 0x6052, 0x604e, 0x6803, 0x0000, 0x080c, 0x79b6,
++      0xa006, 0x012e, 0x0005, 0x2001, 0x0005, 0x2009, 0x0000, 0x04e8,
++      0x2001, 0x0028, 0x2009, 0x0000, 0x04c0, 0xa082, 0x0006, 0x12a0,
++      0x2001, 0xc635, 0x2004, 0xd0ac, 0x1160, 0x60a0, 0xd0bc, 0x1148,
++      0x6100, 0xd1fc, 0x0904, 0x4fe3, 0x2001, 0x0029, 0x2009, 0x1000,
++      0x0420, 0x2001, 0x0028, 0x00a8, 0x2009, 0xc60c, 0x210c, 0xd18c,
++      0x0118, 0x2001, 0x0004, 0x0068, 0xd184, 0x0118, 0x2001, 0x0004,
++      0x0040, 0x2001, 0x0029, 0x6100, 0xd1fc, 0x0118, 0x2009, 0x1000,
++      0x0060, 0x2009, 0x0000, 0x0048, 0x2001, 0x0029, 0x2009, 0x0000,
++      0x0020, 0x2001, 0x0029, 0x2009, 0x0000, 0xa005, 0x012e, 0x0005,
++      0x00e6, 0x0126, 0x2091, 0x8000, 0x6844, 0xa084, 0xff00, 0xa08e,
++      0xff00, 0x1120, 0x2001, 0xc8d3, 0x2064, 0x0080, 0x6844, 0x8007,
++      0xa084, 0x00ff, 0x2008, 0xa182, 0x00ff, 0x1698, 0xa188, 0xc77b,
++      0x2104, 0xa065, 0x01d8, 0x080c, 0x56ed, 0x11d8, 0x2c70, 0x080c,
++      0x958d, 0x0568, 0x2e00, 0x601a, 0x2d00, 0x6012, 0x601f, 0x0009,
++      0x600b, 0x0000, 0x6844, 0xa08e, 0xff00, 0x1110, 0x600b, 0x8000,
++      0x2009, 0x0100, 0x080c, 0x9613, 0xa006, 0x00b0, 0x2001, 0x0028,
++      0x0090, 0x2009, 0xc60c, 0x210c, 0xd18c, 0x0118, 0x2001, 0x0004,
++      0x0038, 0xd184, 0x0118, 0x2001, 0x0004, 0x0010, 0x2001, 0x0029,
++      0x0010, 0x2001, 0x0029, 0xa005, 0x012e, 0x00ee, 0x0005, 0x2001,
++      0x002c, 0x0cc8, 0x00e6, 0x0126, 0x2091, 0x8000, 0x6844, 0x8007,
++      0xa084, 0x00ff, 0x2008, 0xa182, 0x00ff, 0x1a04, 0x510d, 0xa188,
++      0xc77b, 0x2104, 0xa065, 0x01c0, 0x6004, 0xa084, 0x00ff, 0xa08e,
++      0x0006, 0x11a8, 0x2c70, 0x080c, 0x958d, 0x05e8, 0x2e00, 0x601a,
++      0x2d00, 0x6012, 0x600b, 0xffff, 0x601f, 0x000a, 0x2009, 0x0003,
++      0x080c, 0x9613, 0xa006, 0x0460, 0x2001, 0x0028, 0x0440, 0xa082,
++      0x0006, 0x1298, 0x2001, 0xc635, 0x2004, 0xd0ac, 0x1158, 0x60a0,
++      0xd0bc, 0x1140, 0x6100, 0xd1fc, 0x09e8, 0x2001, 0x0029, 0x2009,
++      0x1000, 0x00a8, 0x2001, 0x0028, 0x0090, 0x2009, 0xc60c, 0x210c,
++      0xd18c, 0x0118, 0x2001, 0x0004, 0x0050, 0xd184, 0x0118, 0x2001,
++      0x0004, 0x0028, 0x2001, 0x0029, 0x0010, 0x2001, 0x0029, 0xa005,
++      0x012e, 0x00ee, 0x0005, 0x2001, 0x002c, 0x0cc8, 0x00f6, 0x00e6,
++      0x0126, 0x2091, 0x8000, 0x2011, 0x0000, 0x2079, 0xc600, 0x6944,
++      0xa18c, 0xff00, 0x810f, 0xa182, 0x00ff, 0x1a04, 0x51d8, 0x080c,
++      0x533d, 0x11a0, 0x6004, 0xa084, 0x00ff, 0xa082, 0x0006, 0x1270,
++      0x6864, 0xa0c6, 0x006f, 0x0150, 0x2001, 0xc635, 0x2004, 0xd0ac,
++      0x1904, 0x51c1, 0x60a0, 0xd0bc, 0x1904, 0x51c1, 0x6864, 0xa0c6,
++      0x006f, 0x0118, 0x2008, 0x0804, 0x518a, 0x6968, 0x2140, 0xa18c,
++      0xff00, 0x810f, 0x78d4, 0xd0ac, 0x1118, 0xa182, 0x0080, 0x06d0,
++      0xa182, 0x00ff, 0x16b8, 0x6a70, 0x6b6c, 0x7870, 0xa306, 0x1160,
++      0x7874, 0xa24e, 0x1118, 0x2208, 0x2310, 0x0460, 0xa9cc, 0xff00,
++      0x1118, 0x2208, 0x2310, 0x0430, 0x080c, 0x3f6e, 0x2c70, 0x0550,
++      0x2009, 0x0000, 0x2011, 0x0000, 0xa0c6, 0x4000, 0x1160, 0x0006,
++      0x2e60, 0x080c, 0x55de, 0x1108, 0xc185, 0x7000, 0xd0bc, 0x0108,
++      0xc18d, 0x000e, 0x0088, 0xa0c6, 0x4007, 0x1110, 0x2408, 0x0060,
++      0xa0c6, 0x4008, 0x1118, 0x2708, 0x2610, 0x0030, 0xa0c6, 0x4009,
++      0x1108, 0x0010, 0x2001, 0x4006, 0x6866, 0x696a, 0x6a6e, 0x2001,
++      0x0030, 0x0450, 0x080c, 0x958d, 0x1138, 0x2001, 0x4005, 0x2009,
++      0x0003, 0x2011, 0x0000, 0x0c80, 0x2e00, 0x601a, 0x080c, 0xb05e,
++      0x2d00, 0x6012, 0x601f, 0x0001, 0x6838, 0xd88c, 0x0108, 0xc0f5,
++      0x683a, 0x0126, 0x2091, 0x8000, 0x080c, 0x2e46, 0x012e, 0x2001,
++      0x0000, 0x080c, 0x527f, 0x2001, 0x0002, 0x080c, 0x5291, 0x2009,
++      0x0002, 0x080c, 0x9613, 0xa006, 0xa005, 0x012e, 0x00ee, 0x00fe,
++      0x0005, 0x2001, 0x0028, 0x2009, 0x0000, 0x0cb0, 0x2009, 0xc60c,
++      0x210c, 0xd18c, 0x0118, 0x2001, 0x0004, 0x0038, 0xd184, 0x0118,
++      0x2001, 0x0004, 0x0010, 0x2001, 0x0029, 0x2009, 0x0000, 0x0c20,
++      0x2001, 0x0029, 0x2009, 0x0000, 0x08f8, 0x6944, 0x6e48, 0xa684,
++      0x3fff, 0xa082, 0x4000, 0x16b8, 0xa18c, 0xff00, 0x810f, 0xa182,
++      0x00ff, 0x12e0, 0xa188, 0xc77b, 0x2104, 0xa065, 0x01b8, 0x6004,
++      0xa084, 0x00ff, 0xa08e, 0x0006, 0x11b0, 0x684c, 0xd0ec, 0x0120,
++      0x080c, 0x5469, 0x0431, 0x0030, 0x0421, 0x684c, 0xd0fc, 0x0110,
++      0x080c, 0x545a, 0x080c, 0x54a7, 0xa006, 0x00c8, 0x2001, 0x0028,
++      0x2009, 0x0000, 0x00a0, 0xa082, 0x0006, 0x1240, 0x6100, 0xd1fc,
++      0x0d20, 0x2001, 0x0029, 0x2009, 0x1000, 0x0048, 0x2001, 0x0029,
++      0x2009, 0x0000, 0x0020, 0x2001, 0x0029, 0x2009, 0x0000, 0xa005,
++      0x0005, 0x0126, 0x2091, 0x8000, 0x6050, 0xa00d, 0x0138, 0x2d00,
++      0x200a, 0x6803, 0x0000, 0x6052, 0x012e, 0x0005, 0x2d00, 0x6052,
++      0x604e, 0x6803, 0x0000, 0x0cc0, 0x0126, 0x2091, 0x8000, 0x604c,
++      0xa005, 0x0170, 0x00e6, 0x2071, 0xc927, 0x7004, 0xa086, 0x0002,
++      0x0168, 0x00ee, 0x604c, 0x6802, 0x2d00, 0x604e, 0x012e, 0x0005,
++      0x2d00, 0x6052, 0x604e, 0x6803, 0x0000, 0x0cc0, 0x701c, 0xac06,
++      0x1d80, 0x604c, 0x2070, 0x7000, 0x6802, 0x2d00, 0x7002, 0x00ee,
++      0x012e, 0x0005, 0x0126, 0x2091, 0x8000, 0x604c, 0xa06d, 0x0130,
++      0x6800, 0xa005, 0x1108, 0x6052, 0x604e, 0xad05, 0x012e, 0x0005,
++      0x604c, 0xa06d, 0x0130, 0x6800, 0xa005, 0x1108, 0x6052, 0x604e,
++      0xad05, 0x0005, 0x6803, 0x0000, 0x6084, 0xa00d, 0x0120, 0x2d00,
++      0x200a, 0x6086, 0x0005, 0x2d00, 0x6086, 0x6082, 0x0cd8, 0x0126,
++      0x00c6, 0x0026, 0x2091, 0x8000, 0x6218, 0x2260, 0x6200, 0xa005,
++      0x0110, 0xc285, 0x0008, 0xc284, 0x6202, 0x002e, 0x00ce, 0x012e,
++      0x0005, 0x0126, 0x00c6, 0x2091, 0x8000, 0x6218, 0x2260, 0x6204,
++      0x0006, 0xa086, 0x0006, 0x1180, 0x609c, 0xd0ac, 0x0168, 0x2001,
++      0xc653, 0x2004, 0xd0a4, 0x0140, 0xa284, 0xff00, 0x8007, 0xa086,
++      0x0007, 0x1110, 0x2011, 0x0600, 0x000e, 0xa294, 0xff00, 0xa215,
++      0x6206, 0x0006, 0xa086, 0x0006, 0x1128, 0x6290, 0x82ff, 0x1110,
++      0x080c, 0x1519, 0x000e, 0x00ce, 0x012e, 0x0005, 0x0126, 0x00c6,
++      0x2091, 0x8000, 0x6218, 0x2260, 0x6204, 0x0006, 0xa086, 0x0006,
++      0x1178, 0x609c, 0xd0a4, 0x0160, 0x2001, 0xc653, 0x2004, 0xd0ac,
++      0x1138, 0xa284, 0x00ff, 0xa086, 0x0007, 0x1110, 0x2011, 0x0006,
++      0x000e, 0xa294, 0x00ff, 0x8007, 0xa215, 0x6206, 0x00ce, 0x012e,
++      0x0005, 0x0026, 0xa182, 0x00ff, 0x0218, 0xa085, 0x0001, 0x00b0,
++      0xa190, 0xc77b, 0x2204, 0xa065, 0x1180, 0x0016, 0x00d6, 0x080c,
++      0x15e5, 0x2d60, 0x00de, 0x001e, 0x0d80, 0x2c00, 0x2012, 0x60a7,
++      0x0000, 0x60ab, 0x0000, 0x080c, 0x4f47, 0xa006, 0x002e, 0x0005,
++      0x0126, 0x2091, 0x8000, 0x0026, 0xa182, 0x00ff, 0x0218, 0xa085,
++      0x0001, 0x0480, 0x00d6, 0xa190, 0xc77b, 0x2204, 0xa06d, 0x0540,
++      0x2013, 0x0000, 0x00d6, 0x00c6, 0x2d60, 0x60a4, 0xa06d, 0x0110,
++      0x080c, 0x1619, 0x60a8, 0xa06d, 0x0110, 0x080c, 0x1619, 0x00ce,
++      0x00de, 0x00d6, 0x00c6, 0x68bc, 0x2060, 0x8cff, 0x0168, 0x600c,
++      0x0006, 0x6010, 0x2068, 0x080c, 0xac91, 0x0110, 0x080c, 0x1629,
++      0x080c, 0x95e3, 0x00ce, 0x0c88, 0x00ce, 0x00de, 0x080c, 0x1619,
++      0x00de, 0xa006, 0x002e, 0x012e, 0x0005, 0x0016, 0xa182, 0x00ff,
++      0x0218, 0xa085, 0x0001, 0x0030, 0xa188, 0xc77b, 0x2104, 0xa065,
++      0x0dc0, 0xa006, 0x001e, 0x0005, 0x00d6, 0x0156, 0x0136, 0x0146,
++      0x600b, 0x0000, 0x600f, 0x0000, 0x6000, 0xc08c, 0x6002, 0x080c,
++      0x5f22, 0x1558, 0x60a0, 0xa086, 0x007e, 0x2069, 0xcc90, 0x0130,
++      0x2001, 0xc635, 0x2004, 0xd0ac, 0x1500, 0x0098, 0x2d04, 0xd0e4,
++      0x01e0, 0x00d6, 0x2069, 0xcc8e, 0x00c6, 0x2061, 0xc8f9, 0x6810,
++      0x2062, 0x6814, 0x6006, 0x6818, 0x600a, 0x681c, 0x600e, 0x00ce,
++      0x00de, 0x8d69, 0x2d04, 0x2069, 0x0140, 0xa005, 0x1110, 0x2001,
++      0x0001, 0x6886, 0x2069, 0xc600, 0x68a6, 0x2069, 0xcc8e, 0x6808,
++      0x605e, 0x6810, 0x6062, 0x6138, 0xa10a, 0x0208, 0x603a, 0x6814,
++      0x6066, 0x2099, 0xcc96, 0xac88, 0x000a, 0x21a0, 0x20a9, 0x0004,
++      0x53a3, 0x2099, 0xcc9a, 0xac88, 0x0006, 0x21a0, 0x20a9, 0x0004,
++      0x53a3, 0x2069, 0xccae, 0x6808, 0x606a, 0x690c, 0x616e, 0x6810,
++      0x6072, 0x6818, 0x6076, 0x60a0, 0xa086, 0x007e, 0x1120, 0x2069,
++      0xcc8e, 0x690c, 0x616e, 0xa182, 0x0211, 0x1218, 0x2009, 0x0008,
++      0x0400, 0xa182, 0x0259, 0x1218, 0x2009, 0x0007, 0x00d0, 0xa182,
++      0x02c1, 0x1218, 0x2009, 0x0006, 0x00a0, 0xa182, 0x0349, 0x1218,
++      0x2009, 0x0005, 0x0070, 0xa182, 0x0421, 0x1218, 0x2009, 0x0004,
++      0x0040, 0xa182, 0x0581, 0x1218, 0x2009, 0x0003, 0x0010, 0x2009,
++      0x0002, 0x6192, 0x014e, 0x013e, 0x015e, 0x00de, 0x0005, 0x0016,
++      0x0026, 0x00e6, 0x2071, 0xcc8d, 0x2e04, 0x6896, 0x2071, 0xcc8e,
++      0x7004, 0x689a, 0x701c, 0x689e, 0x6a00, 0x2009, 0xc672, 0x210c,
++      0xd0bc, 0x0120, 0xd1ec, 0x0110, 0xc2ad, 0x0008, 0xc2ac, 0xd0c4,
++      0x0120, 0xd1e4, 0x0110, 0xc2bd, 0x0008, 0xc2bc, 0x6a02, 0x00ee,
++      0x002e, 0x001e, 0x0005, 0x00d6, 0x0126, 0x2091, 0x8000, 0x60a4,
++      0xa06d, 0x01c0, 0x6900, 0x81ff, 0x1540, 0x6a04, 0xa282, 0x0010,
++      0x1648, 0xad88, 0x0004, 0x20a9, 0x0010, 0x2104, 0xa086, 0xffff,
++      0x0128, 0x8108, 0x1f04, 0x5415, 0x080c, 0x1519, 0x260a, 0x8210,
++      0x6a06, 0x0098, 0x080c, 0x1602, 0x01a8, 0x2d00, 0x60a6, 0x6803,
++      0x0000, 0xad88, 0x0004, 0x20a9, 0x0010, 0x200b, 0xffff, 0x8108,
++      0x1f04, 0x542d, 0x6807, 0x0001, 0x6e12, 0xa085, 0x0001, 0x012e,
++      0x00de, 0x0005, 0xa006, 0x0cd8, 0x0126, 0x2091, 0x8000, 0x00d6,
++      0x60a4, 0xa00d, 0x01a0, 0x2168, 0x6800, 0xa005, 0x1160, 0x080c,
++      0x5568, 0x1168, 0x200b, 0xffff, 0x6804, 0xa08a, 0x0002, 0x0218,
++      0x8001, 0x6806, 0x0020, 0x080c, 0x1619, 0x60a7, 0x0000, 0x00de,
++      0x012e, 0x0005, 0x0126, 0x2091, 0x8000, 0x080c, 0x55c6, 0x0010,
++      0x080c, 0x5221, 0x080c, 0x54e0, 0x1dd8, 0x080c, 0x54a7, 0x012e,
++      0x0005, 0x00d6, 0x0126, 0x2091, 0x8000, 0x60a8, 0xa06d, 0x01c0,
++      0x6950, 0x81ff, 0x1540, 0x6a54, 0xa282, 0x0010, 0x1670, 0xad88,
++      0x0018, 0x20a9, 0x0010, 0x2104, 0xa086, 0xffff, 0x0128, 0x8108,
++      0x1f04, 0x547b, 0x080c, 0x1519, 0x260a, 0x8210, 0x6a56, 0x0098,
++      0x080c, 0x1602, 0x01d0, 0x2d00, 0x60aa, 0x6853, 0x0000, 0xad88,
++      0x0018, 0x20a9, 0x0010, 0x200b, 0xffff, 0x8108, 0x1f04, 0x5493,
++      0x6857, 0x0001, 0x6e62, 0x0010, 0x080c, 0x5272, 0x0089, 0x1de0,
++      0xa085, 0x0001, 0x012e, 0x00de, 0x0005, 0xa006, 0x0cd8, 0x0126,
++      0x2091, 0x8000, 0x080c, 0x79b6, 0x012e, 0x0005, 0xa01e, 0x0010,
++      0x2019, 0x0001, 0xa00e, 0x0126, 0x2091, 0x8000, 0x604c, 0x2068,
++      0x6000, 0xd0dc, 0x1170, 0x8dff, 0x01f8, 0x83ff, 0x0120, 0x6848,
++      0xa606, 0x0158, 0x0030, 0x683c, 0xa406, 0x1118, 0x6840, 0xa506,
++      0x0120, 0x2d08, 0x6800, 0x2068, 0x0c70, 0x080c, 0x8fb7, 0x6a00,
++      0x604c, 0xad06, 0x1110, 0x624e, 0x0018, 0xa180, 0x0000, 0x2202,
++      0x82ff, 0x1110, 0x6152, 0x8dff, 0x012e, 0x0005, 0xa01e, 0x0010,
++      0x2019, 0x0001, 0xa00e, 0x6080, 0x2068, 0x8dff, 0x01e8, 0x83ff,
++      0x0120, 0x6848, 0xa606, 0x0158, 0x0030, 0x683c, 0xa406, 0x1118,
++      0x6840, 0xa506, 0x0120, 0x2d08, 0x6800, 0x2068, 0x0c70, 0x6a00,
++      0x6080, 0xad06, 0x1110, 0x6282, 0x0018, 0xa180, 0x0000, 0x2202,
++      0x82ff, 0x1110, 0x6186, 0x8dff, 0x0005, 0xa016, 0x080c, 0x5562,
++      0x1110, 0x2011, 0x0001, 0x080c, 0x55ad, 0x1110, 0xa295, 0x0002,
++      0x0005, 0x080c, 0x55de, 0x0118, 0x080c, 0xad46, 0x0010, 0xa085,
++      0x0001, 0x0005, 0x080c, 0x55de, 0x0118, 0x080c, 0xacd6, 0x0010,
++      0xa085, 0x0001, 0x0005, 0x080c, 0x55de, 0x0118, 0x080c, 0xad29,
++      0x0010, 0xa085, 0x0001, 0x0005, 0x080c, 0x55de, 0x0118, 0x080c,
++      0xacf2, 0x0010, 0xa085, 0x0001, 0x0005, 0x080c, 0x55de, 0x0118,
++      0x080c, 0xad62, 0x0010, 0xa085, 0x0001, 0x0005, 0x0126, 0x0006,
++      0x00d6, 0x2091, 0x8000, 0x6080, 0xa06d, 0x01a0, 0x6800, 0x0006,
++      0x6837, 0x0103, 0x6b4a, 0x6847, 0x0000, 0x080c, 0xaf03, 0x0006,
++      0x6000, 0xd0fc, 0x0110, 0x080c, 0xc4e0, 0x000e, 0x080c, 0x580a,
++      0x000e, 0x0c50, 0x6083, 0x0000, 0x6087, 0x0000, 0x00de, 0x000e,
++      0x012e, 0x0005, 0x60a4, 0xa00d, 0x1118, 0xa085, 0x0001, 0x0005,
++      0x00e6, 0x2170, 0x7000, 0xa005, 0x1168, 0x20a9, 0x0010, 0xae88,
++      0x0004, 0x2104, 0xa606, 0x0130, 0x8108, 0x1f04, 0x5571, 0xa085,
++      0x0001, 0x0008, 0xa006, 0x00ee, 0x0005, 0x00d6, 0x0126, 0x2091,
++      0x8000, 0x60a4, 0xa06d, 0x1128, 0x080c, 0x1602, 0x01a0, 0x2d00,
++      0x60a6, 0x6803, 0x0001, 0x6807, 0x0000, 0xad88, 0x0004, 0x20a9,
++      0x0010, 0x200b, 0xffff, 0x8108, 0x1f04, 0x5591, 0xa085, 0x0001,
++      0x012e, 0x00de, 0x0005, 0xa006, 0x0cd8, 0x00d6, 0x0126, 0x2091,
++      0x8000, 0x60a4, 0xa06d, 0x0130, 0x60a7, 0x0000, 0x080c, 0x1619,
++      0xa085, 0x0001, 0x012e, 0x00de, 0x0005, 0x60a8, 0xa00d, 0x1118,
++      0xa085, 0x0001, 0x0005, 0x00e6, 0x2170, 0x7050, 0xa005, 0x1160,
++      0x20a9, 0x0010, 0xae88, 0x0018, 0x2104, 0xa606, 0x0128, 0x8108,
++      0x1f04, 0x55bc, 0xa085, 0x0001, 0x00ee, 0x0005, 0x0126, 0x2091,
++      0x8000, 0x0c19, 0x1188, 0x200b, 0xffff, 0x00d6, 0x60a8, 0x2068,
++      0x6854, 0xa08a, 0x0002, 0x0218, 0x8001, 0x6856, 0x0020, 0x080c,
++      0x1619, 0x60ab, 0x0000, 0x00de, 0x012e, 0x0005, 0x609c, 0xd0a4,
++      0x0005, 0x00f6, 0x080c, 0x5f22, 0x01b0, 0x71b8, 0x81ff, 0x1198,
++      0x71d4, 0xd19c, 0x0180, 0x2001, 0x007e, 0xa080, 0xc77b, 0x2004,
++      0xa07d, 0x0148, 0x7804, 0xa084, 0x00ff, 0xa086, 0x0006, 0x1118,
++      0x7800, 0xc0ed, 0x7802, 0x2079, 0xc652, 0x7804, 0xd0a4, 0x01e8,
++      0x0156, 0x00c6, 0x20a9, 0x007f, 0x2009, 0x0000, 0x0016, 0x080c,
++      0x533d, 0x1168, 0x6004, 0xa084, 0xff00, 0x8007, 0xa096, 0x0004,
++      0x0118, 0xa086, 0x0006, 0x1118, 0x6000, 0xc0ed, 0x6002, 0x001e,
++      0x8108, 0x1f04, 0x5606, 0x00ce, 0x015e, 0x080c, 0x570b, 0x0120,
++      0x2001, 0xc8fc, 0x200c, 0x0038, 0x2079, 0xc652, 0x7804, 0xd0a4,
++      0x0130, 0x2009, 0x07d0, 0x2011, 0x5631, 0x080c, 0x7036, 0x00fe,
++      0x0005, 0x2011, 0x5631, 0x080c, 0x6fad, 0x080c, 0x570b, 0x01f0,
++      0x2001, 0xc7f9, 0x2004, 0xa080, 0x0000, 0x200c, 0xc1ec, 0x2102,
++      0x2001, 0xc653, 0x2004, 0xd0a4, 0x0130, 0x2009, 0x07d0, 0x2011,
++      0x5631, 0x080c, 0x7036, 0x00e6, 0x2071, 0xc600, 0x7073, 0x0000,
++      0x7077, 0x0000, 0x080c, 0x2c62, 0x00ee, 0x04b0, 0x0156, 0x00c6,
++      0x20a9, 0x007f, 0x2009, 0x0000, 0x0016, 0x080c, 0x533d, 0x1530,
++      0x6000, 0xd0ec, 0x0518, 0x0046, 0x62a0, 0xa294, 0x00ff, 0x8227,
++      0xa006, 0x2009, 0x0029, 0x080c, 0xc190, 0x6000, 0xc0e5, 0xc0ec,
++      0x6002, 0x6004, 0xa084, 0x00ff, 0xa085, 0x0700, 0x6006, 0x2019,
++      0x0029, 0x080c, 0x7b16, 0x0076, 0x2039, 0x0000, 0x080c, 0x7a0e,
++      0x2009, 0x0000, 0x080c, 0xbef7, 0x007e, 0x004e, 0x001e, 0x8108,
++      0x1f04, 0x565c, 0x00ce, 0x015e, 0x0005, 0x00c6, 0x6018, 0x2060,
++      0x6000, 0xc0ec, 0x6002, 0x00ce, 0x0005, 0x00c6, 0x00d6, 0x080c,
++      0x15e5, 0x2d60, 0x0508, 0x2009, 0x00ff, 0x60a7, 0x0000, 0x60ab,
++      0x0000, 0x080c, 0x4f47, 0x6007, 0x0006, 0x6013, 0x00ff, 0x6017,
++      0xffff, 0x606f, 0x0200, 0x606c, 0x6093, 0x0002, 0x60bb, 0x0520,
++      0x60a3, 0x00ff, 0x60b7, 0x0000, 0x60af, 0x0000, 0x2c08, 0x2001,
++      0xc8d3, 0x2102, 0xa085, 0x0001, 0x00de, 0x00ce, 0x0005, 0x7818,
++      0x2004, 0xd0ac, 0x0005, 0x7818, 0x2004, 0xd0bc, 0x0005, 0x0156,
++      0x00e6, 0x00d6, 0x00c6, 0x0026, 0x20a9, 0x00ff, 0x2009, 0x0000,
++      0x0016, 0x080c, 0x533d, 0x1178, 0x2c70, 0x70ac, 0xa005, 0x0158,
++      0x2060, 0x620c, 0x0026, 0x6010, 0x2068, 0x080c, 0x761a, 0x002e,
++      0x2260, 0x82ff, 0x1db0, 0x001e, 0x8108, 0x1f04, 0x56d0, 0x002e,
++      0x00ce, 0x00de, 0x00ee, 0x015e, 0x0005, 0x0006, 0x0016, 0x0026,
++      0x6004, 0xa08c, 0x00ff, 0xa196, 0x0006, 0x0188, 0xa196, 0x0004,
++      0x0170, 0xa196, 0x0005, 0x0158, 0xa08c, 0xff00, 0x810f, 0xa196,
++      0x0006, 0x0128, 0xa196, 0x0004, 0x0110, 0xa196, 0x0005, 0x002e,
++      0x001e, 0x000e, 0x0005, 0x00f6, 0x2001, 0xc7f9, 0x2004, 0xa07d,
++      0x0110, 0x7800, 0xd0ec, 0x00fe, 0x0005, 0x0126, 0x0026, 0x2091,
++      0x8000, 0x0006, 0x62a0, 0xa290, 0xc77b, 0x2204, 0xac06, 0x190c,
++      0x1519, 0x000e, 0x6200, 0xa005, 0x0110, 0xc2fd, 0x0008, 0xc2fc,
++      0x6202, 0x002e, 0x012e, 0x0005, 0x2011, 0xc635, 0x2204, 0xd0cc,
++      0x0138, 0x2001, 0xc8fa, 0x200c, 0x2011, 0x5739, 0x080c, 0x7036,
++      0x0005, 0x2011, 0x5739, 0x080c, 0x6fad, 0x2011, 0xc635, 0x2204,
++      0xc0cc, 0x2012, 0x0005, 0x2071, 0xc734, 0x7003, 0x0001, 0x7007,
++      0x0000, 0x7013, 0x0000, 0x7017, 0x0000, 0x701b, 0x0000, 0x701f,
++      0x0000, 0x700b, 0x0000, 0x704b, 0x0001, 0x704f, 0x0000, 0x705b,
++      0x0020, 0x705f, 0x0040, 0x707f, 0x0000, 0x2071, 0xc8c3, 0x7003,
++      0xc734, 0x7007, 0x0000, 0x700b, 0x0000, 0x700f, 0xc8a3, 0x7013,
++      0x0020, 0x7017, 0x0040, 0x7037, 0x0000, 0x0005, 0x0016, 0x00e6,
++      0x2071, 0xc87b, 0xa00e, 0x7186, 0x718a, 0x7097, 0x0001, 0x2001,
++      0xc653, 0x2004, 0xd0fc, 0x1150, 0x2001, 0xc653, 0x2004, 0xa00e,
++      0xd09c, 0x0108, 0x8108, 0x7102, 0x0804, 0x57d4, 0x2001, 0xc672,
++      0x200c, 0xa184, 0x000f, 0x2009, 0xc673, 0x210c, 0x0002, 0x577c,
++      0x57af, 0x57b6, 0x57c0, 0x57c5, 0x577c, 0x577c, 0x577c, 0x579f,
++      0x577c, 0x577c, 0x577c, 0x577c, 0x577c, 0x577c, 0x577c, 0x7003,
++      0x0004, 0x0136, 0x0146, 0x0156, 0x2099, 0xc676, 0x20a1, 0xc8cc,
++      0x20a9, 0x0004, 0x53a3, 0x015e, 0x014e, 0x013e, 0x0428, 0x708f,
++      0x0005, 0x7007, 0x0122, 0x2001, 0x0002, 0x0030, 0x708f, 0x0002,
++      0x7007, 0x0121, 0x2001, 0x0003, 0x7002, 0x7097, 0x0001, 0x0088,
++      0x7007, 0x0122, 0x2001, 0x0002, 0x0020, 0x7007, 0x0121, 0x2001,
++      0x0003, 0x7002, 0xa006, 0x7096, 0x708e, 0xa184, 0xff00, 0x8007,
++      0x709a, 0xa184, 0x00ff, 0x7092, 0x00ee, 0x001e, 0x0005, 0x00e6,
++      0x2071, 0xc734, 0x684c, 0xa005, 0x1130, 0x7028, 0xc085, 0x702a,
++      0xa085, 0x0001, 0x0428, 0x6a60, 0x7236, 0x6b64, 0x733a, 0x6868,
++      0x703e, 0x7076, 0x686c, 0x7042, 0x707a, 0x684c, 0x702e, 0x6844,
++      0x7032, 0x2009, 0x000d, 0x200a, 0x700b, 0x0000, 0x8007, 0x8006,
++      0x8006, 0xa08c, 0x003f, 0xa084, 0xffc0, 0xa210, 0x2100, 0xa319,
++      0x726e, 0x7372, 0x7028, 0xc084, 0x702a, 0x7007, 0x0001, 0xa006,
++      0x00ee, 0x0005, 0x0156, 0x00e6, 0x0026, 0x6838, 0xd0fc, 0x1904,
++      0x5863, 0x6804, 0xa00d, 0x0188, 0x00d6, 0x2071, 0xc600, 0xa016,
++      0x702c, 0x2168, 0x6904, 0x206a, 0x8210, 0x2d00, 0x81ff, 0x1dc8,
++      0x702e, 0x70b4, 0xa200, 0x70b6, 0x00de, 0x2071, 0xc734, 0x701c,
++      0xa005, 0x1904, 0x5873, 0x20a9, 0x0032, 0x0f04, 0x5871, 0x0e04,
++      0x582d, 0x2071, 0xc87b, 0x7200, 0x82ff, 0x05d8, 0x6934, 0xa186,
++      0x0103, 0x1904, 0x5881, 0x6948, 0x6844, 0xa105, 0x1540, 0x2009,
++      0x8020, 0x2200, 0x0002, 0x5871, 0x5848, 0x58e8, 0x58f5, 0x5871,
++      0x2071, 0x0000, 0x20a9, 0x0032, 0x0f04, 0x5871, 0x7018, 0xd084,
++      0x1dd8, 0x7122, 0x683c, 0x7026, 0x6840, 0x702a, 0x701b, 0x0001,
++      0x2091, 0x4080, 0x2071, 0xc600, 0x702c, 0x206a, 0x2d00, 0x702e,
++      0x70b4, 0x8000, 0x70b6, 0x002e, 0x00ee, 0x015e, 0x0005, 0x6844,
++      0xa086, 0x0100, 0x1130, 0x6868, 0xa005, 0x1118, 0x2009, 0x8020,
++      0x0880, 0x2071, 0xc734, 0x2d08, 0x206b, 0x0000, 0x7010, 0x8000,
++      0x7012, 0x7018, 0xa06d, 0x711a, 0x0110, 0x6902, 0x0008, 0x711e,
++      0x0c10, 0xa18c, 0x00ff, 0xa186, 0x0013, 0x01e0, 0xa186, 0x001b,
++      0x01c8, 0xa186, 0x0023, 0x01e8, 0xa186, 0x0017, 0x0130, 0xa186,
++      0x001e, 0x0118, 0xa18e, 0x001f, 0x19e0, 0x684c, 0xd0cc, 0x09c8,
++      0x6850, 0xa084, 0x00ff, 0xa086, 0x0001, 0x1998, 0x2009, 0x8021,
++      0x0804, 0x5841, 0x6848, 0xa005, 0x1960, 0x2009, 0x8022, 0x0804,
++      0x5841, 0x2071, 0x0000, 0x7018, 0xd084, 0x1918, 0x00e6, 0x2071,
++      0xc682, 0x7140, 0x00ee, 0x6838, 0xa102, 0x0a04, 0x5871, 0x684c,
++      0xa005, 0x1158, 0x00e6, 0x2071, 0xc682, 0x7004, 0x00ee, 0xd08c,
++      0x1904, 0x5871, 0x2001, 0x8024, 0x0040, 0x6848, 0xd084, 0x1118,
++      0x2001, 0x8023, 0x0010, 0x2001, 0x8027, 0x7022, 0x6840, 0x7026,
++      0x683c, 0x702a, 0x6850, 0x702e, 0x0026, 0x0036, 0x6b38, 0x2e10,
++      0xa290, 0x0072, 0x2d00, 0xa080, 0x0015, 0x200c, 0x2112, 0x8000,
++      0x200c, 0x8210, 0x8319, 0x1dd0, 0x003e, 0x002e, 0x0804, 0x5856,
++      0x7084, 0x8008, 0xa092, 0x001e, 0x1a04, 0x5871, 0x7186, 0xae90,
++      0x0003, 0xa210, 0x683c, 0x2012, 0x0080, 0x7084, 0x8008, 0xa092,
++      0x000f, 0x1a04, 0x5871, 0x7186, 0xae90, 0x0003, 0x8003, 0xa210,
++      0x683c, 0x2012, 0x8210, 0x6840, 0x2012, 0x7088, 0xa10a, 0x0a04,
++      0x585a, 0x718c, 0x7084, 0xa10a, 0x0a04, 0x585a, 0x2071, 0x0000,
++      0x7018, 0xd084, 0x1904, 0x585a, 0x2071, 0xc87b, 0x7000, 0xa086,
++      0x0002, 0x1150, 0x080c, 0x5b75, 0x2071, 0x0000, 0x701b, 0x0001,
++      0x2091, 0x4080, 0x0804, 0x585a, 0x080c, 0x5b9f, 0x2071, 0x0000,
++      0x701b, 0x0001, 0x2091, 0x4080, 0x0804, 0x585a, 0x0006, 0x684c,
++      0x0006, 0x6837, 0x0103, 0x20a9, 0x001c, 0xad80, 0x0011, 0x20a0,
++      0x2001, 0x0000, 0x40a4, 0x000e, 0xa084, 0x00ff, 0x684e, 0x000e,
++      0x684a, 0x6952, 0x0005, 0x2071, 0xc734, 0x7004, 0x0002, 0x5951,
++      0x5962, 0x5b60, 0x5b61, 0x5b6e, 0x5b74, 0x5952, 0x5b51, 0x5ae7,
++      0x5b3d, 0x0005, 0x0126, 0x2091, 0x8000, 0x0e04, 0x5961, 0x2009,
++      0x000d, 0x7030, 0x200a, 0x2091, 0x4080, 0x7007, 0x0001, 0x700b,
++      0x0000, 0x012e, 0x2069, 0xc93a, 0x683c, 0xa005, 0x03f8, 0x11f0,
++      0x0126, 0x2091, 0x8000, 0x2069, 0x0000, 0x6934, 0x2001, 0xc740,
++      0x2004, 0xa10a, 0x0170, 0x0e04, 0x5985, 0x2069, 0x0000, 0x6818,
++      0xd084, 0x1158, 0x2009, 0x8040, 0x6922, 0x681b, 0x0001, 0x2091,
++      0x4080, 0x2069, 0xc93a, 0x683f, 0xffff, 0x012e, 0x2069, 0xc600,
++      0x6848, 0x6968, 0xa102, 0x2069, 0xc87b, 0x688a, 0x6984, 0x701c,
++      0xa06d, 0x0120, 0x81ff, 0x0904, 0x59db, 0x00a0, 0x81ff, 0x0904,
++      0x5aa1, 0x2071, 0xc87b, 0x7184, 0x7088, 0xa10a, 0x1258, 0x7190,
++      0x2071, 0xc93a, 0x7038, 0xa005, 0x0128, 0x1b04, 0x5aa1, 0x713a,
++      0x0804, 0x5aa1, 0x2071, 0xc87b, 0x718c, 0x0126, 0x2091, 0x8000,
++      0x7084, 0xa10a, 0x0a04, 0x5abc, 0x0e04, 0x5a5d, 0x2071, 0x0000,
++      0x7018, 0xd084, 0x1904, 0x5a5d, 0x2001, 0xffff, 0x2071, 0xc93a,
++      0x703a, 0x2071, 0xc87b, 0x7000, 0xa086, 0x0002, 0x1150, 0x080c,
++      0x5b75, 0x2071, 0x0000, 0x701b, 0x0001, 0x2091, 0x4080, 0x0804,
++      0x5a5d, 0x080c, 0x5b9f, 0x2071, 0x0000, 0x701b, 0x0001, 0x2091,
++      0x4080, 0x0804, 0x5a5d, 0x2071, 0xc87b, 0x7000, 0xa005, 0x0904,
++      0x5a83, 0x6934, 0xa186, 0x0103, 0x1904, 0x5a60, 0x684c, 0xd0bc,
++      0x1904, 0x5a83, 0x6948, 0x6844, 0xa105, 0x1904, 0x5a78, 0x2009,
++      0x8020, 0x2071, 0xc87b, 0x7000, 0x0002, 0x5a83, 0x5a43, 0x5a1b,
++      0x5a2d, 0x59fa, 0x0136, 0x0146, 0x0156, 0x2099, 0xc676, 0x20a1,
++      0xc8cc, 0x20a9, 0x0004, 0x53a3, 0x015e, 0x014e, 0x013e, 0x2071,
++      0xc8c3, 0xad80, 0x000f, 0x700e, 0x7013, 0x0002, 0x7007, 0x0002,
++      0x700b, 0x0000, 0x2e10, 0x080c, 0x164d, 0x2071, 0xc734, 0x7007,
++      0x0009, 0x0804, 0x5aa1, 0x7084, 0x8008, 0xa092, 0x001e, 0x1a04,
++      0x5aa1, 0xae90, 0x0003, 0xa210, 0x683c, 0x2012, 0x7186, 0x2071,
++      0xc734, 0x080c, 0x5bf6, 0x0804, 0x5aa1, 0x7084, 0x8008, 0xa092,
++      0x000f, 0x1a04, 0x5aa1, 0xae90, 0x0003, 0x8003, 0xa210, 0x683c,
++      0x2012, 0x8210, 0x6840, 0x2012, 0x7186, 0x2071, 0xc734, 0x080c,
++      0x5bf6, 0x0804, 0x5aa1, 0x0126, 0x2091, 0x8000, 0x0e04, 0x5a5d,
++      0x2071, 0x0000, 0x7018, 0xd084, 0x1180, 0x7122, 0x683c, 0x7026,
++      0x6840, 0x702a, 0x701b, 0x0001, 0x2091, 0x4080, 0x012e, 0x2071,
++      0xc734, 0x080c, 0x5bf6, 0x0804, 0x5aa1, 0x012e, 0x0804, 0x5aa1,
++      0xa18c, 0x00ff, 0xa186, 0x0017, 0x0130, 0xa186, 0x001e, 0x0118,
++      0xa18e, 0x001f, 0x11c0, 0x684c, 0xd0cc, 0x01a8, 0x6850, 0xa084,
++      0x00ff, 0xa086, 0x0001, 0x1178, 0x2009, 0x8021, 0x0804, 0x59f1,
++      0x6844, 0xa086, 0x0100, 0x1138, 0x6868, 0xa005, 0x1120, 0x2009,
++      0x8020, 0x0804, 0x59f1, 0x2071, 0xc734, 0x080c, 0x5c08, 0x01c8,
++      0x2071, 0xc734, 0x700f, 0x0001, 0x6934, 0xa184, 0x00ff, 0xa086,
++      0x0003, 0x1130, 0x810f, 0xa18c, 0x00ff, 0x8101, 0x0108, 0x710e,
++      0x7007, 0x0003, 0x080c, 0x5c21, 0x7050, 0xa086, 0x0100, 0x0904,
++      0x5b61, 0x0126, 0x2091, 0x8000, 0x2071, 0xc734, 0x7008, 0xa086,
++      0x0001, 0x1180, 0x0e04, 0x5aba, 0x2009, 0x000d, 0x7030, 0x200a,
++      0x2091, 0x4080, 0x700b, 0x0000, 0x7004, 0xa086, 0x0006, 0x1110,
++      0x7007, 0x0001, 0x012e, 0x0005, 0x2071, 0xc734, 0x080c, 0x5c08,
++      0x0518, 0x2071, 0xc87b, 0x7084, 0x700a, 0x20a9, 0x0020, 0x2099,
++      0xc87c, 0x20a1, 0xc8a3, 0x53a3, 0x7087, 0x0000, 0x2071, 0xc734,
++      0x2069, 0xc8c3, 0x706c, 0x6826, 0x7070, 0x682a, 0x7074, 0x682e,
++      0x7078, 0x6832, 0x2d10, 0x080c, 0x164d, 0x7007, 0x0008, 0x2001,
++      0xffff, 0x2071, 0xc93a, 0x703a, 0x012e, 0x0804, 0x5aa1, 0x2069,
++      0xc8c3, 0x6808, 0xa08e, 0x0000, 0x0904, 0x5b3c, 0xa08e, 0x0200,
++      0x0904, 0x5b3a, 0xa08e, 0x0100, 0x1904, 0x5b3c, 0x0126, 0x2091,
++      0x8000, 0x0e04, 0x5b38, 0x2069, 0x0000, 0x6818, 0xd084, 0x15c0,
++      0x702c, 0x7130, 0x8108, 0xa102, 0x0230, 0xa00e, 0x7034, 0x706e,
++      0x7038, 0x7072, 0x0048, 0x706c, 0xa080, 0x0040, 0x706e, 0x1220,
++      0x7070, 0xa081, 0x0000, 0x7072, 0x7132, 0x6936, 0x700b, 0x0000,
++      0x2001, 0xc8a0, 0x2004, 0xa005, 0x1190, 0x6934, 0x2069, 0xc87b,
++      0x689c, 0x699e, 0x2069, 0xc93a, 0xa102, 0x1118, 0x683c, 0xa005,
++      0x1368, 0x2001, 0xc8a1, 0x200c, 0x810d, 0x693e, 0x0038, 0x2009,
++      0x8040, 0x6922, 0x681b, 0x0001, 0x2091, 0x4080, 0x7007, 0x0001,
++      0x012e, 0x0010, 0x7007, 0x0005, 0x0005, 0x2001, 0xc8c5, 0x2004,
++      0xa08e, 0x0100, 0x1128, 0x7007, 0x0001, 0x080c, 0x5bf6, 0x0005,
++      0xa08e, 0x0000, 0x0de0, 0xa08e, 0x0200, 0x1dc8, 0x7007, 0x0005,
++      0x0005, 0x701c, 0xa06d, 0x0158, 0x080c, 0x5c08, 0x0140, 0x7007,
++      0x0003, 0x080c, 0x5c21, 0x7050, 0xa086, 0x0100, 0x0110, 0x0005,
++      0x0005, 0x7050, 0xa09e, 0x0100, 0x1118, 0x7007, 0x0004, 0x0030,
++      0xa086, 0x0200, 0x1110, 0x7007, 0x0005, 0x0005, 0x080c, 0x5bc4,
++      0x7006, 0x080c, 0x5bf6, 0x0005, 0x0005, 0x00e6, 0x0156, 0x2071,
++      0xc87b, 0x7184, 0x81ff, 0x0500, 0xa006, 0x7086, 0xae80, 0x0003,
++      0x2071, 0x0000, 0x21a8, 0x2014, 0x7226, 0x8000, 0x0f04, 0x5b99,
++      0x2014, 0x722a, 0x8000, 0x0f04, 0x5b99, 0x2014, 0x722e, 0x8000,
++      0x0f04, 0x5b99, 0x2014, 0x723a, 0x8000, 0x0f04, 0x5b99, 0x2014,
++      0x723e, 0xa180, 0x8030, 0x7022, 0x015e, 0x00ee, 0x0005, 0x00e6,
++      0x0156, 0x2071, 0xc87b, 0x7184, 0x81ff, 0x01d8, 0xa006, 0x7086,
++      0xae80, 0x0003, 0x2071, 0x0000, 0x21a8, 0x2014, 0x7226, 0x8000,
++      0x2014, 0x722a, 0x8000, 0x0f04, 0x5bbb, 0x2014, 0x723a, 0x8000,
++      0x2014, 0x723e, 0x0018, 0x2001, 0x8020, 0x0010, 0x2001, 0x8042,
++      0x7022, 0x015e, 0x00ee, 0x0005, 0x702c, 0x7130, 0x8108, 0xa102,
++      0x0230, 0xa00e, 0x7034, 0x706e, 0x7038, 0x7072, 0x0048, 0x706c,
++      0xa080, 0x0040, 0x706e, 0x1220, 0x7070, 0xa081, 0x0000, 0x7072,
++      0x7132, 0x700c, 0x8001, 0x700e, 0x1180, 0x0126, 0x2091, 0x8000,
++      0x0e04, 0x5bf0, 0x2001, 0x000d, 0x2102, 0x2091, 0x4080, 0x2001,
++      0x0001, 0x700b, 0x0000, 0x012e, 0x0005, 0x2001, 0x0007, 0x0005,
++      0x2001, 0x0006, 0x700b, 0x0001, 0x012e, 0x0005, 0x701c, 0xa06d,
++      0x0170, 0x0126, 0x2091, 0x8000, 0x7010, 0x8001, 0x7012, 0x2d04,
++      0x701e, 0xa005, 0x1108, 0x701a, 0x012e, 0x080c, 0x1619, 0x0005,
++      0x2019, 0x000d, 0x2304, 0x230c, 0xa10e, 0x0130, 0x2304, 0x230c,
++      0xa10e, 0x0110, 0xa006, 0x0060, 0x732c, 0x8319, 0x7130, 0xa102,
++      0x1118, 0x2300, 0xa005, 0x0020, 0x0210, 0xa302, 0x0008, 0x8002,
++      0x0005, 0x2d00, 0x7026, 0xa080, 0x000d, 0x7056, 0x7053, 0x0000,
++      0x0126, 0x2091, 0x8000, 0x2009, 0xc959, 0x2104, 0xc08d, 0x200a,
++      0x012e, 0x080c, 0x1669, 0x0005, 0x708c, 0xa08a, 0x0029, 0x1220,
++      0xa082, 0x001d, 0x0033, 0x0010, 0x080c, 0x1519, 0x6027, 0x1e00,
++      0x0005, 0x5d2f, 0x5caa, 0x5cc2, 0x5cff, 0x5d20, 0x5d5a, 0x5d6c,
++      0x5cc2, 0x5d46, 0x5c4e, 0x5c7c, 0x5c4d, 0x0005, 0x00d6, 0x2069,
++      0x0200, 0x6804, 0xa005, 0x1180, 0x6808, 0xa005, 0x1518, 0x708f,
++      0x0028, 0x2069, 0xc90c, 0x2d04, 0x7002, 0x080c, 0x6024, 0x6028,
++      0xa085, 0x0600, 0x602a, 0x00b0, 0x708f, 0x0028, 0x2069, 0xc90c,
++      0x2d04, 0x7002, 0x6028, 0xa085, 0x0600, 0x602a, 0x00e6, 0x0036,
++      0x0046, 0x0056, 0x2071, 0xc96a, 0x080c, 0x1ec3, 0x005e, 0x004e,
++      0x003e, 0x00ee, 0x00de, 0x0005, 0x00d6, 0x2069, 0x0200, 0x6804,
++      0xa005, 0x1180, 0x6808, 0xa005, 0x1518, 0x708f, 0x0028, 0x2069,
++      0xc90c, 0x2d04, 0x7002, 0x080c, 0x60b1, 0x6028, 0xa085, 0x0600,
++      0x602a, 0x00b0, 0x708f, 0x0028, 0x2069, 0xc90c, 0x2d04, 0x7002,
++      0x6028, 0xa085, 0x0600, 0x602a, 0x00e6, 0x0036, 0x0046, 0x0056,
++      0x2071, 0xc96a, 0x080c, 0x1ec3, 0x005e, 0x004e, 0x003e, 0x00ee,
++      0x00de, 0x0005, 0x6803, 0x0090, 0x6124, 0xd1e4, 0x1190, 0x080c,
++      0x5dd7, 0xd1d4, 0x1160, 0xd1dc, 0x1138, 0xd1cc, 0x0150, 0x708f,
++      0x0020, 0x080c, 0x5dd7, 0x0028, 0x708f, 0x001d, 0x0010, 0x708f,
++      0x001f, 0x0005, 0x6803, 0x0088, 0x6124, 0xd1cc, 0x1590, 0xd1dc,
++      0x1568, 0xd1e4, 0x1540, 0xa184, 0x1e00, 0x1580, 0x60e3, 0x0001,
++      0x600c, 0xc0b4, 0x600e, 0x080c, 0x5f52, 0x080c, 0x25fb, 0x0156,
++      0x6803, 0x0100, 0x20a9, 0x0014, 0x6804, 0xd0dc, 0x1118, 0x1f04,
++      0x5cdc, 0x0048, 0x20a9, 0x0014, 0x6803, 0x0080, 0x6804, 0xd0d4,
++      0x1130, 0x1f04, 0x5ce6, 0x080c, 0x5f73, 0x015e, 0x0078, 0x015e,
++      0x708f, 0x0028, 0x0058, 0x708f, 0x001e, 0x0040, 0x708f, 0x001d,
++      0x0028, 0x708f, 0x0020, 0x0010, 0x708f, 0x001f, 0x0005, 0x60e3,
++      0x0001, 0x600c, 0xc0b4, 0x600e, 0x080c, 0x5f52, 0x080c, 0x25fb,
++      0x6803, 0x0080, 0x6124, 0xd1d4, 0x1180, 0xd1dc, 0x1158, 0xd1e4,
++      0x1130, 0xa184, 0x1e00, 0x1158, 0x708f, 0x0028, 0x0040, 0x708f,
++      0x001e, 0x0028, 0x708f, 0x001d, 0x0010, 0x708f, 0x001f, 0x0005,
++      0x6803, 0x00a0, 0x6124, 0xd1dc, 0x1138, 0xd1e4, 0x0138, 0x080c,
++      0x1f06, 0x708f, 0x001e, 0x0010, 0x708f, 0x001d, 0x0005, 0x080c,
++      0x5e49, 0x6124, 0xd1dc, 0x1188, 0x080c, 0x5dd7, 0x0016, 0x080c,
++      0x1f06, 0x001e, 0xd1d4, 0x1128, 0xd1e4, 0x0138, 0x708f, 0x001e,
++      0x0020, 0x708f, 0x001f, 0x080c, 0x5dd7, 0x0005, 0x6803, 0x00a0,
++      0x6124, 0xd1d4, 0x1160, 0xd1cc, 0x1150, 0xd1dc, 0x1128, 0xd1e4,
++      0x0140, 0x708f, 0x001e, 0x0028, 0x708f, 0x001d, 0x0010, 0x708f,
++      0x0021, 0x0005, 0x080c, 0x5e49, 0x6124, 0xd1d4, 0x1150, 0xd1dc,
++      0x1128, 0xd1e4, 0x0140, 0x708f, 0x001e, 0x0028, 0x708f, 0x001d,
++      0x0010, 0x708f, 0x001f, 0x0005, 0x6803, 0x0090, 0x6124, 0xd1d4,
++      0x1178, 0xd1cc, 0x1150, 0xd1dc, 0x1128, 0xd1e4, 0x0158, 0x708f,
++      0x001e, 0x0040, 0x708f, 0x001d, 0x0028, 0x708f, 0x0020, 0x0010,
++      0x708f, 0x001f, 0x0005, 0x0016, 0x00c6, 0x00d6, 0x00e6, 0x0126,
++      0x2061, 0x0100, 0x2069, 0x0140, 0x2071, 0xc600, 0x2091, 0x8000,
++      0x080c, 0x5f22, 0x11e8, 0x2001, 0xc60c, 0x200c, 0xd1b4, 0x01c0,
++      0xc1b4, 0x2102, 0x6027, 0x0200, 0xe000, 0xe000, 0x6024, 0xd0cc,
++      0x0158, 0x6803, 0x00a0, 0x2001, 0xc8e6, 0x2003, 0x0001, 0x2001,
++      0xc600, 0x2003, 0x0001, 0x0428, 0x6028, 0xc0cd, 0x602a, 0x0408,
++      0x080c, 0x5f3e, 0x0150, 0x080c, 0x5f34, 0x1138, 0x2001, 0x0001,
++      0x080c, 0x296d, 0x080c, 0x5ef9, 0x00a0, 0x080c, 0x5e46, 0x0178,
++      0x2001, 0x0001, 0x080c, 0x296d, 0x708c, 0xa086, 0x001e, 0x0120,
++      0x708c, 0xa086, 0x0022, 0x1118, 0x708f, 0x0025, 0x0010, 0x708f,
++      0x0021, 0x012e, 0x00ee, 0x00de, 0x00ce, 0x001e, 0x0005, 0x0026,
++      0x2011, 0x5de8, 0x080c, 0x7070, 0x002e, 0x0016, 0x0026, 0x2009,
++      0x0064, 0x2011, 0x5de8, 0x080c, 0x7067, 0x002e, 0x001e, 0x0005,
++      0x00e6, 0x00f6, 0x0016, 0x080c, 0x8bf5, 0x2071, 0xc600, 0x080c,
++      0x5d83, 0x001e, 0x00fe, 0x00ee, 0x0005, 0x0016, 0x0026, 0x0036,
++      0x00c6, 0x00d6, 0x00e6, 0x00f6, 0x0126, 0x080c, 0x8bf5, 0x2061,
++      0x0100, 0x2069, 0x0140, 0x2071, 0xc600, 0x2091, 0x8000, 0x6028,
++      0xc09c, 0x602a, 0x2011, 0x0003, 0x080c, 0x8f0e, 0x2011, 0x0002,
++      0x080c, 0x8f18, 0x080c, 0x8dee, 0x080c, 0x7024, 0x0036, 0x2019,
++      0x0000, 0x080c, 0x8e79, 0x003e, 0x60e3, 0x0000, 0x080c, 0xc586,
++      0x080c, 0xc5a1, 0x2001, 0xc600, 0x2003, 0x0004, 0x6027, 0x0008,
++      0x080c, 0x12e1, 0x2001, 0x0001, 0x080c, 0x296d, 0x012e, 0x00fe,
++      0x00ee, 0x00de, 0x00ce, 0x003e, 0x002e, 0x001e, 0x0005, 0x2001,
++      0xc600, 0x2004, 0xa086, 0x0004, 0x0140, 0x2001, 0xc8e5, 0x2003,
++      0xaaaa, 0x2001, 0xc8e6, 0x2003, 0x0000, 0x0005, 0x6020, 0xd09c,
++      0x0005, 0x6800, 0xa086, 0x00c0, 0x0160, 0x6803, 0x00c0, 0x0156,
++      0x20a9, 0x002d, 0x1d04, 0x5e52, 0x2091, 0x6000, 0x1f04, 0x5e52,
++      0x015e, 0x0005, 0x00c6, 0x00d6, 0x00e6, 0x2061, 0x0100, 0x2069,
++      0x0140, 0x2071, 0xc600, 0x2001, 0xc8e6, 0x200c, 0xa186, 0x0000,
++      0x0158, 0xa186, 0x0001, 0x0158, 0xa186, 0x0002, 0x0158, 0xa186,
++      0x0003, 0x0158, 0x0804, 0x5ee7, 0x708f, 0x0022, 0x0040, 0x708f,
++      0x0021, 0x0028, 0x708f, 0x0023, 0x0020, 0x708f, 0x0024, 0x6043,
++      0x0000, 0x60e3, 0x0000, 0x6887, 0x0001, 0x2001, 0x0001, 0x080c,
++      0x2a1c, 0x0026, 0x2011, 0x0003, 0x080c, 0x8f0e, 0x2011, 0x0002,
++      0x080c, 0x8f18, 0x080c, 0x8dee, 0x0036, 0x2019, 0x0000, 0x080c,
++      0x8e79, 0x003e, 0x002e, 0x7000, 0xa08e, 0x0004, 0x0118, 0x602b,
++      0x0028, 0x0010, 0x602b, 0x0020, 0x0156, 0x0126, 0x2091, 0x8000,
++      0x20a9, 0x0005, 0x6024, 0xd0ac, 0x0120, 0x012e, 0x015e, 0x0804,
++      0x5ef5, 0x6800, 0xa084, 0x00a0, 0xc0bd, 0x6802, 0x6904, 0xd1d4,
++      0x1130, 0x6803, 0x0100, 0x1f04, 0x5eaa, 0x080c, 0x5f73, 0x012e,
++      0x015e, 0x080c, 0x5f34, 0x01a8, 0x6044, 0xa005, 0x0168, 0x6050,
++      0x0006, 0xa085, 0x0020, 0x6052, 0x080c, 0x5f73, 0xa006, 0x8001,
++      0x1df0, 0x000e, 0x6052, 0x0028, 0x6804, 0xd0d4, 0x1110, 0x080c,
++      0x5f73, 0x0016, 0x0026, 0x2009, 0x00c8, 0x2011, 0x5df5, 0x080c,
++      0x7036, 0x002e, 0x001e, 0x2001, 0xc8e6, 0x2003, 0x0004, 0x080c,
++      0x5c34, 0x080c, 0x5f34, 0x0148, 0x6804, 0xd0d4, 0x1130, 0xd0dc,
++      0x1100, 0x2001, 0xc8e6, 0x2003, 0x0000, 0x00ee, 0x00de, 0x00ce,
++      0x0005, 0x00c6, 0x00d6, 0x00e6, 0x2061, 0x0100, 0x2069, 0x0140,
++      0x2071, 0xc600, 0x2001, 0xc8e5, 0x2003, 0x0000, 0x2001, 0xc8d6,
++      0x2003, 0x0000, 0x708f, 0x0000, 0x60e3, 0x0000, 0x6887, 0x0000,
++      0x2001, 0x0000, 0x080c, 0x2a1c, 0x6803, 0x0000, 0x6043, 0x0090,
++      0x6043, 0x0010, 0x6027, 0xffff, 0x602b, 0x182f, 0x00ee, 0x00de,
++      0x00ce, 0x0005, 0x0006, 0x2001, 0xc8e5, 0x2004, 0xa086, 0xaaaa,
++      0x000e, 0x0005, 0x0006, 0x2001, 0xc672, 0x2004, 0xa084, 0x0030,
++      0xa086, 0x0000, 0x000e, 0x0005, 0x0006, 0x2001, 0xc672, 0x2004,
++      0xa084, 0x0030, 0xa086, 0x0030, 0x000e, 0x0005, 0x0006, 0x2001,
++      0xc672, 0x2004, 0xa084, 0x0030, 0xa086, 0x0010, 0x000e, 0x0005,
++      0x0006, 0x2001, 0xc672, 0x2004, 0xa084, 0x0030, 0xa086, 0x0020,
++      0x000e, 0x0005, 0x2001, 0xc60c, 0x2004, 0xd0a4, 0x0170, 0x080c,
++      0x2a3c, 0x0036, 0x0016, 0x2009, 0x0000, 0x2019, 0x0028, 0x080c,
++      0x2e19, 0x001e, 0x003e, 0xa006, 0x0009, 0x0005, 0x00e6, 0x2071,
++      0xc60c, 0x2e04, 0x0118, 0xa085, 0x0010, 0x0010, 0xa084, 0xffef,
++      0x2072, 0x00ee, 0x0005, 0x6050, 0x0006, 0x60f0, 0x0006, 0x60ec,
++      0x0006, 0x600c, 0x0006, 0x6004, 0x0006, 0x6028, 0x0006, 0x602f,
++      0x0100, 0x602f, 0x0000, 0x602f, 0x0040, 0x602f, 0x0000, 0x000e,
++      0x602a, 0x000e, 0x6006, 0x000e, 0x600e, 0x000e, 0x60ee, 0x000e,
++      0x60f2, 0x60e3, 0x0000, 0x6887, 0x0001, 0x2001, 0x0001, 0x080c,
++      0x2a1c, 0x6800, 0xa084, 0x00a0, 0xc0bd, 0x6802, 0x6803, 0x00a0,
++      0x000e, 0x6052, 0x6050, 0x0005, 0x0156, 0x0016, 0x0026, 0x0036,
++      0x00c6, 0x00d6, 0x00e6, 0x2061, 0x0100, 0x2069, 0x0140, 0x2071,
++      0xc600, 0x6020, 0xa084, 0x0080, 0x0138, 0x2001, 0xc60c, 0x200c,
++      0xc1bd, 0x2102, 0x0804, 0x601c, 0x2001, 0xc60c, 0x200c, 0xc1bc,
++      0x2102, 0x6028, 0xa084, 0xe1ff, 0x602a, 0x6027, 0x0200, 0x6803,
++      0x0090, 0x20a9, 0x0384, 0x6024, 0xd0cc, 0x1508, 0x1d04, 0x5fcb,
++      0x2091, 0x6000, 0x1f04, 0x5fcb, 0x2011, 0x0003, 0x080c, 0x8f0e,
++      0x2011, 0x0002, 0x080c, 0x8f18, 0x080c, 0x8dee, 0x2019, 0x0000,
++      0x080c, 0x8e79, 0x6803, 0x00a0, 0x2001, 0xc8e6, 0x2003, 0x0001,
++      0x2001, 0xc600, 0x2003, 0x0001, 0xa085, 0x0001, 0x0468, 0x86ff,
++      0x1120, 0x080c, 0x1f06, 0x080c, 0x25fb, 0x60e3, 0x0000, 0x2001,
++      0xc8d6, 0x2004, 0x080c, 0x2a1c, 0x60e2, 0x6803, 0x0080, 0x20a9,
++      0x0384, 0x6027, 0x1e00, 0x2009, 0x1e00, 0xe000, 0x6024, 0xa10c,
++      0x0138, 0x1d04, 0x6001, 0x2091, 0x6000, 0x1f04, 0x6001, 0x0820,
++      0x6028, 0xa085, 0x1e00, 0x602a, 0x70a4, 0xa005, 0x1118, 0x6887,
++      0x0001, 0x0008, 0x6886, 0xa006, 0x00ee, 0x00de, 0x00ce, 0x003e,
++      0x002e, 0x001e, 0x015e, 0x0005, 0x0156, 0x0016, 0x0026, 0x0036,
++      0x00c6, 0x00d6, 0x00e6, 0x2061, 0x0100, 0x2071, 0xc600, 0x2069,
++      0x0140, 0x6020, 0xa084, 0x00c0, 0x0120, 0x6884, 0xa005, 0x1904,
++      0x6078, 0x6803, 0x0088, 0x60e3, 0x0000, 0x6887, 0x0000, 0x2001,
++      0x0000, 0x080c, 0x2a1c, 0x2069, 0x0200, 0x6804, 0xa005, 0x1118,
++      0x6808, 0xa005, 0x01c0, 0x6028, 0xa084, 0xfbff, 0x602a, 0x6027,
++      0x0400, 0x2069, 0xc90c, 0x7000, 0x206a, 0x708f, 0x0026, 0x7003,
++      0x0001, 0x20a9, 0x0002, 0x1d04, 0x605b, 0x2091, 0x6000, 0x1f04,
++      0x605b, 0x0804, 0x60a9, 0x2069, 0x0140, 0x20a9, 0x0384, 0x6027,
++      0x1e00, 0x2009, 0x1e00, 0xe000, 0x6024, 0xa10c, 0x0520, 0xa084,
++      0x1a00, 0x1508, 0x1d04, 0x6067, 0x2091, 0x6000, 0x1f04, 0x6067,
++      0x2011, 0x0003, 0x080c, 0x8f0e, 0x2011, 0x0002, 0x080c, 0x8f18,
++      0x080c, 0x8dee, 0x2019, 0x0000, 0x080c, 0x8e79, 0x6803, 0x00a0,
++      0x2001, 0xc8e6, 0x2003, 0x0001, 0x2001, 0xc600, 0x2003, 0x0001,
++      0xa085, 0x0001, 0x00b0, 0x080c, 0x25fb, 0x6803, 0x0080, 0x2069,
++      0x0140, 0x60e3, 0x0000, 0x70a4, 0xa005, 0x1118, 0x6887, 0x0001,
++      0x0008, 0x6886, 0x2001, 0xc8d6, 0x2004, 0x080c, 0x2a1c, 0x60e2,
++      0xa006, 0x00ee, 0x00de, 0x00ce, 0x003e, 0x002e, 0x001e, 0x015e,
++      0x0005, 0x0156, 0x0016, 0x0026, 0x0036, 0x00c6, 0x00d6, 0x00e6,
++      0x2061, 0x0100, 0x2071, 0xc600, 0x6020, 0xa084, 0x00c0, 0x01e0,
++      0x2011, 0x0003, 0x080c, 0x8f0e, 0x2011, 0x0002, 0x080c, 0x8f18,
++      0x080c, 0x8dee, 0x2019, 0x0000, 0x080c, 0x8e79, 0x2069, 0x0140,
++      0x6803, 0x00a0, 0x2001, 0xc8e6, 0x2003, 0x0001, 0x2001, 0xc600,
++      0x2003, 0x0001, 0x0804, 0x614e, 0x2001, 0xc60c, 0x200c, 0xd1b4,
++      0x1160, 0xc1b5, 0x2102, 0x080c, 0x5ddd, 0x2069, 0x0140, 0x080c,
++      0x25fb, 0x6803, 0x0080, 0x60e3, 0x0000, 0x2069, 0x0200, 0x6804,
++      0xa005, 0x1118, 0x6808, 0xa005, 0x01c0, 0x6028, 0xa084, 0xfdff,
++      0x602a, 0x6027, 0x0200, 0x2069, 0xc90c, 0x7000, 0x206a, 0x708f,
++      0x0027, 0x7003, 0x0001, 0x20a9, 0x0002, 0x1d04, 0x6105, 0x2091,
++      0x6000, 0x1f04, 0x6105, 0x0804, 0x614e, 0x6027, 0x1e00, 0x2009,
++      0x1e00, 0xe000, 0x6024, 0xa10c, 0x01c8, 0xa084, 0x1c00, 0x11b0,
++      0x1d04, 0x610d, 0x0006, 0x0016, 0x00c6, 0x00d6, 0x00e6, 0x080c,
++      0x6f0a, 0x00ee, 0x00de, 0x00ce, 0x001e, 0x000e, 0x00e6, 0x2071,
++      0xc93a, 0x7018, 0x00ee, 0xa005, 0x1d00, 0x0500, 0x0026, 0x2011,
++      0x5df5, 0x080c, 0x6fad, 0x2011, 0x5de8, 0x080c, 0x7070, 0x002e,
++      0x2069, 0x0140, 0x60e3, 0x0000, 0x70a4, 0xa005, 0x1118, 0x6887,
++      0x0001, 0x0008, 0x6886, 0x2001, 0xc8d6, 0x2004, 0x080c, 0x2a1c,
++      0x60e2, 0x2001, 0xc60c, 0x200c, 0xc1b4, 0x2102, 0x00ee, 0x00de,
++      0x00ce, 0x003e, 0x002e, 0x001e, 0x015e, 0x0005, 0x0156, 0x0016,
++      0x0026, 0x0036, 0x0046, 0x00c6, 0x00e6, 0x2061, 0x0100, 0x2071,
++      0xc600, 0x7130, 0xd184, 0x1180, 0x2011, 0xc653, 0x2214, 0xd2ec,
++      0x0138, 0xc18d, 0x7132, 0x2011, 0xc653, 0x2214, 0xd2ac, 0x1120,
++      0x7030, 0xd08c, 0x0904, 0x61bb, 0x7130, 0xc185, 0x7132, 0x2011,
++      0xc653, 0x220c, 0xd1a4, 0x0530, 0x0016, 0x2019, 0x000e, 0x080c,
++      0xc10d, 0x0156, 0x20a9, 0x007f, 0x2009, 0x0000, 0xa186, 0x007e,
++      0x01a0, 0xa186, 0x0080, 0x0188, 0x080c, 0x533d, 0x1170, 0x8127,
++      0xa006, 0x0016, 0x2009, 0x000e, 0x080c, 0xc190, 0x2009, 0x0001,
++      0x2011, 0x0100, 0x080c, 0x712e, 0x001e, 0x8108, 0x1f04, 0x6186,
++      0x015e, 0x001e, 0xd1ac, 0x1148, 0x0016, 0x2009, 0x0000, 0x2019,
++      0x0004, 0x080c, 0x2e19, 0x001e, 0x0070, 0x0156, 0x20a9, 0x007f,
++      0x2009, 0x0000, 0x080c, 0x533d, 0x1110, 0x080c, 0x4f47, 0x8108,
++      0x1f04, 0x61b2, 0x015e, 0x080c, 0x1f06, 0x2011, 0x0003, 0x080c,
++      0x8f0e, 0x2011, 0x0002, 0x080c, 0x8f18, 0x080c, 0x8dee, 0x0036,
++      0x2019, 0x0000, 0x080c, 0x8e79, 0x003e, 0x60e3, 0x0000, 0x2001,
++      0xc600, 0x2003, 0x0001, 0x080c, 0x5e5a, 0x00ee, 0x00ce, 0x004e,
++      0x003e, 0x002e, 0x001e, 0x015e, 0x0005, 0x2071, 0xc702, 0x7003,
++      0x0000, 0x7007, 0x0000, 0x700f, 0x0000, 0x702b, 0x0001, 0x704f,
++      0x0000, 0x7053, 0x0001, 0x705f, 0x0020, 0x7063, 0x0040, 0x7083,
++      0x0000, 0x708b, 0x0000, 0x708f, 0x0001, 0x70bf, 0x0000, 0x0005,
++      0x00e6, 0x2071, 0xc702, 0x6848, 0xa005, 0x1130, 0x7028, 0xc085,
++      0x702a, 0xa085, 0x0001, 0x0428, 0x6a50, 0x7236, 0x6b54, 0x733a,
++      0x6858, 0x703e, 0x707a, 0x685c, 0x7042, 0x707e, 0x6848, 0x702e,
++      0x6840, 0x7032, 0x2009, 0x000c, 0x200a, 0x8007, 0x8006, 0x8006,
++      0xa08c, 0x003f, 0xa084, 0xffc0, 0xa210, 0x2100, 0xa319, 0x7272,
++      0x7376, 0x7028, 0xc084, 0x702a, 0x7007, 0x0001, 0x700f, 0x0000,
++      0xa006, 0x00ee, 0x0005, 0x2b78, 0x2071, 0xc702, 0x7004, 0x0043,
++      0x700c, 0x0002, 0x6237, 0x622e, 0x622e, 0x622e, 0x622e, 0x0005,
++      0x628d, 0x628e, 0x62c0, 0x62c1, 0x628b, 0x630f, 0x6314, 0x6345,
++      0x6346, 0x6361, 0x6362, 0x6363, 0x6364, 0x6365, 0x6366, 0x6431,
++      0x6458, 0x700c, 0x0002, 0x6250, 0x628b, 0x628b, 0x628c, 0x628c,
++      0x7830, 0x7930, 0xa106, 0x0120, 0x7830, 0x7930, 0xa106, 0x1510,
++      0x7030, 0xa10a, 0x01f8, 0x1210, 0x712c, 0xa10a, 0xa18a, 0x0002,
++      0x12d0, 0x080c, 0x15e5, 0x01b0, 0x2d00, 0x705a, 0x7063, 0x0040,
++      0x2001, 0x0003, 0x7057, 0x0000, 0x0126, 0x0006, 0x2091, 0x8000,
++      0x2009, 0xc959, 0x2104, 0xc085, 0x200a, 0x000e, 0x700e, 0x012e,
++      0x080c, 0x1669, 0x0005, 0x080c, 0x15e5, 0x0de0, 0x2d00, 0x705a,
++      0x080c, 0x15e5, 0x1108, 0x0c10, 0x2d00, 0x7086, 0x7063, 0x0080,
++      0x2001, 0x0004, 0x08f8, 0x0005, 0x0005, 0x0005, 0x700c, 0x0002,
++      0x6295, 0x6298, 0x62a6, 0x62bf, 0x62bf, 0x080c, 0x6249, 0x0005,
++      0x0126, 0x8001, 0x700e, 0x7058, 0x0006, 0x080c, 0x67d4, 0x0120,
++      0x2091, 0x8000, 0x080c, 0x6249, 0x00de, 0x0048, 0x0126, 0x8001,
++      0x700e, 0x080c, 0x67d4, 0x7058, 0x2068, 0x7084, 0x705a, 0x6803,
++      0x0000, 0x6807, 0x0000, 0x6834, 0xa084, 0x00ff, 0xa08a, 0x003a,
++      0x1218, 0x00db, 0x012e, 0x0005, 0x012e, 0x080c, 0x6367, 0x0005,
++      0x0005, 0x0005, 0x00e6, 0x2071, 0xc702, 0x700c, 0x0002, 0x62cc,
++      0x62cc, 0x62cc, 0x62ce, 0x62d1, 0x00ee, 0x0005, 0x700f, 0x0001,
++      0x0010, 0x700f, 0x0002, 0x00ee, 0x0005, 0x6367, 0x6367, 0x6383,
++      0x6367, 0x653e, 0x6367, 0x6367, 0x6367, 0x6367, 0x6367, 0x6383,
++      0x6580, 0x65c3, 0x660c, 0x6620, 0x6367, 0x6367, 0x639f, 0x6383,
++      0x63b3, 0x6367, 0x640e, 0x66cc, 0x66e7, 0x6367, 0x639f, 0x6367,
++      0x63b3, 0x6367, 0x6367, 0x6404, 0x66e7, 0x6367, 0x6367, 0x6367,
++      0x6367, 0x6367, 0x6367, 0x6367, 0x6367, 0x6367, 0x63c8, 0x6367,
++      0x6367, 0x6367, 0x6367, 0x6367, 0x6367, 0x6367, 0x6367, 0x6367,
++      0x6866, 0x6367, 0x67f2, 0x6367, 0x67f2, 0x6367, 0x63dd, 0x7020,
++      0x2068, 0x080c, 0x1619, 0x0005, 0x700c, 0x0002, 0x631b, 0x631e,
++      0x632c, 0x6344, 0x6344, 0x080c, 0x6249, 0x0005, 0x0126, 0x8001,
++      0x700e, 0x7058, 0x0006, 0x080c, 0x67d4, 0x0120, 0x2091, 0x8000,
++      0x080c, 0x6249, 0x00de, 0x0048, 0x0126, 0x8001, 0x700e, 0x080c,
++      0x67d4, 0x7058, 0x2068, 0x7084, 0x705a, 0x6803, 0x0000, 0x6807,
++      0x0000, 0x6834, 0xa084, 0x00ff, 0xa08a, 0x001a, 0x1218, 0x003b,
++      0x012e, 0x0005, 0x012e, 0x0419, 0x0005, 0x0005, 0x0005, 0x6367,
++      0x6383, 0x652a, 0x6367, 0x6383, 0x6367, 0x6383, 0x6383, 0x6367,
++      0x6383, 0x652a, 0x6383, 0x6383, 0x6383, 0x6383, 0x6383, 0x6367,
++      0x6383, 0x652a, 0x6367, 0x6367, 0x6383, 0x6367, 0x6367, 0x6367,
++      0x6383, 0x0005, 0x0005, 0x0005, 0x0005, 0x0005, 0x0005, 0x7007,
++      0x0001, 0x6838, 0xa084, 0x00ff, 0xc0d5, 0x683a, 0x0126, 0x2091,
++      0x8000, 0x080c, 0x580a, 0x012e, 0x0005, 0x7007, 0x0001, 0x6838,
++      0xa084, 0x00ff, 0xc0e5, 0x683a, 0x0126, 0x2091, 0x8000, 0x080c,
++      0x580a, 0x012e, 0x0005, 0x7007, 0x0001, 0x6838, 0xa084, 0x00ff,
++      0xc0ed, 0x683a, 0x0126, 0x2091, 0x8000, 0x080c, 0x580a, 0x012e,
++      0x0005, 0x7007, 0x0001, 0x6838, 0xa084, 0x00ff, 0xc0dd, 0x683a,
++      0x0126, 0x2091, 0x8000, 0x080c, 0x580a, 0x012e, 0x0005, 0x6834,
++      0x8007, 0xa084, 0x00ff, 0x0988, 0x8001, 0x1120, 0x7007, 0x0001,
++      0x0804, 0x64c1, 0x7007, 0x0006, 0x7012, 0x2d00, 0x7016, 0x701a,
++      0x704b, 0x64c1, 0x0005, 0x6834, 0x8007, 0xa084, 0x00ff, 0x0904,
++      0x6375, 0x8001, 0x1120, 0x7007, 0x0001, 0x0804, 0x64de, 0x7007,
++      0x0006, 0x7012, 0x2d00, 0x7016, 0x701a, 0x704b, 0x64de, 0x0005,
++      0x6834, 0x8007, 0xa084, 0x00ff, 0x0904, 0x6375, 0x8001, 0x1120,
++      0x7007, 0x0001, 0x0804, 0x6507, 0x7007, 0x0006, 0x7012, 0x2d00,
++      0x7016, 0x701a, 0x704b, 0x6507, 0x0005, 0x6834, 0x8007, 0xa084,
++      0x00ff, 0xa086, 0x0001, 0x1904, 0x6375, 0x7007, 0x0001, 0x2009,
++      0xc631, 0x210c, 0x81ff, 0x11a8, 0x6838, 0xa084, 0x00ff, 0x683a,
++      0x6853, 0x0000, 0x080c, 0x5116, 0x1108, 0x0005, 0x0126, 0x2091,
++      0x8000, 0x6837, 0x0139, 0x684a, 0x6952, 0x080c, 0x580a, 0x012e,
++      0x0ca0, 0x2001, 0x0028, 0x0c90, 0x684c, 0xa084, 0x00c0, 0xa086,
++      0x00c0, 0x1120, 0x7007, 0x0001, 0x0804, 0x66ff, 0x2d00, 0x7016,
++      0x701a, 0x20a9, 0x0004, 0xa080, 0x0024, 0x2098, 0x20a1, 0xc72d,
++      0x53a3, 0x6858, 0x7012, 0xa082, 0x0401, 0x1a04, 0x6391, 0x6a84,
++      0xa28a, 0x0002, 0x1a04, 0x6391, 0x82ff, 0x1138, 0x6888, 0x698c,
++      0xa105, 0x0118, 0x2001, 0x6494, 0x0018, 0xa280, 0x648a, 0x2005,
++      0x70c6, 0x7010, 0xa015, 0x0904, 0x6476, 0x080c, 0x15e5, 0x1118,
++      0x7007, 0x000f, 0x0005, 0x2d00, 0x7022, 0x70c4, 0x2060, 0x2c05,
++      0x6836, 0xe004, 0xad00, 0x7096, 0xe008, 0xa20a, 0x1210, 0xa00e,
++      0x2200, 0x7112, 0xe20c, 0x8003, 0x800b, 0xa296, 0x0004, 0x0108,
++      0xa108, 0x719a, 0x810b, 0x719e, 0xae90, 0x0022, 0x080c, 0x164d,
++      0x7090, 0xa08e, 0x0100, 0x0170, 0xa086, 0x0200, 0x0118, 0x7007,
++      0x0010, 0x0005, 0x7020, 0x2068, 0x080c, 0x1619, 0x7014, 0x2068,
++      0x0804, 0x6391, 0x7020, 0x2068, 0x7018, 0x6802, 0x6807, 0x0000,
++      0x2d08, 0x2068, 0x6906, 0x711a, 0x0804, 0x6431, 0x7014, 0x2068,
++      0x7007, 0x0001, 0x6884, 0xa005, 0x1128, 0x6888, 0x698c, 0xa105,
++      0x0108, 0x00b1, 0x6834, 0xa084, 0x00ff, 0xa086, 0x001e, 0x0904,
++      0x66ff, 0x04b8, 0x648c, 0x6490, 0x0002, 0x0011, 0x0007, 0x0004,
++      0x000a, 0x000f, 0x0005, 0x0006, 0x000a, 0x0011, 0x0005, 0x0004,
++      0x00f6, 0x00e6, 0x00c6, 0x0076, 0x0066, 0x6f88, 0x6e8c, 0x6804,
++      0x2060, 0xacf0, 0x0021, 0xacf8, 0x0027, 0x2009, 0x0005, 0x700c,
++      0x7816, 0x7008, 0x7812, 0x7004, 0x7806, 0x7000, 0x7802, 0x7e0e,
++      0x7f0a, 0x8109, 0x0128, 0xaef2, 0x0004, 0xaffa, 0x0006, 0x0c78,
++      0x6004, 0xa065, 0x1d30, 0x006e, 0x007e, 0x00ce, 0x00ee, 0x00fe,
++      0x0005, 0x2009, 0xc631, 0x210c, 0x81ff, 0x1198, 0x6838, 0xa084,
++      0x00ff, 0x683a, 0x080c, 0x4fa6, 0x1108, 0x0005, 0x080c, 0x592e,
++      0x0126, 0x2091, 0x8000, 0x080c, 0xaf03, 0x080c, 0x580a, 0x012e,
++      0x0ca0, 0x2001, 0x0028, 0x2009, 0x0000, 0x0c80, 0x2009, 0xc631,
++      0x210c, 0x81ff, 0x11d8, 0x6858, 0xa005, 0x01d8, 0x2001, 0xc756,
++      0x2004, 0xa086, 0x0000, 0x01c0, 0x6838, 0xa084, 0x00ff, 0x683a,
++      0x6853, 0x0000, 0x080c, 0x5068, 0x1108, 0x0005, 0x684a, 0x0126,
++      0x2091, 0x8000, 0x080c, 0x580a, 0x012e, 0x0cb8, 0x2001, 0x0028,
++      0x0ca8, 0x2001, 0x0000, 0x0c90, 0x2001, 0x002c, 0x0c78, 0x2009,
++      0xc631, 0x210c, 0x81ff, 0x11b0, 0x6858, 0xa005, 0x01c0, 0x6838,
++      0xa084, 0x00ff, 0x683a, 0x6853, 0x0000, 0x080c, 0x50ba, 0x1108,
++      0x0005, 0x0126, 0x2091, 0x8000, 0x684a, 0x6952, 0x080c, 0x580a,
++      0x012e, 0x0cb0, 0x2001, 0x0028, 0x2009, 0x0000, 0x0c90, 0x2001,
++      0x0000, 0x0c78, 0x7018, 0x6802, 0x2d08, 0x2068, 0x6906, 0x711a,
++      0x7010, 0x8001, 0x7012, 0x0118, 0x7007, 0x0006, 0x0030, 0x7014,
++      0x2068, 0x7007, 0x0001, 0x7048, 0x080f, 0x0005, 0x7007, 0x0001,
++      0x6944, 0x810f, 0xa18c, 0x00ff, 0x6848, 0xa084, 0x00ff, 0x20a9,
++      0x0001, 0xa096, 0x0001, 0x01b0, 0x2009, 0x0000, 0x20a9, 0x00ff,
++      0xa096, 0x0002, 0x0178, 0xa005, 0x11f0, 0x6944, 0x810f, 0xa18c,
++      0x00ff, 0x080c, 0x533d, 0x11b8, 0x0066, 0x6e50, 0x080c, 0x543c,
++      0x006e, 0x0088, 0x0046, 0x2011, 0xc60c, 0x2224, 0xc484, 0x2412,
++      0x004e, 0x00c6, 0x080c, 0x533d, 0x1110, 0x080c, 0x559d, 0x8108,
++      0x1f04, 0x656a, 0x00ce, 0x684c, 0xd084, 0x1118, 0x080c, 0x1619,
++      0x0005, 0x0126, 0x2091, 0x8000, 0x080c, 0x580a, 0x012e, 0x0005,
++      0x0126, 0x2091, 0x8000, 0x7007, 0x0001, 0x2001, 0xc653, 0x2004,
++      0xd0a4, 0x0580, 0x2061, 0xc9bc, 0x6100, 0xd184, 0x0178, 0x6858,
++      0xa084, 0x00ff, 0x1550, 0x6000, 0xd084, 0x0520, 0x6004, 0xa005,
++      0x1538, 0x6003, 0x0000, 0x600b, 0x0000, 0x00c8, 0x2011, 0x0001,
++      0x6860, 0xa005, 0x1110, 0x2001, 0x001e, 0x8000, 0x6016, 0x6858,
++      0xa084, 0x00ff, 0x0178, 0x6006, 0x6858, 0x8007, 0xa084, 0x00ff,
++      0x0148, 0x600a, 0x6858, 0x8000, 0x1108, 0xc28d, 0x6202, 0x012e,
++      0x0804, 0x67c3, 0x012e, 0x0804, 0x67bd, 0x012e, 0x0804, 0x67b7,
++      0x012e, 0x0804, 0x67ba, 0x0126, 0x2091, 0x8000, 0x7007, 0x0001,
++      0x2001, 0xc653, 0x2004, 0xd0a4, 0x05e0, 0x2061, 0xc9bc, 0x6000,
++      0xd084, 0x05b8, 0x6204, 0x6308, 0xd08c, 0x1530, 0x6c48, 0xa484,
++      0x0003, 0x0170, 0x6958, 0xa18c, 0x00ff, 0x8001, 0x1120, 0x2100,
++      0xa210, 0x0620, 0x0028, 0x8001, 0x1508, 0x2100, 0xa212, 0x02f0,
++      0xa484, 0x000c, 0x0188, 0x6958, 0x810f, 0xa18c, 0x00ff, 0xa082,
++      0x0004, 0x1120, 0x2100, 0xa318, 0x0288, 0x0030, 0xa082, 0x0004,
++      0x1168, 0x2100, 0xa31a, 0x0250, 0x6860, 0xa005, 0x0110, 0x8000,
++      0x6016, 0x6206, 0x630a, 0x012e, 0x0804, 0x67c3, 0x012e, 0x0804,
++      0x67c0, 0x012e, 0x0804, 0x67bd, 0x0126, 0x2091, 0x8000, 0x7007,
++      0x0001, 0x2061, 0xc9bc, 0x6300, 0xd38c, 0x1120, 0x6308, 0x8318,
++      0x0220, 0x630a, 0x012e, 0x0804, 0x67d1, 0x012e, 0x0804, 0x67c0,
++      0x0126, 0x00c6, 0x2091, 0x8000, 0x7007, 0x0001, 0x684c, 0xd0ac,
++      0x0148, 0x00c6, 0x2061, 0xc9bc, 0x6000, 0xa084, 0xfcff, 0x6002,
++      0x00ce, 0x0448, 0x6858, 0xa005, 0x05d0, 0x685c, 0xa065, 0x0598,
++      0x2001, 0xc631, 0x2004, 0xa005, 0x0118, 0x080c, 0xae54, 0x0068,
++      0x6013, 0x0400, 0x6057, 0x0000, 0x694c, 0xd1a4, 0x0110, 0x6950,
++      0x6156, 0x2009, 0x0041, 0x080c, 0x9613, 0x6958, 0xa18c, 0xff00,
++      0xa186, 0x2000, 0x1140, 0x0026, 0x2009, 0x0000, 0x2011, 0xfdff,
++      0x080c, 0x712e, 0x002e, 0x684c, 0xd0c4, 0x0148, 0x2061, 0xc9bc,
++      0x6000, 0xd08c, 0x1120, 0x6008, 0x8000, 0x0208, 0x600a, 0x00ce,
++      0x012e, 0x0804, 0x67c3, 0x00ce, 0x012e, 0x0804, 0x67bd, 0x6954,
++      0xa186, 0x002e, 0x0d40, 0xa186, 0x002d, 0x0d28, 0xa186, 0x0045,
++      0x0528, 0xa186, 0x002a, 0x1130, 0x2001, 0xc60c, 0x200c, 0xc194,
++      0x2102, 0x08c8, 0xa186, 0x0020, 0x0170, 0xa186, 0x0029, 0x1d18,
++      0x6944, 0xa18c, 0xff00, 0x810f, 0x080c, 0x533d, 0x1960, 0x6000,
++      0xc0e4, 0x6002, 0x0840, 0x685c, 0xa065, 0x09a8, 0x6007, 0x0024,
++      0x2001, 0xc8fd, 0x2004, 0x6016, 0x0804, 0x665b, 0x685c, 0xa065,
++      0x0950, 0x00e6, 0x6860, 0xa075, 0x2001, 0xc631, 0x2004, 0xa005,
++      0x0150, 0x080c, 0xae54, 0x8eff, 0x0118, 0x2e60, 0x080c, 0xae54,
++      0x00ee, 0x0804, 0x665b, 0x6020, 0xc0dc, 0xc0d5, 0x6022, 0x2e60,
++      0x6007, 0x003a, 0x6870, 0xa005, 0x0130, 0x6007, 0x003b, 0x6874,
++      0x602a, 0x6878, 0x6012, 0x6003, 0x0001, 0x080c, 0x7999, 0x080c,
++      0x7e94, 0x00ee, 0x0804, 0x665b, 0x2061, 0xc9bc, 0x6000, 0xd084,
++      0x0190, 0xd08c, 0x1904, 0x67d1, 0x0126, 0x2091, 0x8000, 0x6204,
++      0x8210, 0x0220, 0x6206, 0x012e, 0x0804, 0x67d1, 0x012e, 0x6853,
++      0x0016, 0x0804, 0x67ca, 0x6853, 0x0007, 0x0804, 0x67ca, 0x6834,
++      0x8007, 0xa084, 0x00ff, 0x1118, 0x080c, 0x6375, 0x0078, 0x2030,
++      0x8001, 0x1120, 0x7007, 0x0001, 0x0051, 0x0040, 0x7007, 0x0006,
++      0x7012, 0x2d00, 0x7016, 0x701a, 0x704b, 0x66ff, 0x0005, 0x00e6,
++      0x0126, 0x2091, 0x8000, 0xa03e, 0x2009, 0xc631, 0x210c, 0x81ff,
++      0x1904, 0x677d, 0x2009, 0xc60c, 0x210c, 0xd194, 0x1904, 0x67a7,
++      0x6848, 0x2070, 0xae82, 0xce00, 0x0a04, 0x6771, 0x2001, 0xc617,
++      0x2004, 0xae02, 0x1a04, 0x6771, 0x711c, 0xa186, 0x0006, 0x1904,
++      0x6760, 0x7018, 0xa005, 0x0904, 0x677d, 0x2004, 0xd0e4, 0x1904,
++      0x67a2, 0x2061, 0xc9bc, 0x6100, 0xa184, 0x0301, 0xa086, 0x0001,
++      0x1550, 0x7020, 0xd0dc, 0x1904, 0x67aa, 0x6853, 0x0000, 0x6803,
++      0x0000, 0x2d08, 0x7010, 0xa005, 0x1158, 0x7112, 0x684c, 0xd0f4,
++      0x1904, 0x67ad, 0x2e60, 0x080c, 0x708a, 0x012e, 0x00ee, 0x0005,
++      0x2068, 0x6800, 0xa005, 0x1de0, 0x6902, 0x2168, 0x684c, 0xd0f4,
++      0x1904, 0x67ad, 0x012e, 0x00ee, 0x0005, 0x012e, 0x00ee, 0x6853,
++      0x0006, 0x0804, 0x67ca, 0xd184, 0x0dc0, 0xd1c4, 0x11a8, 0x00b8,
++      0x6944, 0xa18c, 0xff00, 0x810f, 0x080c, 0x533d, 0x15d8, 0x6000,
++      0xd0e4, 0x15c0, 0x711c, 0xa186, 0x0007, 0x1118, 0x6853, 0x0002,
++      0x0498, 0x6853, 0x0008, 0x0480, 0x6853, 0x000e, 0x0468, 0x6853,
++      0x0017, 0x0450, 0x6853, 0x0035, 0x0438, 0x2001, 0xc672, 0x2004,
++      0xd0fc, 0x01e8, 0x6848, 0x2070, 0xae82, 0xce00, 0x02c0, 0x605c,
++      0xae02, 0x12a8, 0x711c, 0xa186, 0x0006, 0x1188, 0x7018, 0xa005,
++      0x0170, 0x2004, 0xd0bc, 0x0158, 0x2039, 0x0001, 0x7000, 0xa086,
++      0x0007, 0x1904, 0x670a, 0x7003, 0x0002, 0x0804, 0x670a, 0x6853,
++      0x0028, 0x0010, 0x6853, 0x0029, 0x012e, 0x00ee, 0x0418, 0x6853,
++      0x002a, 0x0cd0, 0x6853, 0x0045, 0x0cb8, 0x2e60, 0x2019, 0x0002,
++      0x6017, 0x0014, 0x080c, 0xbd55, 0x012e, 0x00ee, 0x0005, 0x2009,
++      0x003e, 0x0058, 0x2009, 0x0004, 0x0040, 0x2009, 0x0006, 0x0028,
++      0x2009, 0x0016, 0x0010, 0x2009, 0x0001, 0x6854, 0xa084, 0xff00,
++      0xa105, 0x6856, 0x0126, 0x2091, 0x8000, 0x080c, 0x580a, 0x012e,
++      0x0005, 0x080c, 0x1619, 0x0005, 0x702c, 0x7130, 0x8108, 0xa102,
++      0x0230, 0xa00e, 0x7034, 0x7072, 0x7038, 0x7076, 0x0058, 0x7070,
++      0xa080, 0x0040, 0x7072, 0x1230, 0x7074, 0xa081, 0x0000, 0x7076,
++      0xa085, 0x0001, 0x7932, 0x7132, 0x0005, 0x00d6, 0x080c, 0x7081,
++      0x00de, 0x0005, 0x2001, 0xc756, 0x2004, 0xa086, 0x0000, 0x0904,
++      0x684d, 0x080c, 0x768f, 0x0904, 0x6850, 0x6868, 0xa084, 0x0007,
++      0x0904, 0x6844, 0x080c, 0x958d, 0x0904, 0x6847, 0x2d00, 0x6012,
++      0x6834, 0xa084, 0x00ff, 0xa086, 0x0035, 0x1198, 0x2001, 0xc8e5,
++      0x2004, 0xa086, 0xaaaa, 0x0130, 0x2001, 0xc635, 0x2004, 0xa084,
++      0x0028, 0x05c8, 0x6008, 0xc0fd, 0x600a, 0x2001, 0xc8d3, 0x2004,
++      0x0098, 0x6870, 0xa084, 0x00ff, 0x696c, 0xa18c, 0xff00, 0xa105,
++      0x696c, 0xa18c, 0x00ff, 0x080c, 0x29c7, 0x11e0, 0x00c6, 0x080c,
++      0x533d, 0x2c00, 0x00ce, 0x11b0, 0x601a, 0x601f, 0x0001, 0x2009,
++      0x0040, 0x6834, 0xa084, 0x00ff, 0xa086, 0x0035, 0x0110, 0x2009,
++      0x0041, 0x080c, 0x9613, 0x0005, 0x684b, 0x0101, 0x0078, 0x684b,
++      0x002c, 0x0060, 0x684b, 0x0028, 0x0080, 0x684b, 0x0104, 0x0030,
++      0x684b, 0x0105, 0x0018, 0x684b, 0x0106, 0x0038, 0x0126, 0x2091,
++      0x8000, 0x080c, 0x580a, 0x012e, 0x0005, 0x0126, 0x2091, 0x8000,
++      0x080c, 0x580a, 0x012e, 0x080c, 0x95e3, 0x0005, 0x00d6, 0x00c6,
++      0x0036, 0x0026, 0x0016, 0x7007, 0x0001, 0x6a44, 0xa282, 0x0004,
++      0x1a04, 0x68b1, 0xd284, 0x0170, 0x6a4c, 0xa290, 0xc77b, 0x2204,
++      0xa065, 0x6004, 0x05e0, 0x8007, 0xa084, 0x00ff, 0xa084, 0x0006,
++      0x1108, 0x04a8, 0x2c10, 0x080c, 0x958d, 0x1118, 0x080c, 0xaf0d,
++      0x05a0, 0x621a, 0x6844, 0x0002, 0x6890, 0x6895, 0x6898, 0x689e,
++      0x2019, 0x0002, 0x080c, 0xc10d, 0x0060, 0x080c, 0xc0a4, 0x0048,
++      0x2019, 0x0002, 0x6950, 0x080c, 0xc0bf, 0x0018, 0x6950, 0x080c,
++      0xc0a4, 0x080c, 0x95e3, 0x6857, 0x0000, 0x0126, 0x2091, 0x8000,
++      0x080c, 0x580a, 0x012e, 0x001e, 0x002e, 0x003e, 0x00ce, 0x00de,
++      0x0005, 0x6857, 0x0006, 0x0c88, 0x6857, 0x0002, 0x0c70, 0x6857,
++      0x0005, 0x0c58, 0x6857, 0x0004, 0x0c40, 0x6857, 0x0007, 0x0c28,
++      0x00d6, 0x2011, 0x0004, 0x2204, 0xa085, 0x8002, 0x2012, 0x00de,
++      0x0005, 0x20e1, 0x0002, 0x3d08, 0x20e1, 0x2000, 0x3d00, 0xa084,
++      0x7000, 0x0118, 0xa086, 0x1000, 0x15e0, 0x20e1, 0x0000, 0x3d00,
++      0xa094, 0xff00, 0x8217, 0xa084, 0xf000, 0xa086, 0x3000, 0x1160,
++      0xa184, 0xff00, 0x8007, 0xa086, 0x0008, 0x1558, 0x080c, 0x2f69,
++      0x1540, 0x080c, 0x6b32, 0x0400, 0x20e1, 0x0004, 0x3d60, 0xd1bc,
++      0x1170, 0x2100, 0xa084, 0xff00, 0xa086, 0x0500, 0x1138, 0x0026,
++      0x2c10, 0x080c, 0x6d90, 0x002e, 0x01a0, 0x0070, 0x3e60, 0xac84,
++      0x0007, 0x1178, 0xac82, 0xce00, 0x0260, 0x685c, 0xac02, 0x1248,
++      0x2009, 0x0047, 0x080c, 0x9613, 0x7a1c, 0xd284, 0x1904, 0x68c9,
++      0x0005, 0xa016, 0x080c, 0x1870, 0x0cb8, 0x0cd8, 0x781c, 0xd08c,
++      0x0500, 0x0156, 0x0136, 0x0146, 0x20e1, 0x3000, 0x3d20, 0x3e28,
++      0xa584, 0x0076, 0x1538, 0xa484, 0x7000, 0xa086, 0x1000, 0x11a8,
++      0x080c, 0x6991, 0x01f8, 0x20e1, 0x3000, 0x7828, 0x7828, 0x080c,
++      0x69ad, 0x014e, 0x013e, 0x015e, 0x2009, 0xc92f, 0x2104, 0xa005,
++      0x1108, 0x0005, 0x080c, 0x7e94, 0x0ce0, 0xa484, 0x7000, 0x1548,
++      0x080c, 0x6991, 0x01d8, 0x7000, 0xa084, 0xff00, 0xa086, 0x8100,
++      0x0d10, 0x00a0, 0xd5a4, 0x0178, 0x0056, 0x0046, 0x080c, 0x1f2d,
++      0x080c, 0x25fb, 0x2001, 0x0160, 0x2502, 0x2001, 0x0138, 0x2202,
++      0x004e, 0x005e, 0x0048, 0x04a9, 0x6887, 0x0000, 0x080c, 0xc536,
++      0x20e1, 0x3000, 0x7828, 0x7828, 0x00b9, 0x014e, 0x013e, 0x015e,
++      0x0880, 0x0439, 0x1130, 0x7000, 0xa084, 0xff00, 0xa086, 0x8100,
++      0x1d68, 0x080c, 0xc536, 0x20e1, 0x3000, 0x7828, 0x7828, 0x0056,
++      0x080c, 0x6e1f, 0x005e, 0x0c40, 0x2001, 0xc60e, 0x2004, 0xd08c,
++      0x0178, 0x2001, 0xc600, 0x2004, 0xa086, 0x0003, 0x1148, 0x0026,
++      0x0036, 0x2011, 0x8048, 0x2518, 0x080c, 0x407d, 0x003e, 0x002e,
++      0x0005, 0xa484, 0x01ff, 0x6886, 0xa005, 0x0160, 0xa080, 0x001f,
++      0xa084, 0x03f8, 0x80ac, 0x20e1, 0x1000, 0x2ea0, 0x2099, 0x020a,
++      0x53a5, 0x0005, 0x20a9, 0x000c, 0x20e1, 0x1000, 0x2ea0, 0x2099,
++      0x020a, 0x53a5, 0xa085, 0x0001, 0x0ca0, 0x7000, 0xa084, 0xff00,
++      0xa08c, 0xf000, 0x8007, 0xa196, 0x0000, 0x1118, 0x0804, 0x6c37,
++      0x0005, 0xa196, 0x2000, 0x1148, 0x6900, 0xa18e, 0x0001, 0x1118,
++      0x080c, 0x47cb, 0x0ca8, 0x0039, 0x0c98, 0xa196, 0x8000, 0x1d80,
++      0x080c, 0x6ce3, 0x0c68, 0x00c6, 0x6a84, 0x82ff, 0x0904, 0x6b2c,
++      0x7110, 0xa18c, 0xff00, 0x810f, 0xa196, 0x0001, 0x0120, 0xa196,
++      0x0023, 0x1904, 0x6b2c, 0xa08e, 0x0023, 0x1570, 0x080c, 0x6d7e,
++      0x0904, 0x6b2c, 0x7124, 0x610a, 0x7030, 0xa08e, 0x0200, 0x1150,
++      0x7034, 0xa005, 0x1904, 0x6b2c, 0x2009, 0x0015, 0x080c, 0x9613,
++      0x0804, 0x6b2c, 0xa08e, 0x0214, 0x0118, 0xa08e, 0x0210, 0x1130,
++      0x2009, 0x0015, 0x080c, 0x9613, 0x0804, 0x6b2c, 0xa08e, 0x0100,
++      0x1904, 0x6b2c, 0x7034, 0xa005, 0x1904, 0x6b2c, 0x2009, 0x0016,
++      0x080c, 0x9613, 0x0804, 0x6b2c, 0xa08e, 0x0022, 0x1904, 0x6b2c,
++      0x7030, 0xa08e, 0x0300, 0x1580, 0x68d4, 0xd0a4, 0x0528, 0xc0b5,
++      0x68d6, 0x7100, 0xa18c, 0x00ff, 0x6972, 0x7004, 0x6876, 0x00f6,
++      0x2079, 0x0100, 0x79e6, 0x78ea, 0x0006, 0xa084, 0x00ff, 0x0016,
++      0x2008, 0x080c, 0x29f1, 0x7932, 0x7936, 0x001e, 0x000e, 0x00fe,
++      0x080c, 0x29c7, 0x6952, 0x703c, 0x00e6, 0x2071, 0x0140, 0x7086,
++      0x2071, 0xc600, 0x70a6, 0x00ee, 0x7034, 0xa005, 0x1904, 0x6b2c,
++      0x2009, 0x0017, 0x0804, 0x6af2, 0xa08e, 0x0400, 0x1158, 0x7034,
++      0xa005, 0x1904, 0x6b2c, 0x68d4, 0xc0a5, 0x68d6, 0x2009, 0x0030,
++      0x0804, 0x6af2, 0xa08e, 0x0500, 0x1140, 0x7034, 0xa005, 0x1904,
++      0x6b2c, 0x2009, 0x0018, 0x0804, 0x6af2, 0xa08e, 0x2010, 0x1120,
++      0x2009, 0x0019, 0x0804, 0x6af2, 0xa08e, 0x2110, 0x1120, 0x2009,
++      0x001a, 0x0804, 0x6af2, 0xa08e, 0x5200, 0x1140, 0x7034, 0xa005,
++      0x1904, 0x6b2c, 0x2009, 0x001b, 0x0804, 0x6af2, 0xa08e, 0x5000,
++      0x1140, 0x7034, 0xa005, 0x1904, 0x6b2c, 0x2009, 0x001c, 0x0804,
++      0x6af2, 0xa08e, 0x1300, 0x1120, 0x2009, 0x0034, 0x0804, 0x6af2,
++      0xa08e, 0x1200, 0x1140, 0x7034, 0xa005, 0x1904, 0x6b2c, 0x2009,
++      0x0024, 0x0804, 0x6af2, 0xa08c, 0xff00, 0xa18e, 0x2400, 0x1120,
++      0x2009, 0x002d, 0x0804, 0x6af2, 0xa08c, 0xff00, 0xa18e, 0x5300,
++      0x1120, 0x2009, 0x002a, 0x0804, 0x6af2, 0xa08e, 0x0f00, 0x1120,
++      0x2009, 0x0020, 0x0804, 0x6af2, 0xa08e, 0x5300, 0x1108, 0x00d8,
++      0xa08e, 0x6104, 0x11c0, 0x2011, 0xcc8d, 0x8208, 0x2204, 0xa082,
++      0x0004, 0x20a8, 0x95ac, 0x95ac, 0x2011, 0x8015, 0x211c, 0x8108,
++      0x0046, 0x2124, 0x080c, 0x407d, 0x004e, 0x8108, 0x1f04, 0x6abc,
++      0x2009, 0x0023, 0x0438, 0xa08e, 0x6000, 0x1118, 0x2009, 0x003f,
++      0x0408, 0xa08e, 0x5400, 0x1158, 0x080c, 0x6e79, 0x1904, 0x6b2c,
++      0x2009, 0x0046, 0x0016, 0x2001, 0xc8d3, 0x2064, 0x0498, 0xa08e,
++      0x5500, 0x1140, 0x080c, 0x6eac, 0x2009, 0x0041, 0x0158, 0x2009,
++      0x0042, 0x0040, 0xa08e, 0x7800, 0x1118, 0x2009, 0x0045, 0x0010,
++      0x2009, 0x001d, 0x0016, 0x2011, 0xcc83, 0x2204, 0x8211, 0x220c,
++      0x080c, 0x29c7, 0x1598, 0x080c, 0x52e1, 0x1580, 0x6612, 0x6516,
++      0x86ff, 0x01e8, 0x001e, 0x0016, 0xa186, 0x0017, 0x1158, 0x6870,
++      0xa606, 0x11a8, 0x6874, 0xa506, 0xa084, 0xff00, 0x1180, 0x6000,
++      0xc0f5, 0x6002, 0xa186, 0x0046, 0x1150, 0x6870, 0xa606, 0x1138,
++      0x6874, 0xa506, 0xa084, 0xff00, 0x1110, 0x001e, 0x0068, 0x00c6,
++      0x080c, 0x958d, 0x0168, 0x001e, 0x611a, 0x601f, 0x0004, 0x7120,
++      0x610a, 0x001e, 0x080c, 0x9613, 0x00ce, 0x0005, 0x001e, 0x0ce0,
++      0x00ce, 0x0ce0, 0x00c6, 0x0046, 0x080c, 0x6b86, 0x1904, 0x6b83,
++      0xa28e, 0x0033, 0x11e8, 0x080c, 0x6d7e, 0x0904, 0x6b83, 0x7124,
++      0x610a, 0x7030, 0xa08e, 0x0200, 0x1140, 0x7034, 0xa005, 0x15d8,
++      0x2009, 0x0015, 0x080c, 0x9613, 0x04b0, 0xa08e, 0x0100, 0x1598,
++      0x7034, 0xa005, 0x1580, 0x2009, 0x0016, 0x080c, 0x9613, 0x0458,
++      0xa28e, 0x0032, 0x1540, 0x7030, 0xa08e, 0x1400, 0x1520, 0x2009,
++      0x0038, 0x0016, 0x2011, 0xcc83, 0x2204, 0x8211, 0x220c, 0x080c,
++      0x29c7, 0x11c0, 0x080c, 0x52e1, 0x11a8, 0x6612, 0x6516, 0x00c6,
++      0x080c, 0x958d, 0x0170, 0x001e, 0x611a, 0x080c, 0xb05e, 0x601f,
++      0x0004, 0x7120, 0x610a, 0x001e, 0x080c, 0x9613, 0x080c, 0x7e94,
++      0x0010, 0x00ce, 0x001e, 0x004e, 0x00ce, 0x0005, 0x00f6, 0x00d6,
++      0x0026, 0x0016, 0x0136, 0x0146, 0x0156, 0x3c00, 0x0006, 0x2079,
++      0x0030, 0x2069, 0x0200, 0x080c, 0x1fec, 0x1590, 0x080c, 0x1e97,
++      0x05e0, 0x04f1, 0x1130, 0x7908, 0xa18c, 0x1fff, 0xa182, 0x0011,
++      0x1688, 0x20a9, 0x000c, 0x20e1, 0x0000, 0x2ea0, 0x2099, 0x020a,
++      0x53a5, 0x20e1, 0x2000, 0x2001, 0x020a, 0x2004, 0x7a0c, 0x7808,
++      0xa080, 0x0007, 0xa084, 0x1ff8, 0x0419, 0x1120, 0xa08a, 0x0140,
++      0x1a0c, 0x1519, 0x80ac, 0x20e1, 0x6000, 0x2099, 0x020a, 0x53a5,
++      0x20e1, 0x7000, 0x6828, 0x6828, 0x7803, 0x0004, 0xa294, 0x0070,
++      0x000e, 0x20e0, 0x015e, 0x014e, 0x013e, 0x001e, 0x002e, 0x00de,
++      0x00fe, 0x0005, 0xa016, 0x080c, 0x1870, 0xa085, 0x0001, 0x0c80,
++      0x0006, 0x2001, 0x0111, 0x2004, 0xa084, 0x0003, 0x000e, 0x0005,
++      0x0046, 0x00e6, 0x00d6, 0x2028, 0x2130, 0xa696, 0x00ff, 0x1198,
++      0xa596, 0xfffd, 0x1120, 0x2009, 0x007f, 0x0804, 0x6c32, 0xa596,
++      0xfffe, 0x1118, 0x2009, 0x007e, 0x04e8, 0xa596, 0xfffc, 0x1118,
++      0x2009, 0x0080, 0x04b8, 0x2011, 0x0000, 0x2019, 0xc635, 0x231c,
++      0xd3ac, 0x0138, 0x2021, 0x0000, 0x20a9, 0x00ff, 0x2071, 0xc77b,
++      0x0030, 0x2021, 0x0081, 0x20a9, 0x007e, 0x2071, 0xc7fc, 0x2e1c,
++      0x83ff, 0x1128, 0x82ff, 0x1198, 0x2410, 0xc2fd, 0x0080, 0x2368,
++      0x6f10, 0x0006, 0x2100, 0xa706, 0x000e, 0x6b14, 0x1120, 0xa346,
++      0x1110, 0x2408, 0x0078, 0x87ff, 0x1110, 0x83ff, 0x0d58, 0x8420,
++      0x8e70, 0x1f04, 0x6c0f, 0x82ff, 0x1118, 0xa085, 0x0001, 0x0018,
++      0xc2fc, 0x2208, 0xa006, 0x00de, 0x00ee, 0x004e, 0x0005, 0xa084,
++      0x0007, 0x000a, 0x0005, 0x6c43, 0x6c43, 0x6c43, 0x6e0c, 0x6c43,
++      0x6c44, 0x6c59, 0x6cce, 0x0005, 0x7110, 0xd1bc, 0x0188, 0x7120,
++      0x2160, 0xac8c, 0x0007, 0x1160, 0xac8a, 0xce00, 0x0248, 0x685c,
++      0xac02, 0x1230, 0x7124, 0x610a, 0x2009, 0x0046, 0x080c, 0x9613,
++      0x0005, 0x00c6, 0xa484, 0x01ff, 0x0904, 0x6cac, 0x7110, 0xd1bc,
++      0x1904, 0x6cac, 0x2011, 0xcc83, 0x2204, 0x8211, 0x220c, 0x080c,
++      0x29c7, 0x1904, 0x6cac, 0x080c, 0x52e1, 0x15f0, 0x6612, 0x6516,
++      0x6000, 0xd0ec, 0x15c8, 0x6204, 0xa294, 0xff00, 0x8217, 0xa286,
++      0x0006, 0x0148, 0x6204, 0xa294, 0x00ff, 0xa286, 0x0006, 0x11a0,
++      0xa295, 0x0600, 0x6206, 0x00c6, 0x080c, 0x958d, 0x001e, 0x0530,
++      0x611a, 0x601f, 0x0006, 0x7120, 0x610a, 0x7130, 0x6152, 0x2009,
++      0x0044, 0x080c, 0x9613, 0x00c0, 0x00c6, 0x080c, 0x958d, 0x001e,
++      0x0198, 0x611a, 0x601f, 0x0004, 0x7120, 0x610a, 0xa286, 0x0004,
++      0x1118, 0x6007, 0x0005, 0x0010, 0x6007, 0x0001, 0x6003, 0x0001,
++      0x080c, 0x79df, 0x080c, 0x7e94, 0x00ce, 0x0005, 0x2001, 0xc60d,
++      0x2004, 0xd0ec, 0x0120, 0x2011, 0x8049, 0x080c, 0x407d, 0x00c6,
++      0x080c, 0xaf0d, 0x001e, 0x0d80, 0x611a, 0x601f, 0x0006, 0x7120,
++      0x610a, 0x7130, 0x6152, 0x6013, 0x0300, 0x6003, 0x0001, 0x6007,
++      0x0041, 0x080c, 0x7999, 0x080c, 0x7e94, 0x08f0, 0x7110, 0xd1bc,
++      0x0188, 0x7020, 0x2060, 0xac84, 0x0007, 0x1160, 0xac82, 0xce00,
++      0x0248, 0x685c, 0xac02, 0x1230, 0x7124, 0x610a, 0x2009, 0x0045,
++      0x080c, 0x9613, 0x0005, 0x0006, 0x080c, 0x2f69, 0x000e, 0x1168,
++      0x7110, 0xa18c, 0xff00, 0x810f, 0xa18e, 0x0000, 0x1130, 0xa084,
++      0x000f, 0xa08a, 0x0006, 0x1208, 0x000b, 0x0005, 0x6cfc, 0x6cfd,
++      0x6cfc, 0x6cfc, 0x6d66, 0x6d72, 0x0005, 0x7110, 0xd1bc, 0x0120,
++      0x702c, 0xd084, 0x0904, 0x6d65, 0x700c, 0x7108, 0x080c, 0x29c7,
++      0x1904, 0x6d65, 0x080c, 0x52e1, 0x1904, 0x6d65, 0x6612, 0x6516,
++      0x6204, 0x7110, 0xd1bc, 0x01f8, 0xa28c, 0x00ff, 0xa186, 0x0004,
++      0x0118, 0xa186, 0x0006, 0x15c8, 0x00c6, 0x080c, 0x6d7e, 0x00ce,
++      0x0904, 0x6d65, 0x00c6, 0x080c, 0x958d, 0x001e, 0x05f0, 0x611a,
++      0x080c, 0xb05e, 0x601f, 0x0002, 0x7120, 0x610a, 0x2009, 0x0088,
++      0x080c, 0x9613, 0x0490, 0xa28c, 0x00ff, 0xa186, 0x0006, 0x0160,
++      0xa186, 0x0004, 0x0148, 0xa294, 0xff00, 0x8217, 0xa286, 0x0004,
++      0x0118, 0xa286, 0x0006, 0x1188, 0x00c6, 0x080c, 0x958d, 0x001e,
++      0x01e0, 0x611a, 0x080c, 0xb05e, 0x601f, 0x0005, 0x7120, 0x610a,
++      0x2009, 0x0088, 0x080c, 0x9613, 0x0080, 0x00c6, 0x080c, 0x958d,
++      0x001e, 0x0158, 0x611a, 0x080c, 0xb05e, 0x601f, 0x0004, 0x7120,
++      0x610a, 0x2009, 0x0001, 0x080c, 0x9613, 0x0005, 0x7110, 0xd1bc,
++      0x0140, 0x00a1, 0x0130, 0x7124, 0x610a, 0x2009, 0x0089, 0x080c,
++      0x9613, 0x0005, 0x7110, 0xd1bc, 0x0140, 0x0041, 0x0130, 0x7124,
++      0x610a, 0x2009, 0x008a, 0x080c, 0x9613, 0x0005, 0x7020, 0x2060,
++      0xac84, 0x0007, 0x1158, 0xac82, 0xce00, 0x0240, 0x2001, 0xc617,
++      0x2004, 0xac02, 0x1218, 0xa085, 0x0001, 0x0005, 0xa006, 0x0ce8,
++      0x00c6, 0x00d6, 0x00e6, 0x080c, 0x2f69, 0x1904, 0x6e07, 0x2001,
++      0xc756, 0x2004, 0xa086, 0x0000, 0x0904, 0x6e07, 0x20e1, 0x0000,
++      0x3d08, 0xa18c, 0x00ff, 0xa18e, 0x00ff, 0x1500, 0x3e00, 0xa086,
++      0xffff, 0x11e0, 0x2001, 0xc8d3, 0x2064, 0x2009, 0x00ff, 0x0006,
++      0x0016, 0x2001, 0xc61d, 0x2004, 0x20e1, 0x0001, 0x3e08, 0xa106,
++      0x1130, 0x2001, 0xc61c, 0x2004, 0x3d08, 0xa106, 0x0118, 0x001e,
++      0x000e, 0x00a8, 0x001e, 0x000e, 0x0804, 0x6e07, 0x20e1, 0x0001,
++      0x3d08, 0x3e00, 0x0156, 0x080c, 0x29c7, 0x015e, 0x15c0, 0x080c,
++      0x533d, 0x0128, 0x2001, 0xc8d3, 0x2064, 0x2009, 0x00ff, 0x2138,
++      0x873f, 0x2c00, 0x2070, 0x20e1, 0x0003, 0x3d18, 0x831f, 0xa39c,
++      0x00ff, 0x20e1, 0x2000, 0x3d00, 0xa084, 0x7000, 0xa086, 0x1000,
++      0x0120, 0x080c, 0x75ea, 0x11d8, 0x0080, 0x080c, 0x958d, 0x01b8,
++      0x20e1, 0x0002, 0x3e08, 0xd19c, 0x0118, 0x6124, 0xc19d, 0x6126,
++      0x2e00, 0x601a, 0x620a, 0x601f, 0x0009, 0x2009, 0x0101, 0x080c,
++      0x9613, 0xa085, 0x0001, 0x00ee, 0x00de, 0x00ce, 0x0005, 0xa006,
++      0x00ee, 0x00de, 0x00ce, 0x0005, 0x7110, 0xd1bc, 0x1178, 0x7024,
++      0x2060, 0xac84, 0x0007, 0x1150, 0xac82, 0xce00, 0x0238, 0x685c,
++      0xac02, 0x1220, 0x2009, 0x0051, 0x080c, 0x9613, 0x0005, 0x2031,
++      0x0105, 0x0069, 0x0005, 0x2031, 0x0206, 0x0049, 0x0005, 0x2031,
++      0x0207, 0x0029, 0x0005, 0x2031, 0x0213, 0x0009, 0x0005, 0x00c6,
++      0x00d6, 0x00f6, 0x7000, 0xa084, 0xf000, 0xa086, 0xc000, 0x05b0,
++      0x080c, 0x958d, 0x0598, 0x0066, 0x00c6, 0x0046, 0x2011, 0xcc83,
++      0x2204, 0x8211, 0x220c, 0x080c, 0x29c7, 0x1580, 0x080c, 0x52e1,
++      0x1568, 0x6612, 0x6516, 0x2c00, 0x004e, 0x00ce, 0x601a, 0x080c,
++      0xb05e, 0x080c, 0x1602, 0x01f0, 0x2d00, 0x6056, 0x6803, 0x0000,
++      0x6837, 0x0000, 0x6c3a, 0xadf8, 0x000f, 0x20a9, 0x000e, 0x2fa0,
++      0x2e98, 0x53a3, 0x006e, 0x6612, 0x6007, 0x003e, 0x601f, 0x0001,
++      0x6003, 0x0001, 0x080c, 0x79df, 0x080c, 0x7e94, 0x00fe, 0x00de,
++      0x00ce, 0x0005, 0x080c, 0x95e3, 0x006e, 0x0cc0, 0x004e, 0x00ce,
++      0x0cc8, 0x0156, 0x0046, 0x2e00, 0xa0a0, 0x000e, 0x2404, 0x2020,
++      0x8427, 0xa4a4, 0x0007, 0xd484, 0x0148, 0x20a9, 0x0003, 0x2019,
++      0xc606, 0x2011, 0xcc9b, 0x080c, 0xa103, 0x11d8, 0xd48c, 0x0148,
++      0x20a9, 0x0003, 0x2019, 0xc602, 0x2011, 0xcc9f, 0x080c, 0xa103,
++      0x1180, 0xd494, 0x0170, 0x080c, 0x7694, 0x0148, 0x20a9, 0x0008,
++      0x2019, 0xc69a, 0x2011, 0xccaa, 0x080c, 0xa118, 0x0010, 0xa085,
++      0x0001, 0x004e, 0x015e, 0x0005, 0x0156, 0x0046, 0x2e00, 0xa0a0,
++      0x000e, 0x2404, 0x2020, 0x8427, 0xa4a4, 0x0007, 0xd484, 0x0148,
++      0x20a9, 0x0003, 0x2019, 0xc606, 0x2011, 0xcc93, 0x080c, 0xa103,
++      0x11d8, 0xd48c, 0x0148, 0x20a9, 0x0003, 0x2019, 0xc602, 0x2011,
++      0xcc97, 0x080c, 0xa103, 0x1180, 0xd494, 0x0170, 0x080c, 0x7694,
++      0x0148, 0x20a9, 0x0008, 0x2019, 0xc69a, 0x2011, 0xcca2, 0x080c,
++      0xa118, 0x0010, 0xa085, 0x0001, 0x004e, 0x015e, 0x0005, 0x2071,
++      0xc93a, 0x7003, 0x0003, 0x700f, 0x0361, 0xa006, 0x701a, 0x7076,
++      0x7012, 0x7017, 0xce00, 0x7007, 0x0000, 0x7026, 0x702b, 0x8c0c,
++      0x7032, 0x7037, 0x8c6c, 0x703b, 0xffff, 0x703f, 0xffff, 0x7042,
++      0x7047, 0x4787, 0x704a, 0x705b, 0x703f, 0x2001, 0xc8e8, 0x2003,
++      0x0003, 0x2001, 0xc8ea, 0x2003, 0x0100, 0x3a00, 0xa084, 0x0005,
++      0x706e, 0x0005, 0x2071, 0xc93a, 0x1d04, 0x6f9c, 0x2091, 0x6000,
++      0x700c, 0x8001, 0x700e, 0x1518, 0x700f, 0x0361, 0x7007, 0x0001,
++      0x0126, 0x2091, 0x8000, 0x7040, 0xa00d, 0x0128, 0x8109, 0x7142,
++      0x1110, 0x7044, 0x080f, 0x00c6, 0x2061, 0xc600, 0x6034, 0x00ce,
++      0xd0cc, 0x0180, 0x3a00, 0xa084, 0x0005, 0x726c, 0xa216, 0x0150,
++      0x706e, 0x2011, 0x8043, 0x2018, 0x080c, 0x407d, 0x0018, 0x0126,
++      0x2091, 0x8000, 0x7024, 0xa00d, 0x0188, 0x7020, 0x8001, 0x7022,
++      0x1168, 0x7023, 0x0009, 0x8109, 0x7126, 0xa186, 0x03e8, 0x1110,
++      0x7028, 0x080f, 0x81ff, 0x1110, 0x7028, 0x080f, 0x7030, 0xa00d,
++      0x0180, 0x702c, 0x8001, 0x702e, 0x1160, 0x702f, 0x0009, 0x8109,
++      0x7132, 0x0128, 0xa184, 0x007f, 0x090c, 0x8cc8, 0x0010, 0x7034,
++      0x080f, 0x7038, 0xa005, 0x0118, 0x0310, 0x8001, 0x703a, 0x703c,
++      0xa005, 0x0118, 0x0310, 0x8001, 0x703e, 0x704c, 0xa00d, 0x0168,
++      0x7048, 0x8001, 0x704a, 0x1148, 0x704b, 0x0009, 0x8109, 0x714e,
++      0x1120, 0x7150, 0x714e, 0x7058, 0x080f, 0x7018, 0xa00d, 0x01d8,
++      0x0016, 0x7074, 0xa00d, 0x0158, 0x7070, 0x8001, 0x7072, 0x1138,
++      0x7073, 0x0009, 0x8109, 0x7176, 0x1110, 0x7078, 0x080f, 0x001e,
++      0x7008, 0x8001, 0x700a, 0x1138, 0x700b, 0x0009, 0x8109, 0x711a,
++      0x1110, 0x701c, 0x080f, 0x012e, 0x7004, 0x0002, 0x6fc2, 0x6fc3,
++      0x6fdb, 0x00e6, 0x2071, 0xc93a, 0x7018, 0xa005, 0x1120, 0x711a,
++      0x721e, 0x700b, 0x0009, 0x00ee, 0x0005, 0x00e6, 0x0006, 0x2071,
++      0xc93a, 0x701c, 0xa206, 0x1110, 0x701a, 0x701e, 0x000e, 0x00ee,
++      0x0005, 0x00e6, 0x2071, 0xc93a, 0x6088, 0xa102, 0x0208, 0x618a,
++      0x00ee, 0x0005, 0x0005, 0x7110, 0x080c, 0x533d, 0x1158, 0x6088,
++      0x8001, 0x0240, 0x608a, 0x1130, 0x0126, 0x2091, 0x8000, 0x080c,
++      0x7e94, 0x012e, 0x8108, 0xa182, 0x00ff, 0x0218, 0xa00e, 0x7007,
++      0x0002, 0x7112, 0x0005, 0x7014, 0x2060, 0x0126, 0x2091, 0x8000,
++      0x603c, 0xa005, 0x0128, 0x8001, 0x603e, 0x1110, 0x080c, 0xaf4c,
++      0x6014, 0xa005, 0x0518, 0x8001, 0x6016, 0x1500, 0x611c, 0xa186,
++      0x0003, 0x0130, 0xa186, 0x0006, 0x0118, 0xa186, 0x0009, 0x11a0,
++      0x6010, 0x2068, 0x6854, 0xa08a, 0x199a, 0x0270, 0xa082, 0x1999,
++      0x6856, 0xa08a, 0x199a, 0x0210, 0x2001, 0x1999, 0x8003, 0x800b,
++      0x810b, 0xa108, 0x6116, 0x0010, 0x080c, 0xaa1c, 0x012e, 0xac88,
++      0x0018, 0x7116, 0x2001, 0xfe00, 0xa102, 0x0220, 0x7017, 0xce00,
++      0x7007, 0x0000, 0x0005, 0x00e6, 0x2071, 0xc93a, 0x7027, 0x07d0,
++      0x7023, 0x0009, 0x00ee, 0x0005, 0x2001, 0xc943, 0x2003, 0x0000,
++      0x0005, 0x00e6, 0x2071, 0xc93a, 0x7132, 0x702f, 0x0009, 0x00ee,
++      0x0005, 0x2011, 0xc946, 0x2013, 0x0000, 0x0005, 0x00e6, 0x2071,
++      0xc93a, 0x711a, 0x721e, 0x700b, 0x0009, 0x00ee, 0x0005, 0x00c6,
++      0x0026, 0x7054, 0x8000, 0x7056, 0x2061, 0xc8e8, 0x6008, 0xa086,
++      0x0000, 0x0158, 0x7068, 0x6032, 0x7064, 0x602e, 0x7060, 0x602a,
++      0x705c, 0x6026, 0x2c10, 0x080c, 0x164d, 0x002e, 0x00ce, 0x0005,
++      0x0006, 0x0016, 0x00c6, 0x00d6, 0x00e6, 0x00f6, 0x080c, 0x6f0a,
++      0x00fe, 0x00ee, 0x00de, 0x00ce, 0x001e, 0x000e, 0x0005, 0x00e6,
++      0x2071, 0xc93a, 0x7176, 0x727a, 0x7073, 0x0009, 0x00ee, 0x0005,
++      0x00e6, 0x0006, 0x2071, 0xc93a, 0x7078, 0xa206, 0x1110, 0x7076,
++      0x707a, 0x000e, 0x00ee, 0x0005, 0x00c6, 0x2061, 0xc9bc, 0x00ce,
++      0x0005, 0xa184, 0x000f, 0x8003, 0x8003, 0x8003, 0xa080, 0xc9bc,
++      0x2060, 0x0005, 0x6854, 0xa08a, 0x199a, 0x0210, 0x2001, 0x1999,
++      0xa005, 0x1150, 0x00c6, 0x2061, 0xc9bc, 0x6014, 0x00ce, 0xa005,
++      0x1138, 0x2001, 0x001e, 0x0020, 0xa08e, 0xffff, 0x1108, 0xa006,
++      0x8003, 0x800b, 0x810b, 0xa108, 0x6116, 0x684c, 0xa08c, 0x00c0,
++      0xa18e, 0x00c0, 0x05e8, 0xd0b4, 0x1138, 0xd0bc, 0x1550, 0x2009,
++      0x0006, 0x080c, 0x7105, 0x0005, 0xd0fc, 0x0138, 0xa084, 0x0003,
++      0x0120, 0xa086, 0x0003, 0x1904, 0x70ff, 0x6020, 0xd0d4, 0x0130,
++      0xc0d4, 0x6022, 0x6860, 0x602a, 0x685c, 0x602e, 0x2009, 0xc674,
++      0x2104, 0xd084, 0x0138, 0x87ff, 0x1120, 0x2009, 0x0042, 0x080c,
++      0x9613, 0x0005, 0x87ff, 0x1120, 0x2009, 0x0043, 0x080c, 0x9613,
++      0x0005, 0xd0fc, 0x0130, 0xa084, 0x0003, 0x0118, 0xa086, 0x0003,
++      0x11f0, 0x87ff, 0x1120, 0x2009, 0x0042, 0x080c, 0x9613, 0x0005,
++      0xd0fc, 0x0160, 0xa084, 0x0003, 0xa08e, 0x0002, 0x0148, 0x87ff,
++      0x1120, 0x2009, 0x0041, 0x080c, 0x9613, 0x0005, 0x0061, 0x0ce8,
++      0x87ff, 0x1dd8, 0x2009, 0x0043, 0x080c, 0x9613, 0x0cb0, 0x2009,
++      0x0004, 0x0019, 0x0005, 0x2009, 0x0001, 0x00d6, 0x6010, 0xa0ec,
++      0xf000, 0x0510, 0x2068, 0x6952, 0x6800, 0x6012, 0xa186, 0x0001,
++      0x1188, 0x694c, 0xa18c, 0x8100, 0xa18e, 0x8100, 0x1158, 0x00c6,
++      0x2061, 0xc9bc, 0x6200, 0xd28c, 0x1120, 0x6204, 0x8210, 0x0208,
++      0x6206, 0x00ce, 0x080c, 0x580a, 0x6010, 0xa06d, 0x0076, 0x2039,
++      0x0000, 0x190c, 0x708a, 0x007e, 0x00de, 0x0005, 0x0156, 0x00c6,
++      0x2061, 0xc9bc, 0x6000, 0x81ff, 0x0110, 0xa205, 0x0008, 0xa204,
++      0x6002, 0x00ce, 0x015e, 0x0005, 0x6800, 0xd08c, 0x1138, 0x6808,
++      0xa005, 0x0120, 0x8001, 0x680a, 0xa085, 0x0001, 0x0005, 0x2071,
++      0xc755, 0x7003, 0x0006, 0x7007, 0x0000, 0x700f, 0x0000, 0x7013,
++      0x0001, 0x702f, 0x0006, 0x7033, 0x0001, 0x7063, 0x0000, 0x0005,
++      0x00e6, 0x2071, 0xc755, 0x6a2c, 0x721e, 0x6b30, 0x7322, 0x6834,
++      0x7026, 0x705a, 0x6838, 0x702a, 0x705e, 0x6824, 0x7016, 0x683c,
++      0x701a, 0x2009, 0x0070, 0x200a, 0xa005, 0x0150, 0x2009, 0x0000,
++      0xa188, 0x000c, 0x8001, 0x1de0, 0x2100, 0xa210, 0x1208, 0x8318,
++      0x7252, 0x7356, 0x7010, 0xc084, 0x7012, 0x7007, 0x0001, 0x700f,
++      0x0000, 0xa006, 0x00ee, 0x0005, 0x2b78, 0x2071, 0xc755, 0x7004,
++      0x004b, 0x700c, 0x0002, 0x718e, 0x7187, 0x7187, 0x0005, 0x7198,
++      0x71e9, 0x71ea, 0x71eb, 0x71ec, 0x71ff, 0x7200, 0x700c, 0x0cba,
++      0x2f00, 0xa080, 0x0070, 0x2004, 0x2f08, 0xa188, 0x0070, 0x210c,
++      0xa106, 0x0150, 0x2f00, 0xa080, 0x0070, 0x2004, 0x2f08, 0xa188,
++      0x0070, 0x210c, 0xa106, 0x15e0, 0x7018, 0xa10a, 0x1118, 0x080c,
++      0x722d, 0x04b0, 0x1210, 0x7114, 0xa10a, 0xa192, 0x000a, 0x0210,
++      0x2009, 0x000a, 0x00d6, 0x0016, 0x2001, 0xc682, 0xa080, 0x0011,
++      0x2014, 0x2001, 0xc76f, 0xa080, 0x0005, 0x2004, 0xa100, 0xa202,
++      0x001e, 0x00de, 0x0e20, 0x080c, 0x727c, 0x2200, 0xa102, 0x0208,
++      0x2208, 0x713a, 0x080c, 0x7377, 0x2100, 0x7042, 0x2001, 0x0002,
++      0x7037, 0x0000, 0x0126, 0x0006, 0x2091, 0x8000, 0x2009, 0xc959,
++      0x2104, 0xc095, 0x200a, 0x000e, 0x700e, 0x012e, 0x080c, 0x1669,
++      0x0005, 0x0005, 0x0005, 0x0005, 0x700c, 0x0002, 0x71f1, 0x71f4,
++      0x71fe, 0x080c, 0x7196, 0x0005, 0x0126, 0x8001, 0x700e, 0x7138,
++      0x0041, 0x2091, 0x8000, 0x080c, 0x7196, 0x012e, 0x0005, 0x0005,
++      0x0005, 0x7018, 0xa100, 0x7214, 0xa21a, 0x1130, 0x701c, 0x7052,
++      0x7020, 0x7056, 0xa006, 0x0068, 0x0006, 0x080c, 0x7377, 0x2100,
++      0x7250, 0xa210, 0x7252, 0x1220, 0x7054, 0xa081, 0x0000, 0x7056,
++      0x000e, 0x2f08, 0xa188, 0x0070, 0x200a, 0x701a, 0x0005, 0x00e6,
++      0x2071, 0xc755, 0x700c, 0x0002, 0x7227, 0x7227, 0x7229, 0x00ee,
++      0x0005, 0x700f, 0x0001, 0x00ee, 0x0005, 0x0126, 0x2091, 0x8000,
++      0x00d6, 0x00e6, 0x2071, 0xc76f, 0x702c, 0xa005, 0x0178, 0x2068,
++      0x6964, 0x080c, 0x727c, 0x2100, 0x2208, 0xa102, 0x0238, 0x6800,
++      0x702e, 0x080c, 0x75b9, 0x080c, 0x1629, 0x0c70, 0x00ee, 0x00de,
++      0x012e, 0x0005, 0x00e6, 0x2071, 0xc76f, 0x702c, 0x6802, 0x2d00,
++      0x702e, 0x6858, 0x7120, 0xa102, 0x0a0c, 0x1519, 0x7022, 0x685b,
++      0x0000, 0x00ee, 0x0005, 0x00d6, 0x00e6, 0x2071, 0xc76f, 0xa006,
++      0x7006, 0x700e, 0x701a, 0x701e, 0x7022, 0x7016, 0x702a, 0x7026,
++      0x702f, 0x0000, 0x080c, 0x742b, 0x0168, 0x080c, 0x745d, 0x2d00,
++      0x7002, 0x700a, 0x701a, 0x7013, 0x0001, 0x701f, 0x0007, 0x00ee,
++      0x00de, 0x0005, 0xa00e, 0x0cd8, 0x00e6, 0x00d6, 0x00c6, 0x2071,
++      0xc76f, 0x721c, 0x2100, 0xa202, 0x1618, 0x080c, 0x745d, 0x090c,
++      0x1519, 0x7018, 0xa005, 0x1160, 0x2d00, 0x7002, 0x700a, 0x701a,
++      0xa006, 0x7006, 0x700e, 0x6806, 0x6802, 0x7012, 0x701e, 0x0038,
++      0x2060, 0x6806, 0x2d00, 0x6002, 0x701a, 0x6803, 0x0000, 0x7010,
++      0x8000, 0x7012, 0x701c, 0xa080, 0x0007, 0x701e, 0x721c, 0x08d0,
++      0x721c, 0x00ce, 0x00de, 0x00ee, 0x0005, 0x0156, 0x0136, 0x0146,
++      0x00e6, 0x0126, 0x2091, 0x8000, 0x2071, 0xc76f, 0x7300, 0xa398,
++      0x0003, 0x7104, 0x080c, 0x7377, 0x810c, 0x2100, 0xa318, 0x8003,
++      0x2228, 0x2021, 0x0054, 0xa402, 0xa532, 0x0208, 0x2028, 0x2500,
++      0x8004, 0x20a8, 0x23a0, 0xe000, 0xe000, 0xe000, 0x53a5, 0x2508,
++      0x080c, 0x7380, 0x2130, 0x7014, 0xa600, 0x7016, 0x2600, 0x711c,
++      0xa102, 0x701e, 0x7004, 0xa600, 0x2008, 0xa082, 0x0007, 0x1180,
++      0x7000, 0x2004, 0xa005, 0x1140, 0x2009, 0x0001, 0x0026, 0x080c,
++      0x727c, 0x002e, 0x7000, 0x2004, 0x7002, 0x7007, 0x0000, 0x0008,
++      0x7106, 0x2500, 0xa212, 0x1910, 0x012e, 0x00ee, 0x014e, 0x013e,
++      0x015e, 0x0005, 0x0016, 0x0026, 0x00e6, 0x00d6, 0x080c, 0x7340,
++      0x15e0, 0x2170, 0x2805, 0xac68, 0x2900, 0x0002, 0x7316, 0x7316,
++      0x731a, 0x7316, 0x731a, 0x7316, 0x7316, 0x7316, 0x7316, 0x7316,
++      0x7323, 0x7316, 0x7323, 0x7316, 0x7316, 0x7316, 0x080c, 0x1519,
++      0xa005, 0x00f0, 0x7000, 0x6802, 0x7004, 0x6806, 0x7010, 0x680a,
++      0x680f, 0x0000, 0x0060, 0x7010, 0x6812, 0x6817, 0x0000, 0x7000,
++      0x6802, 0x7004, 0x6806, 0x7008, 0x680a, 0x700c, 0x680e, 0x00de,
++      0x685c, 0x8000, 0x685e, 0x6858, 0x8001, 0x685a, 0x00d6, 0xa006,
++      0x00de, 0x00ee, 0x002e, 0x001e, 0x0005, 0xa085, 0x0001, 0x0cc0,
++      0x00e6, 0x0036, 0x2071, 0xc76f, 0x7014, 0xa005, 0x0568, 0x8001,
++      0x7016, 0x7020, 0x8001, 0x7022, 0x7008, 0xa080, 0x0003, 0x710c,
++      0x2110, 0x0429, 0x810c, 0xa118, 0x8210, 0xa282, 0x0007, 0x11b0,
++      0x7008, 0x2004, 0xa005, 0x0178, 0x00d6, 0x0006, 0x7008, 0x2068,
++      0x080c, 0x746c, 0x000e, 0x2068, 0x6807, 0x0000, 0x700a, 0x00de,
++      0x7010, 0x8001, 0x7012, 0x700f, 0x0000, 0x0008, 0x720e, 0x2308,
++      0xa006, 0x003e, 0x00ee, 0x0005, 0xa085, 0x0001, 0x0cd0, 0x0006,
++      0x810b, 0x810b, 0x2100, 0x810b, 0xa100, 0x2008, 0x000e, 0x0005,
++      0x0006, 0x0026, 0x2100, 0xa005, 0x0160, 0xa092, 0x000c, 0x0248,
++      0x2009, 0x0000, 0x8108, 0xa082, 0x000c, 0x1de0, 0x002e, 0x000e,
++      0x0005, 0x2009, 0x0000, 0x0cd0, 0x2d00, 0xa0b8, 0x0008, 0x690c,
++      0x6810, 0x2019, 0x0001, 0x2031, 0x73c2, 0xa112, 0x0220, 0x0118,
++      0x8318, 0x2208, 0x0cd0, 0x6808, 0xa005, 0x0108, 0x8318, 0x233a,
++      0x6804, 0xd084, 0x2300, 0x2021, 0x0001, 0x1150, 0xa082, 0x0003,
++      0x0967, 0x0a67, 0x8420, 0xa082, 0x0007, 0x0967, 0x0a67, 0x0cd0,
++      0xa082, 0x0002, 0x0967, 0x0a67, 0x8420, 0xa082, 0x0005, 0x0967,
++      0x0a67, 0x0cd0, 0x6c1a, 0x2d00, 0xa0b8, 0x0007, 0x00e6, 0x2071,
++      0xc600, 0x7128, 0x6810, 0x2019, 0x0001, 0xa10a, 0x0118, 0x0210,
++      0x8318, 0x0cd8, 0x2031, 0x73d5, 0x0870, 0x6c16, 0x00ee, 0x0005,
++      0x00e6, 0x00c6, 0x0126, 0x2091, 0x8000, 0x2e00, 0x2060, 0x2071,
++      0xc76f, 0x2009, 0x0001, 0x0026, 0x080c, 0x727c, 0x002e, 0x7300,
++      0xa398, 0x0003, 0x7104, 0x080c, 0x7377, 0x810c, 0x2100, 0xa318,
++      0x6834, 0xa084, 0x00ff, 0xa086, 0x0024, 0x00d6, 0x2368, 0x1138,
++      0x6000, 0x6802, 0x6004, 0x6806, 0x6008, 0x6812, 0x0050, 0x6000,
++      0x6802, 0x6004, 0x6806, 0x6008, 0x680a, 0x600c, 0x680e, 0x6010,
++      0x6812, 0x00de, 0x7014, 0x8000, 0x7016, 0x711c, 0x8109, 0x711e,
++      0x7004, 0x8000, 0x2008, 0xa082, 0x0007, 0x1180, 0x7000, 0x2004,
++      0xa005, 0x1140, 0x2009, 0x0001, 0x0026, 0x080c, 0x727c, 0x002e,
++      0x7000, 0x2004, 0x7002, 0x7007, 0x0000, 0x0008, 0x7106, 0x012e,
++      0x00ce, 0x00ee, 0x0005, 0x00d6, 0x0046, 0x0126, 0x2091, 0x8000,
++      0x2001, 0xc682, 0xa080, 0x0011, 0x2004, 0x8003, 0x2020, 0x080c,
++      0x15e5, 0x01d0, 0x2d00, 0x7026, 0x6803, 0x0000, 0x6807, 0x0000,
++      0x080c, 0x15e5, 0x0188, 0x7024, 0x6802, 0x6807, 0x0000, 0x2d00,
++      0x7026, 0xa4a2, 0x0007, 0x0110, 0x0208, 0x0c90, 0xa085, 0x0001,
++      0x012e, 0x004e, 0x00de, 0x0005, 0x7024, 0xa005, 0x0dc8, 0x2068,
++      0x2024, 0x080c, 0x1619, 0x2400, 0x0cc0, 0x0126, 0x2091, 0x8000,
++      0x7024, 0x2068, 0xa005, 0x0130, 0x2004, 0x7026, 0x6803, 0x0000,
++      0x6807, 0x0000, 0x012e, 0x0005, 0x0126, 0x2091, 0x8000, 0x7024,
++      0x6802, 0x2d00, 0x7026, 0x012e, 0x0005, 0x00d6, 0x2001, 0xc778,
++      0x2004, 0xa005, 0x0138, 0x2068, 0x6800, 0x0006, 0x080c, 0x1619,
++      0x000e, 0x0cb8, 0x00de, 0x0005, 0x00d6, 0x00e6, 0x2071, 0xc76f,
++      0x7008, 0xa005, 0x0138, 0x2068, 0x6800, 0x0006, 0x080c, 0x1619,
++      0x000e, 0x0cb8, 0xa006, 0x7002, 0x700a, 0x7006, 0x700e, 0x701a,
++      0x701e, 0x7022, 0x702a, 0x7026, 0x702e, 0x00ee, 0x00de, 0x0005,
++      0x00f6, 0x00e6, 0x00d6, 0x00c6, 0x0086, 0x0046, 0x0056, 0x0026,
++      0x2031, 0x0000, 0x2001, 0xc756, 0x2004, 0xa005, 0x0904, 0x7532,
++      0x2071, 0xc682, 0x20e1, 0x0002, 0x3d08, 0xd19c, 0x0140, 0x2069,
++      0xc600, 0x6a28, 0x761c, 0x7114, 0x2041, 0x0000, 0x0028, 0x7118,
++      0x720c, 0x7620, 0x7008, 0x2040, 0x080c, 0x7627, 0x0904, 0x7532,
++      0x7004, 0xd084, 0x1128, 0x2021, 0x0024, 0x2029, 0x0002, 0x0020,
++      0x2021, 0x002c, 0x2029, 0x000a, 0x080c, 0x1602, 0x0904, 0x752a,
++      0x2d00, 0x2060, 0x6436, 0x0016, 0x20e1, 0x0001, 0x3d08, 0x3e00,
++      0xa18c, 0x00ff, 0x6142, 0x603e, 0x001e, 0x6746, 0x2700, 0xa086,
++      0xff00, 0x1118, 0x6063, 0x0000, 0x0010, 0x6063, 0x0003, 0xa006,
++      0x6002, 0x602a, 0x602e, 0x6006, 0x603a, 0x604a, 0x6052, 0x6057,
++      0x0005, 0x605e, 0x6066, 0x604e, 0x2800, 0x606a, 0x604c, 0xc0ad,
++      0x604e, 0x665a, 0x2c00, 0x2078, 0x0479, 0x607f, 0xffff, 0x6083,
++      0x0000, 0x8109, 0x0180, 0x080c, 0x1602, 0x01c0, 0x2d00, 0x7806,
++      0x2f00, 0x6802, 0x6d36, 0xa006, 0x2d00, 0x2520, 0x00e9, 0x2d00,
++      0x2078, 0x8109, 0x1d80, 0x2c00, 0xa005, 0x002e, 0x005e, 0x004e,
++      0x008e, 0x00ce, 0x00de, 0x00ee, 0x00fe, 0x0005, 0x2c00, 0x2068,
++      0x080c, 0x1629, 0x2600, 0x2071, 0xc76f, 0x7120, 0xa102, 0x0a0c,
++      0x1519, 0x7022, 0xa006, 0x0c48, 0x00d6, 0x00c6, 0x0136, 0x0146,
++      0x0156, 0x0016, 0x2068, 0x2400, 0xa084, 0x000f, 0xa080, 0x23c7,
++      0x2005, 0x2005, 0xad60, 0x2c00, 0x2d08, 0xa188, 0x0030, 0xa102,
++      0x20a8, 0x2c00, 0x20a0, 0x2001, 0xffff, 0x40a4, 0x001e, 0x015e,
++      0x014e, 0x013e, 0x00ce, 0x00de, 0x0005, 0x00c6, 0x00e6, 0x00f6,
++      0x6858, 0x2071, 0xc76f, 0x7120, 0xa102, 0x0a0c, 0x1519, 0x7022,
++      0x6960, 0x694e, 0x697c, 0x2009, 0xffff, 0x7818, 0xa102, 0xe000,
++      0x6852, 0x684b, 0x0000, 0x6868, 0xa005, 0x0118, 0x6848, 0xc085,
++      0x684a, 0x2d00, 0xa080, 0x0015, 0x2038, 0x2031, 0x0018, 0x6864,
++      0x2020, 0x683a, 0x685c, 0xa08a, 0x00ff, 0x1a0c, 0x1519, 0x2028,
++      0x2d00, 0x2060, 0x2078, 0x6934, 0xa18c, 0x000f, 0xa188, 0x23c7,
++      0x2145, 0x685c, 0x2050, 0xa005, 0x0530, 0x2805, 0xac70, 0x6834,
++      0xa084, 0x00ff, 0xa086, 0x0024, 0x1110, 0x7008, 0x0040, 0x6834,
++      0xa084, 0x00ff, 0xa086, 0x002c, 0x190c, 0x1519, 0x7010, 0x0006,
++      0x2400, 0xa005, 0x000e, 0x0168, 0x203a, 0x8738, 0x8631, 0x090c,
++      0x1519, 0x8421, 0x8529, 0x0138, 0x080c, 0x2389, 0x090c, 0x1519,
++      0x08e0, 0x080c, 0x73d8, 0x6837, 0x0023, 0x00fe, 0x00ee, 0x00ce,
++      0x0005, 0x00e6, 0x00c6, 0x00a6, 0x0086, 0x0056, 0x2d00, 0x2060,
++      0x6934, 0xa18c, 0x000f, 0xa188, 0x23c7, 0x2145, 0x685c, 0x2050,
++      0xa005, 0x01d0, 0x2028, 0x2805, 0xac70, 0x6834, 0xa084, 0x00ff,
++      0xa086, 0x0024, 0x1110, 0x7008, 0x0008, 0x7010, 0x0006, 0xa086,
++      0xffff, 0x000e, 0x0110, 0x080c, 0x73d8, 0x8529, 0x0128, 0x080c,
++      0x2389, 0x090c, 0x1519, 0x0c38, 0x005e, 0x008e, 0x00ae, 0x00ce,
++      0x00ee, 0x0005, 0x70ac, 0xa005, 0x0120, 0x2060, 0x6008, 0xa306,
++      0x0005, 0xa085, 0x0001, 0x0ce0, 0x70ac, 0x600e, 0x2c00, 0x70ae,
++      0x0005, 0x00f6, 0x00d6, 0x0036, 0x70ac, 0xa005, 0x01b8, 0x2068,
++      0x2079, 0x0000, 0x2c08, 0xa11e, 0x1118, 0x680c, 0x70ae, 0x0060,
++      0xa106, 0x0140, 0x2d00, 0x2078, 0x680c, 0xa005, 0x090c, 0x1519,
++      0x2068, 0x0cb0, 0x6b0c, 0x7b0e, 0x600f, 0x0000, 0x003e, 0x00de,
++      0x00fe, 0x0005, 0x00e6, 0x080c, 0x724a, 0x6018, 0x2070, 0xa006,
++      0x70b2, 0x70b6, 0x08b1, 0x080c, 0x95e3, 0x00ee, 0x0005, 0x00d6,
++      0x0026, 0x0016, 0x2061, 0xc76f, 0x6020, 0x6414, 0xa600, 0xa42a,
++      0x02f0, 0x6022, 0x2069, 0xc682, 0x6828, 0x6114, 0xa102, 0x1288,
++      0x685c, 0xd08c, 0x1130, 0xc08d, 0x685e, 0x2011, 0x8025, 0x080c,
++      0x407d, 0x2001, 0xc695, 0x2004, 0xa080, 0x0000, 0x200c, 0x8108,
++      0x2102, 0xa085, 0x0001, 0x001e, 0x002e, 0x00de, 0x0005, 0x2069,
++      0xc682, 0x6804, 0xd094, 0x0148, 0x685c, 0xd084, 0x1130, 0xc085,
++      0x685e, 0x2011, 0x8026, 0x080c, 0x407d, 0x2001, 0xc695, 0x2004,
++      0xa080, 0x0001, 0x200c, 0x8108, 0x2102, 0xa006, 0x2031, 0x0000,
++      0x0c10, 0x0006, 0x0016, 0x00c6, 0x6018, 0x2060, 0x6010, 0xa005,
++      0x0178, 0x2001, 0xc756, 0x2004, 0xa005, 0x0150, 0x2001, 0xc600,
++      0x2004, 0xa086, 0x0003, 0x1120, 0x2011, 0x8014, 0x080c, 0x407d,
++      0x00ce, 0x001e, 0x000e, 0x0005, 0x0016, 0x6834, 0xa08c, 0x00ff,
++      0xa186, 0x0024, 0x0110, 0xa186, 0x002c, 0x001e, 0x0005, 0x2001,
++      0xc683, 0x2004, 0xd09c, 0x0005, 0x2001, 0xc683, 0x2004, 0xd0a4,
++      0x0005, 0x0066, 0x6000, 0xa0b2, 0x0010, 0x1a0c, 0x1519, 0x0013,
++      0x006e, 0x0005, 0x76b2, 0x76b2, 0x76b2, 0x76b4, 0x770f, 0x76b2,
++      0x76b2, 0x76b2, 0x774d, 0x76b2, 0x77aa, 0x76b2, 0x76b2, 0x76b2,
++      0x76b2, 0x76b2, 0x080c, 0x1519, 0xa182, 0x0100, 0x0002, 0x76c6,
++      0x76c6, 0x76c6, 0x76c8, 0x76e1, 0x76fb, 0x76c6, 0x76c6, 0x76c6,
++      0x76c6, 0x76c6, 0x76c6, 0x76c6, 0x76c6, 0x76c6, 0x080c, 0x1519,
++      0x00d6, 0x080c, 0x7e47, 0x080c, 0x7f6e, 0x6110, 0x2168, 0x684b,
++      0x0000, 0x00d6, 0x6018, 0x2068, 0x6008, 0x68b6, 0x68bb, 0x0500,
++      0xa006, 0x68b2, 0x00de, 0x080c, 0x580a, 0x080c, 0x95e3, 0x00de,
++      0x0005, 0x080c, 0x7e47, 0x00f6, 0x00d6, 0x6110, 0x2178, 0x080c,
++      0xac91, 0x0150, 0x00e6, 0x6018, 0x2070, 0xa006, 0x70b2, 0x70b6,
++      0x00ee, 0x2f68, 0x080c, 0x580a, 0x00de, 0x00fe, 0x080c, 0x95e3,
++      0x080c, 0x7f6e, 0x0005, 0x080c, 0x7e47, 0x080c, 0x2e46, 0x00d6,
++      0x6110, 0x2168, 0x080c, 0xac91, 0x0120, 0x684b, 0x0029, 0x080c,
++      0x580a, 0x00de, 0x080c, 0x95e3, 0x080c, 0x7f6e, 0x0005, 0xa182,
++      0x0100, 0x0002, 0x7721, 0x7723, 0x772b, 0x7721, 0x7721, 0x7721,
++      0x7748, 0x7721, 0x7721, 0x7721, 0x7721, 0x7721, 0x7721, 0x7721,
++      0x7721, 0x080c, 0x1519, 0x20e1, 0x0005, 0x3d18, 0x3e20, 0x2c10,
++      0x080c, 0x1870, 0x0005, 0x00d6, 0x00e6, 0x2001, 0xc756, 0x2004,
++      0xa086, 0x0000, 0x6110, 0x1118, 0x080c, 0x1629, 0x0028, 0x2168,
++      0x080c, 0x7555, 0x080c, 0x580a, 0x6018, 0x2070, 0xa006, 0x70b2,
++      0x70b6, 0x080c, 0x75f9, 0x00ee, 0x00de, 0x080c, 0x95e3, 0x0005,
++      0x080c, 0x761a, 0x080c, 0x56c7, 0x0005, 0xa182, 0x0100, 0x0002,
++      0x7762, 0x7788, 0x7760, 0x7760, 0x7760, 0x7760, 0x7760, 0x7760,
++      0x7760, 0x7760, 0x7760, 0x7760, 0x7760, 0x7760, 0x7760, 0x7760,
++      0x080c, 0x1519, 0x00d6, 0x6003, 0x0003, 0x6106, 0x6010, 0x2068,
++      0x687c, 0x680a, 0x6880, 0x680e, 0x6813, 0x0000, 0x6817, 0x0000,
++      0x6854, 0xa092, 0x199a, 0x0210, 0x2001, 0x1999, 0x8003, 0x8013,
++      0x8213, 0xa210, 0x6216, 0x00de, 0x2c10, 0x080c, 0x2068, 0x080c,
++      0x79fc, 0x0126, 0x2091, 0x8000, 0x080c, 0x7f6e, 0x012e, 0x0005,
++      0x6003, 0x0004, 0x630a, 0x080c, 0x74a0, 0x0168, 0x6012, 0x600f,
++      0x0000, 0x080c, 0x75f4, 0x20e1, 0x0005, 0x3d18, 0x3e20, 0x2c10,
++      0x080c, 0x1870, 0x0005, 0x2011, 0x0000, 0x080c, 0x1870, 0x00e6,
++      0x6018, 0x2070, 0x70b3, 0x0000, 0x70b7, 0x0000, 0x00ee, 0x080c,
++      0x95e3, 0x0005, 0x00d6, 0x080c, 0x7e47, 0x080c, 0x7f6e, 0x6110,
++      0x2168, 0x684b, 0x0000, 0x00d6, 0x6018, 0x2068, 0x6008, 0x68b6,
++      0x68bb, 0x0500, 0xa006, 0x68b2, 0x00de, 0x080c, 0x580a, 0x080c,
++      0x95e3, 0x00de, 0x0005, 0x6000, 0xa08a, 0x0010, 0x1a0c, 0x1519,
++      0x000b, 0x0005, 0x77da, 0x77da, 0x77da, 0x77dc, 0x77f1, 0x77da,
++      0x77da, 0x77da, 0x77da, 0x77da, 0x77da, 0x77da, 0x77da, 0x77da,
++      0x77da, 0x77da, 0x080c, 0x1519, 0x080c, 0x90f6, 0x6110, 0x2168,
++      0x684b, 0x0006, 0x00d6, 0x6018, 0x2068, 0x6008, 0x68b6, 0x68bb,
++      0x0500, 0xa006, 0x68b2, 0x00de, 0x080c, 0x580a, 0x080c, 0x95e3,
++      0x0005, 0x080c, 0x761a, 0x0005, 0x6000, 0xa08a, 0x0010, 0x1a0c,
++      0x1519, 0x000b, 0x0005, 0x780b, 0x780b, 0x780b, 0x780d, 0x781d,
++      0x780b, 0x780b, 0x780b, 0x780b, 0x780b, 0x780b, 0x780b, 0x780b,
++      0x780b, 0x780b, 0x780b, 0x080c, 0x1519, 0x0036, 0x00e6, 0x2071,
++      0xc927, 0x703c, 0xac06, 0x1120, 0x2019, 0x0000, 0x080c, 0x8e79,
++      0x080c, 0x90f6, 0x00ee, 0x003e, 0x0005, 0x00d6, 0x6010, 0x2068,
++      0x080c, 0x761a, 0x00de, 0x0005, 0x080c, 0x7684, 0x1150, 0x6024,
++      0xd09c, 0x1138, 0x6810, 0x2009, 0xffff, 0xa102, 0x2020, 0x2019,
++      0x0000, 0x0005, 0x20a9, 0x0010, 0xa006, 0x8004, 0x8086, 0x818e,
++      0x1208, 0xa200, 0x1f04, 0x7836, 0x8086, 0x818e, 0x0005, 0x0156,
++      0x20a9, 0x0010, 0xa005, 0x01b8, 0xa11a, 0x12a8, 0x8213, 0x818d,
++      0x0228, 0xa11a, 0x1220, 0x1f04, 0x7846, 0x0028, 0xa11a, 0x2308,
++      0x8210, 0x1f04, 0x7846, 0x0006, 0x3200, 0xa084, 0xefff, 0x2080,
++      0x000e, 0x015e, 0x0005, 0x0006, 0x3200, 0xa085, 0x1000, 0x0cb8,
++      0x0126, 0x2091, 0x2800, 0x2079, 0xc927, 0x012e, 0x00d6, 0x2069,
++      0xc927, 0x6803, 0x0005, 0x2069, 0x0004, 0x2d04, 0xa085, 0x8001,
++      0x206a, 0x00de, 0x0005, 0x00c6, 0x6027, 0x0001, 0x7804, 0xa084,
++      0x0007, 0x0002, 0x7884, 0x78a5, 0x78f8, 0x788a, 0x78a5, 0x7884,
++      0x7882, 0x7882, 0x080c, 0x1519, 0x080c, 0x7024, 0x080c, 0x7e94,
++      0x00ce, 0x0005, 0x62c0, 0x82ff, 0x1110, 0x00ce, 0x0005, 0x2011,
++      0x4e18, 0x080c, 0x6fad, 0x7828, 0xa092, 0x00c8, 0x1228, 0x8000,
++      0x782a, 0x080c, 0x4e52, 0x0c88, 0x080c, 0x4e18, 0x7807, 0x0003,
++      0x7827, 0x0000, 0x782b, 0x0000, 0x0c40, 0x080c, 0x7024, 0x3c00,
++      0x0006, 0x2011, 0x0209, 0x20e1, 0x4000, 0x2214, 0x000e, 0x20e0,
++      0x82ff, 0x0178, 0x62c0, 0x82ff, 0x1160, 0x782b, 0x0000, 0x7824,
++      0xa065, 0x090c, 0x1519, 0x2009, 0x0013, 0x080c, 0x9613, 0x00ce,
++      0x0005, 0x3900, 0xa082, 0xca74, 0x1210, 0x080c, 0x91cb, 0x00c6,
++      0x7824, 0xa065, 0x090c, 0x1519, 0x7804, 0xa086, 0x0004, 0x0904,
++      0x7938, 0x7828, 0xa092, 0x2710, 0x1230, 0x8000, 0x782a, 0x00ce,
++      0x080c, 0x8be8, 0x0c20, 0x6104, 0xa186, 0x0003, 0x1188, 0x00e6,
++      0x2071, 0xc600, 0x70e0, 0x00ee, 0xd08c, 0x0150, 0x00c6, 0x00e6,
++      0x2061, 0x0100, 0x2071, 0xc600, 0x080c, 0x4e5b, 0x00ee, 0x00ce,
++      0x080c, 0xc59b, 0x2009, 0x0014, 0x080c, 0x9613, 0x00ce, 0x0838,
++      0x2001, 0xc943, 0x2003, 0x0000, 0x62c0, 0x82ff, 0x1160, 0x782b,
++      0x0000, 0x7824, 0xa065, 0x090c, 0x1519, 0x2009, 0x0013, 0x080c,
++      0x9667, 0x00ce, 0x0005, 0x00c6, 0x00d6, 0x3900, 0xa082, 0xca74,
++      0x1210, 0x080c, 0x91cb, 0x7824, 0xa005, 0x090c, 0x1519, 0x781c,
++      0xa06d, 0x090c, 0x1519, 0x6800, 0xc0dc, 0x6802, 0x7924, 0x2160,
++      0x080c, 0x95e3, 0x693c, 0x81ff, 0x090c, 0x1519, 0x8109, 0x693e,
++      0x6854, 0xa015, 0x0110, 0x7a1e, 0x0010, 0x7918, 0x791e, 0x7807,
++      0x0000, 0x7827, 0x0000, 0x00de, 0x00ce, 0x080c, 0x7e94, 0x0888,
++      0x6104, 0xa186, 0x0002, 0x0128, 0xa186, 0x0004, 0x0110, 0x0804,
++      0x78d1, 0x7808, 0xac06, 0x0904, 0x78d1, 0x080c, 0x7db1, 0x080c,
++      0x79df, 0x00ce, 0x080c, 0x7e94, 0x0804, 0x78bf, 0x00c6, 0x6027,
++      0x0002, 0x62c8, 0x60c4, 0xa205, 0x11a8, 0x793c, 0xa1e5, 0x0000,
++      0x0160, 0x2009, 0x0049, 0x601c, 0xa086, 0x0009, 0x1110, 0x2009,
++      0x0103, 0x080c, 0x9613, 0x00ce, 0x0005, 0x2011, 0xc946, 0x2013,
++      0x0000, 0x0cc8, 0x3908, 0xa192, 0xca74, 0x1210, 0x080c, 0x91cb,
++      0x793c, 0x81ff, 0x0d90, 0x7944, 0xa192, 0x7530, 0x12f0, 0x8108,
++      0x7946, 0x793c, 0xa188, 0x0007, 0x210c, 0xa18e, 0x0006, 0x1138,
++      0x6014, 0xa084, 0x0184, 0xa085, 0x0012, 0x6016, 0x08e0, 0x793c,
++      0xa188, 0x0007, 0x210c, 0xa18e, 0x0009, 0x0d90, 0x6014, 0xa084,
++      0x0184, 0xa085, 0x0016, 0x6016, 0x0870, 0x7848, 0xc085, 0x784a,
++      0x0850, 0x0006, 0x0016, 0x00c6, 0x0126, 0x2091, 0x8000, 0x600f,
++      0x0000, 0x2c08, 0x2061, 0xc927, 0x6020, 0x8000, 0x6022, 0x6010,
++      0xa005, 0x0148, 0xa080, 0x0003, 0x2102, 0x6112, 0x012e, 0x00ce,
++      0x001e, 0x000e, 0x0005, 0x6116, 0x6112, 0x0cc0, 0x00d6, 0x2069,
++      0xc927, 0x6000, 0xd0d4, 0x0168, 0x6820, 0x8000, 0x6822, 0xa086,
++      0x0001, 0x1110, 0x2c00, 0x681e, 0x6804, 0xa084, 0x0007, 0x0804,
++      0x7e9a, 0xc0d5, 0x6002, 0x6818, 0xa005, 0x0158, 0x6056, 0x605b,
++      0x0000, 0x0006, 0x2c00, 0x681a, 0x00de, 0x685a, 0x2069, 0xc927,
++      0x0c18, 0x6056, 0x605a, 0x2c00, 0x681a, 0x681e, 0x08e8, 0x0006,
++      0x0016, 0x00c6, 0x0126, 0x2091, 0x8000, 0x600f, 0x0000, 0x2c08,
++      0x2061, 0xc927, 0x6020, 0x8000, 0x6022, 0x6008, 0xa005, 0x0148,
++      0xa080, 0x0003, 0x2102, 0x610a, 0x012e, 0x00ce, 0x001e, 0x000e,
++      0x0005, 0x610e, 0x610a, 0x0cc0, 0x00c6, 0x600f, 0x0000, 0x2c08,
++      0x2061, 0xc927, 0x6034, 0xa005, 0x0130, 0xa080, 0x0003, 0x2102,
++      0x6136, 0x00ce, 0x0005, 0x613a, 0x6136, 0x0cd8, 0x00f6, 0x00e6,
++      0x00d6, 0x00c6, 0x0076, 0x0066, 0x0056, 0x0036, 0x0026, 0x0016,
++      0x0006, 0x0126, 0xa02e, 0x2071, 0xc927, 0x7638, 0x2660, 0x2678,
++      0x2091, 0x8000, 0x8cff, 0x0904, 0x7a87, 0x6018, 0xa080, 0x0028,
++      0x2004, 0xa206, 0x1904, 0x7a82, 0x87ff, 0x0120, 0x6050, 0xa106,
++      0x1904, 0x7a82, 0x703c, 0xac06, 0x1190, 0x0036, 0x2019, 0x0001,
++      0x080c, 0x8e79, 0x7033, 0x0000, 0x703f, 0x0000, 0x7043, 0x0000,
++      0x7047, 0x0000, 0x704b, 0x0000, 0x003e, 0x2029, 0x0001, 0x7038,
++      0xac36, 0x1110, 0x660c, 0x763a, 0x7034, 0xac36, 0x1140, 0x2c00,
++      0xaf36, 0x0118, 0x2f00, 0x7036, 0x0010, 0x7037, 0x0000, 0x660c,
++      0x0066, 0x2c00, 0xaf06, 0x0110, 0x7e0e, 0x0008, 0x2678, 0x600f,
++      0x0000, 0x080c, 0xac91, 0x01c8, 0x6010, 0x2068, 0x601c, 0xa086,
++      0x0003, 0x1580, 0x6837, 0x0103, 0x6b4a, 0x6847, 0x0000, 0x0016,
++      0x0036, 0x0076, 0x080c, 0xaf03, 0x080c, 0xc4d7, 0x080c, 0x580a,
++      0x007e, 0x003e, 0x001e, 0x080c, 0xae48, 0x080c, 0xae54, 0x00ce,
++      0x0804, 0x7a22, 0x2c78, 0x600c, 0x2060, 0x0804, 0x7a22, 0x85ff,
++      0x0120, 0x0036, 0x080c, 0x7f6e, 0x003e, 0x012e, 0x000e, 0x001e,
++      0x002e, 0x003e, 0x005e, 0x006e, 0x007e, 0x00ce, 0x00de, 0x00ee,
++      0x00fe, 0x0005, 0x601c, 0xa086, 0x0006, 0x0158, 0x601c, 0xa086,
++      0x0009, 0x1190, 0x684b, 0x0006, 0x080c, 0x580a, 0x080c, 0x95e3,
++      0x08b0, 0x0016, 0x0036, 0x0076, 0x080c, 0xc4d7, 0x080c, 0xc141,
++      0x007e, 0x003e, 0x001e, 0x0848, 0x601c, 0xa086, 0x000a, 0x0904,
++      0x7a6c, 0x0804, 0x7a6a, 0x0006, 0x0066, 0x00c6, 0x00d6, 0x00f6,
++      0x2031, 0x0000, 0x0126, 0x2091, 0x8000, 0x2079, 0xc927, 0x7838,
++      0xa065, 0x0568, 0x600c, 0x0006, 0x600f, 0x0000, 0x783c, 0xac06,
++      0x1180, 0x0036, 0x2019, 0x0001, 0x080c, 0x8e79, 0x7833, 0x0000,
++      0x783f, 0x0000, 0x7843, 0x0000, 0x7847, 0x0000, 0x784b, 0x0000,
++      0x003e, 0x080c, 0xac91, 0x0178, 0x6010, 0x2068, 0x601c, 0xa086,
++      0x0003, 0x11b0, 0x6837, 0x0103, 0x6b4a, 0x6847, 0x0000, 0x080c,
++      0x580a, 0x080c, 0xae48, 0x080c, 0xae54, 0x000e, 0x0888, 0x7e3a,
++      0x7e36, 0x012e, 0x00fe, 0x00de, 0x00ce, 0x006e, 0x000e, 0x0005,
++      0x601c, 0xa086, 0x0006, 0x0150, 0x601c, 0xa086, 0x0009, 0x1148,
++      0x6b4a, 0x080c, 0x580a, 0x080c, 0x95e3, 0x0c38, 0x080c, 0xc141,
++      0x0c10, 0x601c, 0xa086, 0x000a, 0x09b8, 0x08a0, 0x0016, 0x0026,
++      0x0086, 0x2041, 0x0000, 0x0099, 0x080c, 0x7be4, 0x008e, 0x002e,
++      0x001e, 0x0005, 0x00f6, 0x0126, 0x2079, 0xc927, 0x2091, 0x8000,
++      0x080c, 0x7c71, 0x080c, 0x7ce3, 0x012e, 0x00fe, 0x0005, 0x00f6,
++      0x00e6, 0x00d6, 0x00c6, 0x0066, 0x0016, 0x0006, 0x0126, 0x2091,
++      0x8000, 0x2071, 0xc927, 0x7614, 0x2660, 0x2678, 0x8cff, 0x0904,
++      0x7bba, 0x6018, 0xa080, 0x0028, 0x2004, 0xa206, 0x1904, 0x7bb5,
++      0x88ff, 0x0120, 0x6050, 0xa106, 0x1904, 0x7bb5, 0x7024, 0xac06,
++      0x1538, 0x2069, 0x0100, 0x68c0, 0xa005, 0x01f0, 0x080c, 0x7024,
++      0x080c, 0x8bf5, 0x68c3, 0x0000, 0x080c, 0x90e6, 0x7027, 0x0000,
++      0x0036, 0x2069, 0x0140, 0x6b04, 0xa384, 0x1000, 0x0120, 0x6803,
++      0x0100, 0x6803, 0x0000, 0x2069, 0x0100, 0x6824, 0xd084, 0x0110,
++      0x6827, 0x0001, 0x003e, 0x0020, 0x6003, 0x0009, 0x630a, 0x04e8,
++      0x7014, 0xac36, 0x1110, 0x660c, 0x7616, 0x7010, 0xac36, 0x1140,
++      0x2c00, 0xaf36, 0x0118, 0x2f00, 0x7012, 0x0010, 0x7013, 0x0000,
++      0x660c, 0x0066, 0x2c00, 0xaf06, 0x0110, 0x7e0e, 0x0008, 0x2678,
++      0x600f, 0x0000, 0x6010, 0x2068, 0x080c, 0xac91, 0x01b8, 0x601c,
++      0xa086, 0x0003, 0x1540, 0x6837, 0x0103, 0x6b4a, 0x6847, 0x0000,
++      0x0016, 0x0036, 0x0086, 0x080c, 0xaf03, 0x080c, 0xc4d7, 0x080c,
++      0x580a, 0x008e, 0x003e, 0x001e, 0x080c, 0xae48, 0x080c, 0xae54,
++      0x080c, 0x8fb7, 0x00ce, 0x0804, 0x7b3e, 0x2c78, 0x600c, 0x2060,
++      0x0804, 0x7b3e, 0x012e, 0x000e, 0x001e, 0x006e, 0x00ce, 0x00de,
++      0x00ee, 0x00fe, 0x0005, 0x601c, 0xa086, 0x0006, 0x1158, 0x0016,
++      0x0036, 0x0086, 0x080c, 0xc4d7, 0x080c, 0xc141, 0x008e, 0x003e,
++      0x001e, 0x08e0, 0x601c, 0xa086, 0x0002, 0x1128, 0x6004, 0xa086,
++      0x0085, 0x0908, 0x0898, 0x601c, 0xa086, 0x0005, 0x1978, 0x6004,
++      0xa086, 0x0085, 0x0d20, 0x0850, 0x00c6, 0x0006, 0x0126, 0x2091,
++      0x8000, 0xa280, 0xc77b, 0x2004, 0xa065, 0x0904, 0x7c6d, 0x00f6,
++      0x00e6, 0x00d6, 0x0066, 0x2071, 0xc927, 0x6654, 0x7018, 0xac06,
++      0x1108, 0x761a, 0x701c, 0xac06, 0x1130, 0x86ff, 0x1118, 0x7018,
++      0x701e, 0x0008, 0x761e, 0x6058, 0xa07d, 0x0108, 0x7e56, 0xa6ed,
++      0x0000, 0x0110, 0x2f00, 0x685a, 0x6057, 0x0000, 0x605b, 0x0000,
++      0x6000, 0xc0d4, 0xc0dc, 0x6002, 0x080c, 0x5268, 0x0904, 0x7c69,
++      0x7624, 0x86ff, 0x05e8, 0xa680, 0x0004, 0x2004, 0xad06, 0x15c0,
++      0x00d6, 0x2069, 0x0100, 0x68c0, 0xa005, 0x0548, 0x080c, 0x7024,
++      0x080c, 0x8bf5, 0x68c3, 0x0000, 0x080c, 0x90e6, 0x7027, 0x0000,
++      0x0036, 0x2069, 0x0140, 0x6b04, 0xa384, 0x1000, 0x0120, 0x6803,
++      0x0100, 0x6803, 0x0000, 0x2069, 0x0100, 0x6824, 0xd084, 0x0110,
++      0x6827, 0x0001, 0x003e, 0x00de, 0x00c6, 0x603c, 0xa005, 0x0110,
++      0x8001, 0x603e, 0x2660, 0x080c, 0xae54, 0x00ce, 0x0048, 0x00de,
++      0x00c6, 0x2660, 0x6003, 0x0009, 0x630a, 0x00ce, 0x0804, 0x7c14,
++      0x8dff, 0x0158, 0x6837, 0x0103, 0x6b4a, 0x6847, 0x0000, 0x080c,
++      0xaf03, 0x080c, 0xc4d7, 0x080c, 0x580a, 0x080c, 0x8fb7, 0x0804,
++      0x7c14, 0x006e, 0x00de, 0x00ee, 0x00fe, 0x012e, 0x000e, 0x00ce,
++      0x0005, 0x0006, 0x0066, 0x00c6, 0x00d6, 0x2031, 0x0000, 0x7814,
++      0xa065, 0x0904, 0x7cc3, 0x600c, 0x0006, 0x600f, 0x0000, 0x7824,
++      0xac06, 0x1540, 0x2069, 0x0100, 0x68c0, 0xa005, 0x01f0, 0x080c,
++      0x7024, 0x080c, 0x8bf5, 0x68c3, 0x0000, 0x080c, 0x90e6, 0x7827,
++      0x0000, 0x0036, 0x2069, 0x0140, 0x6b04, 0xa384, 0x1000, 0x0120,
++      0x6803, 0x0100, 0x6803, 0x0000, 0x2069, 0x0100, 0x6824, 0xd084,
++      0x0110, 0x6827, 0x0001, 0x003e, 0x0028, 0x6003, 0x0009, 0x630a,
++      0x2c30, 0x00b0, 0x6010, 0x2068, 0x080c, 0xac91, 0x0168, 0x601c,
++      0xa086, 0x0003, 0x11b8, 0x6837, 0x0103, 0x6b4a, 0x6847, 0x0000,
++      0x080c, 0x580a, 0x080c, 0xae48, 0x080c, 0xae54, 0x080c, 0x8fb7,
++      0x000e, 0x0804, 0x7c78, 0x7e16, 0x7e12, 0x00de, 0x00ce, 0x006e,
++      0x000e, 0x0005, 0x601c, 0xa086, 0x0006, 0x1118, 0x080c, 0xc141,
++      0x0c58, 0x601c, 0xa086, 0x0002, 0x1128, 0x6004, 0xa086, 0x0085,
++      0x09d0, 0x0c10, 0x601c, 0xa086, 0x0005, 0x19f0, 0x6004, 0xa086,
++      0x0085, 0x0d60, 0x08c8, 0x0006, 0x0066, 0x00c6, 0x00d6, 0x7818,
++      0xa065, 0x0904, 0x7d49, 0x6054, 0x0006, 0x6057, 0x0000, 0x605b,
++      0x0000, 0x6000, 0xc0d4, 0xc0dc, 0x6002, 0x080c, 0x5268, 0x0904,
++      0x7d46, 0x7e24, 0x86ff, 0x05e8, 0xa680, 0x0004, 0x2004, 0xad06,
++      0x15c0, 0x00d6, 0x2069, 0x0100, 0x68c0, 0xa005, 0x0548, 0x080c,
++      0x7024, 0x080c, 0x8bf5, 0x68c3, 0x0000, 0x080c, 0x90e6, 0x7827,
++      0x0000, 0x0036, 0x2069, 0x0140, 0x6b04, 0xa384, 0x1000, 0x0120,
++      0x6803, 0x0100, 0x6803, 0x0000, 0x2069, 0x0100, 0x6824, 0xd084,
++      0x0110, 0x6827, 0x0001, 0x003e, 0x00de, 0x00c6, 0x603c, 0xa005,
++      0x0110, 0x8001, 0x603e, 0x2660, 0x080c, 0xae54, 0x00ce, 0x0048,
++      0x00de, 0x00c6, 0x2660, 0x6003, 0x0009, 0x630a, 0x00ce, 0x0804,
++      0x7cf5, 0x8dff, 0x0138, 0x6837, 0x0103, 0x6b4a, 0x6847, 0x0000,
++      0x080c, 0x580a, 0x080c, 0x8fb7, 0x0804, 0x7cf5, 0x000e, 0x0804,
++      0x7ce8, 0x781e, 0x781a, 0x00de, 0x00ce, 0x006e, 0x000e, 0x0005,
++      0x00e6, 0x00d6, 0x0066, 0x6000, 0xd0dc, 0x01a0, 0x604c, 0xa06d,
++      0x0188, 0x6848, 0xa606, 0x1170, 0x2071, 0xc927, 0x7024, 0xa035,
++      0x0148, 0xa080, 0x0004, 0x2004, 0xad06, 0x1120, 0x6000, 0xc0dc,
++      0x6002, 0x0021, 0x006e, 0x00de, 0x00ee, 0x0005, 0x00f6, 0x2079,
++      0x0100, 0x78c0, 0xa005, 0x1138, 0x00c6, 0x2660, 0x6003, 0x0009,
++      0x630a, 0x00ce, 0x04a0, 0x080c, 0x8bf5, 0x78c3, 0x0000, 0x080c,
++      0x90e6, 0x7027, 0x0000, 0x0036, 0x2079, 0x0140, 0x7b04, 0xa384,
++      0x1000, 0x0120, 0x7803, 0x0100, 0x7803, 0x0000, 0x2079, 0x0100,
++      0x7824, 0xd084, 0x0110, 0x7827, 0x0001, 0x080c, 0x90e6, 0x003e,
++      0x080c, 0x5268, 0x00c6, 0x603c, 0xa005, 0x0110, 0x8001, 0x603e,
++      0x2660, 0x080c, 0x95e3, 0x00ce, 0x6837, 0x0103, 0x6b4a, 0x6847,
++      0x0000, 0x080c, 0xaf03, 0x080c, 0x580a, 0x080c, 0x8fb7, 0x00fe,
++      0x0005, 0x00e6, 0x00c6, 0x2071, 0xc927, 0x7004, 0xa084, 0x0007,
++      0x0002, 0x7dc3, 0x7dc6, 0x7ddc, 0x7df5, 0x7e32, 0x7dc3, 0x7dc1,
++      0x7dc1, 0x080c, 0x1519, 0x00ce, 0x00ee, 0x0005, 0x7024, 0xa065,
++      0x0148, 0x7020, 0x8001, 0x7022, 0x600c, 0xa015, 0x0150, 0x7216,
++      0x600f, 0x0000, 0x7007, 0x0000, 0x7027, 0x0000, 0x00ce, 0x00ee,
++      0x0005, 0x7216, 0x7212, 0x0cb0, 0x6018, 0x2060, 0x080c, 0x5268,
++      0x6000, 0xc0dc, 0x6002, 0x7020, 0x8001, 0x7022, 0x0120, 0x6054,
++      0xa015, 0x0140, 0x721e, 0x7007, 0x0000, 0x7027, 0x0000, 0x00ce,
++      0x00ee, 0x0005, 0x7218, 0x721e, 0x0cb0, 0x7024, 0xa065, 0x05b8,
++      0x700c, 0xac06, 0x1160, 0x080c, 0x8fb7, 0x600c, 0xa015, 0x0120,
++      0x720e, 0x600f, 0x0000, 0x0448, 0x720e, 0x720a, 0x0430, 0x7014,
++      0xac06, 0x1160, 0x080c, 0x8fb7, 0x600c, 0xa015, 0x0120, 0x7216,
++      0x600f, 0x0000, 0x00d0, 0x7216, 0x7212, 0x00b8, 0x601c, 0xa086,
++      0x0003, 0x1198, 0x6018, 0x2060, 0x080c, 0x5268, 0x6000, 0xc0dc,
++      0x6002, 0x080c, 0x8fb7, 0x701c, 0xa065, 0x0138, 0x6054, 0xa015,
++      0x0110, 0x721e, 0x0010, 0x7218, 0x721e, 0x7027, 0x0000, 0x00ce,
++      0x00ee, 0x0005, 0x7024, 0xa065, 0x0140, 0x080c, 0x8fb7, 0x600c,
++      0xa015, 0x0150, 0x720e, 0x600f, 0x0000, 0x080c, 0x90e6, 0x7027,
++      0x0000, 0x00ce, 0x00ee, 0x0005, 0x720e, 0x720a, 0x0cb0, 0x00d6,
++      0x2069, 0xc927, 0x6830, 0xa084, 0x0003, 0x0002, 0x7e54, 0x7e56,
++      0x7e7a, 0x7e52, 0x080c, 0x1519, 0x00de, 0x0005, 0x00c6, 0x6840,
++      0xa086, 0x0001, 0x01b8, 0x683c, 0xa065, 0x0130, 0x600c, 0xa015,
++      0x0170, 0x6a3a, 0x600f, 0x0000, 0x6833, 0x0000, 0x683f, 0x0000,
++      0x2011, 0xc946, 0x2013, 0x0000, 0x00ce, 0x00de, 0x0005, 0x683a,
++      0x6836, 0x0c90, 0x6843, 0x0000, 0x6838, 0xa065, 0x0d68, 0x6003,
++      0x0003, 0x0c50, 0x00c6, 0x6843, 0x0000, 0x6847, 0x0000, 0x684b,
++      0x0000, 0x683c, 0xa065, 0x0168, 0x600c, 0xa015, 0x0130, 0x6a3a,
++      0x600f, 0x0000, 0x683f, 0x0000, 0x0020, 0x683f, 0x0000, 0x683a,
++      0x6836, 0x00ce, 0x00de, 0x0005, 0x00d6, 0x2069, 0xc927, 0x6804,
++      0xa084, 0x0007, 0x0006, 0xa005, 0x11c8, 0x2001, 0xc635, 0x2004,
++      0xa084, 0x0028, 0x1198, 0x2001, 0xc8e5, 0x2004, 0xa086, 0xaaaa,
++      0x0168, 0x2001, 0xc696, 0x2004, 0xd08c, 0x1118, 0xd084, 0x1118,
++      0x0028, 0x080c, 0x7f6e, 0x000e, 0x00de, 0x0005, 0x000e, 0x0002,
++      0x7ec2, 0x7f5e, 0x7f5e, 0x7f5e, 0x7f5e, 0x7f60, 0x7ec0, 0x7ec0,
++      0x080c, 0x1519, 0x6820, 0xa005, 0x1110, 0x00de, 0x0005, 0x00c6,
++      0x680c, 0xa065, 0x0150, 0x6807, 0x0004, 0x6826, 0x682b, 0x0000,
++      0x080c, 0x7ff0, 0x00ce, 0x00de, 0x0005, 0x6814, 0xa065, 0x0150,
++      0x6807, 0x0001, 0x6826, 0x682b, 0x0000, 0x080c, 0x7ff0, 0x00ce,
++      0x00de, 0x0005, 0x00e6, 0x0036, 0x6a1c, 0xa2f5, 0x0000, 0x0904,
++      0x7f5a, 0x704c, 0xa00d, 0x0118, 0x7088, 0xa005, 0x01a0, 0x7054,
++      0xa075, 0x0120, 0xa20e, 0x0904, 0x7f5a, 0x0028, 0x6818, 0xa20e,
++      0x0904, 0x7f5a, 0x2070, 0x704c, 0xa00d, 0x0d88, 0x7088, 0xa005,
++      0x1d70, 0x2e00, 0x681e, 0x733c, 0x7038, 0xa302, 0x1e40, 0x080c,
++      0x95ba, 0x0904, 0x7f5a, 0x8318, 0x733e, 0x6112, 0x2e10, 0x621a,
++      0xa180, 0x0014, 0x2004, 0xa084, 0x00ff, 0x605a, 0xa180, 0x0014,
++      0x2003, 0x0000, 0xa180, 0x0015, 0x2004, 0xa08a, 0x199a, 0x0210,
++      0x2001, 0x1999, 0x8003, 0x801b, 0x831b, 0xa318, 0x6316, 0x003e,
++      0x00f6, 0x2c78, 0x71a0, 0x2001, 0xc635, 0x2004, 0xd0ac, 0x1110,
++      0xd1bc, 0x0150, 0x7100, 0xd1f4, 0x0120, 0x7114, 0xa18c, 0x00ff,
++      0x0040, 0x2009, 0x0000, 0x0028, 0xa1e0, 0x2f6e, 0x2c0d, 0xa18c,
++      0x00ff, 0x2061, 0x0100, 0x619a, 0x080c, 0x8620, 0x7300, 0xc3dd,
++      0x7302, 0x6807, 0x0002, 0x2f18, 0x6b26, 0x682b, 0x0000, 0x781f,
++      0x0003, 0x7803, 0x0001, 0x7807, 0x0040, 0x00fe, 0x00ee, 0x00ce,
++      0x00de, 0x0005, 0x003e, 0x00ee, 0x00ce, 0x0cd0, 0x00de, 0x0005,
++      0x00c6, 0x680c, 0xa065, 0x0138, 0x6807, 0x0004, 0x6826, 0x682b,
++      0x0000, 0x080c, 0x7ff0, 0x00ce, 0x00de, 0x0005, 0x00f6, 0x00d6,
++      0x2069, 0xc927, 0x6830, 0xa086, 0x0000, 0x1904, 0x7fcb, 0x2001,
++      0xc60c, 0x200c, 0xd1bc, 0x1904, 0x7fe6, 0x6838, 0xa07d, 0x0904,
++      0x7fcb, 0x2001, 0xc635, 0x2004, 0xa084, 0x0028, 0x11f8, 0x2001,
++      0xc8e5, 0x2004, 0xa086, 0xaaaa, 0x01c8, 0x781c, 0xa086, 0x0009,
++      0x11a8, 0x7808, 0xd0fc, 0x0190, 0x2001, 0xc928, 0x2004, 0xa005,
++      0x1138, 0x2001, 0xc696, 0x200c, 0xc185, 0xc18c, 0x2102, 0x0030,
++      0x2011, 0xc696, 0x2204, 0xc08d, 0x2012, 0x0428, 0x2f00, 0x6833,
++      0x0001, 0x683e, 0x6847, 0x0000, 0x684b, 0x0000, 0x0126, 0x00f6,
++      0x2091, 0x2400, 0x002e, 0x080c, 0x20ef, 0x11c0, 0x012e, 0xe000,
++      0xe000, 0xe000, 0x6a3c, 0x2278, 0x781c, 0xa086, 0x0009, 0x1148,
++      0x7808, 0xd0fc, 0x0118, 0x080c, 0x8969, 0x0028, 0x080c, 0x89e2,
++      0x0010, 0x080c, 0x8a66, 0x00de, 0x00fe, 0x0005, 0x012e, 0xe000,
++      0x6843, 0x0000, 0x781c, 0xa086, 0x0009, 0x0110, 0x7803, 0x0002,
++      0x780c, 0xa015, 0x0140, 0x6a3a, 0x780f, 0x0000, 0x6833, 0x0000,
++      0x683f, 0x0000, 0x0c40, 0x683a, 0x6836, 0x0cc0, 0xc1bc, 0x2102,
++      0x0066, 0x2031, 0x0001, 0x080c, 0x5fa4, 0x006e, 0x0804, 0x7f7d,
++      0x601c, 0xa084, 0x000f, 0x000b, 0x0005, 0x7ffe, 0x8003, 0x84c1,
++      0x85dd, 0x8003, 0x84c1, 0x85dd, 0x7ffe, 0x8003, 0x080c, 0x7db1,
++      0x080c, 0x7e94, 0x0005, 0x0156, 0x0136, 0x0146, 0x00c6, 0x00f6,
++      0x6004, 0xa08a, 0x0080, 0x1a0c, 0x1519, 0x6118, 0x2178, 0x79a0,
++      0x2011, 0xc635, 0x2214, 0xd2ac, 0x1110, 0xd1bc, 0x0150, 0x7900,
++      0xd1f4, 0x0120, 0x7914, 0xa18c, 0x00ff, 0x0040, 0x2009, 0x0000,
++      0x0028, 0xa1f8, 0x2f6e, 0x2f0d, 0xa18c, 0x00ff, 0x2c78, 0x2061,
++      0x0100, 0x619a, 0xa08a, 0x0040, 0x1a04, 0x8077, 0x0033, 0x00fe,
++      0x00ce, 0x014e, 0x013e, 0x015e, 0x0005, 0x8126, 0x8171, 0x819e,
++      0x826b, 0x8299, 0x82a1, 0x82c7, 0x82d8, 0x82e9, 0x82f1, 0x8307,
++      0x82f1, 0x8368, 0x82d8, 0x8389, 0x8391, 0x82e9, 0x8391, 0x83a2,
++      0x8075, 0x8075, 0x8075, 0x8075, 0x8075, 0x8075, 0x8075, 0x8075,
++      0x8075, 0x8075, 0x8075, 0x8d1a, 0x8d3f, 0x8d54, 0x8d77, 0x8d98,
++      0x82c7, 0x8075, 0x82c7, 0x82f1, 0x8075, 0x819e, 0x826b, 0x8075,
++      0x91e8, 0x82f1, 0x8075, 0x9208, 0x82f1, 0x8075, 0x82e9, 0x811f,
++      0x808a, 0x8075, 0x922d, 0x92a2, 0x9379, 0x8075, 0x938a, 0x82c2,
++      0x93a6, 0x8075, 0x8dad, 0x9401, 0x8075, 0x080c, 0x1519, 0x2100,
++      0x0033, 0x00fe, 0x00ce, 0x014e, 0x013e, 0x015e, 0x0005, 0x9458,
++      0x9507, 0x8088, 0x80be, 0x80dc, 0x80f2, 0x8088, 0x82c7, 0x8088,
++      0x080c, 0x1519, 0x00d6, 0x20a1, 0x020b, 0x080c, 0x83bf, 0x7810,
++      0x2068, 0x20a3, 0x2414, 0x20a3, 0x0018, 0x20a3, 0x0800, 0x683c,
++      0x20a2, 0x20a3, 0x0000, 0x20a3, 0x0000, 0x20a3, 0x0000, 0x20a3,
++      0x0000, 0x6850, 0x20a2, 0x6854, 0x20a2, 0x20a3, 0x0000, 0x20a3,
++      0x0000, 0x60c3, 0x0018, 0x080c, 0x8be2, 0x00de, 0x0005, 0x00d6,
++      0x7818, 0x2068, 0x68a0, 0x2069, 0xc600, 0x6ad4, 0xd2ac, 0x1110,
++      0xd0bc, 0x0110, 0xa085, 0x0001, 0x00de, 0x0005, 0x00d6, 0x20a1,
++      0x020b, 0x080c, 0x83bf, 0x20a3, 0x0500, 0x20a3, 0x0000, 0x7810,
++      0xa0e8, 0x000f, 0x6808, 0x20a2, 0x680c, 0x20a2, 0x6810, 0x20a2,
++      0x6814, 0x20a2, 0x6818, 0x20a2, 0x681c, 0x20a2, 0x60c3, 0x0010,
++      0x080c, 0x8be2, 0x00de, 0x0005, 0x0156, 0x0146, 0x20a1, 0x020b,
++      0x080c, 0x83bf, 0x20a3, 0x7800, 0x20a3, 0x0000, 0x7808, 0x8007,
++      0x20a2, 0x20a3, 0x0000, 0x60c3, 0x0008, 0x080c, 0x8be2, 0x014e,
++      0x015e, 0x0005, 0x0156, 0x0146, 0x20a1, 0x020b, 0x080c, 0x845b,
++      0x20a3, 0x0200, 0x20a3, 0x0000, 0x20a3, 0xdf10, 0x20a3, 0x0034,
++      0x2099, 0xc605, 0x20a9, 0x0004, 0x53a6, 0x2099, 0xc601, 0x20a9,
++      0x0004, 0x53a6, 0x2099, 0xc90d, 0x20a9, 0x001a, 0x3304, 0x8007,
++      0x20a2, 0x9398, 0x1f04, 0x810e, 0x20a3, 0x0000, 0x20a3, 0x0000,
++      0x60c3, 0x004c, 0x080c, 0x8be2, 0x014e, 0x015e, 0x0005, 0x2001,
++      0xc615, 0x2004, 0x609a, 0x080c, 0x8be2, 0x0005, 0x20a1, 0x020b,
++      0x080c, 0x83bf, 0x20a3, 0x5200, 0x20a3, 0x0000, 0x00d6, 0x2069,
++      0xc652, 0x6804, 0xd084, 0x0150, 0x6828, 0x20a3, 0x0000, 0x0016,
++      0x080c, 0x29db, 0x21a2, 0x001e, 0x00de, 0x0028, 0x00de, 0x20a3,
++      0x0000, 0x20a3, 0x0000, 0x20a9, 0x0004, 0x2099, 0xc605, 0x53a6,
++      0x20a9, 0x0004, 0x2099, 0xc601, 0x53a6, 0x2001, 0xc635, 0x2004,
++      0xd0ac, 0x1138, 0x7818, 0xa080, 0x0028, 0x2004, 0xa082, 0x007f,
++      0x0238, 0x2001, 0xc61c, 0x20a6, 0x2001, 0xc61d, 0x20a6, 0x0040,
++      0x20a3, 0x0000, 0x2001, 0xc615, 0x2004, 0xa084, 0x00ff, 0x20a2,
++      0x20a3, 0x0000, 0x20a3, 0x0000, 0x60c3, 0x001c, 0x080c, 0x8be2,
++      0x0005, 0x20a1, 0x020b, 0x080c, 0x83bf, 0x20a3, 0x0500, 0x20a3,
++      0x0000, 0x2001, 0xc635, 0x2004, 0xd0ac, 0x1138, 0x7818, 0xa080,
++      0x0028, 0x2004, 0xa082, 0x007f, 0x0238, 0x2001, 0xc61c, 0x20a6,
++      0x2001, 0xc61d, 0x20a6, 0x0040, 0x20a3, 0x0000, 0x2001, 0xc615,
++      0x2004, 0xa084, 0x00ff, 0x20a2, 0x20a9, 0x0004, 0x2099, 0xc605,
++      0x53a6, 0x60c3, 0x0010, 0x080c, 0x8be2, 0x0005, 0x20a1, 0x020b,
++      0x080c, 0x83bf, 0x00c6, 0x7818, 0x2060, 0x2001, 0x0000, 0x080c,
++      0x5715, 0x00ce, 0x7818, 0xa080, 0x0028, 0x2004, 0xa086, 0x007e,
++      0x1130, 0x20a3, 0x0400, 0x620c, 0xc2b4, 0x620e, 0x0010, 0x20a3,
++      0x0300, 0x20a3, 0x0000, 0x7818, 0xa080, 0x0028, 0x2004, 0xa086,
++      0x007e, 0x1904, 0x822d, 0x2001, 0xc635, 0x2004, 0xd0a4, 0x01c8,
++      0x2099, 0xc8d5, 0x33a6, 0x9398, 0x20a3, 0x0000, 0x9398, 0x3304,
++      0xa084, 0x2000, 0x20a2, 0x9398, 0x33a6, 0x9398, 0x20a3, 0x0000,
++      0x9398, 0x2001, 0x2710, 0x20a2, 0x9398, 0x33a6, 0x9398, 0x33a6,
++      0x00d0, 0x2099, 0xc8d5, 0x33a6, 0x9398, 0x33a6, 0x9398, 0x3304,
++      0x080c, 0x5f22, 0x1118, 0xa084, 0x37ff, 0x0010, 0xa084, 0x3fff,
++      0x20a2, 0x9398, 0x33a6, 0x20a3, 0x0000, 0x20a3, 0x0000, 0x20a3,
++      0x0000, 0x20a3, 0x0000, 0x20a9, 0x0004, 0x2099, 0xc605, 0x53a6,
++      0x20a9, 0x0004, 0x2099, 0xc601, 0x53a6, 0x20a9, 0x0008, 0x20a3,
++      0x0000, 0x1f04, 0x8207, 0x20a9, 0x0008, 0x20a3, 0x0000, 0x1f04,
++      0x820d, 0x2099, 0xc8dd, 0x3304, 0xc0dd, 0x20a2, 0x2001, 0xc672,
++      0x2004, 0xd0e4, 0x0158, 0x20a3, 0x0000, 0x20a3, 0x0000, 0x9398,
++      0x9398, 0x9398, 0x33a6, 0x20a9, 0x0004, 0x0010, 0x20a9, 0x0007,
++      0x20a3, 0x0000, 0x1f04, 0x8228, 0x0468, 0x2001, 0xc635, 0x2004,
++      0xd0a4, 0x0140, 0x2001, 0xc8d6, 0x2004, 0x60e3, 0x0000, 0x080c,
++      0x2a1c, 0x60e2, 0x2099, 0xc8d5, 0x20a9, 0x0008, 0x53a6, 0x20a9,
++      0x0004, 0x2099, 0xc605, 0x53a6, 0x20a9, 0x0004, 0x2099, 0xc601,
++      0x53a6, 0x20a9, 0x0008, 0x20a3, 0x0000, 0x1f04, 0x824b, 0x20a9,
++      0x0008, 0x20a3, 0x0000, 0x1f04, 0x8251, 0x2099, 0xc8dd, 0x20a9,
++      0x0008, 0x53a6, 0x20a9, 0x0008, 0x20a3, 0x0000, 0x1f04, 0x825c,
++      0x20a9, 0x000a, 0x20a3, 0x0000, 0x1f04, 0x8262, 0x60c3, 0x0074,
++      0x080c, 0x8be2, 0x0005, 0x20a1, 0x020b, 0x080c, 0x83bf, 0x20a3,
++      0x2010, 0x20a3, 0x0014, 0x20a3, 0x0800, 0x20a3, 0x2000, 0xa006,
++      0x20a2, 0x20a2, 0x20a2, 0x20a2, 0x20a2, 0x00f6, 0x2079, 0xc652,
++      0x7904, 0x00fe, 0xd1ac, 0x1110, 0xa085, 0x0020, 0xd1a4, 0x0110,
++      0xa085, 0x0010, 0xa085, 0x0002, 0x00d6, 0x0804, 0x834a, 0x20a2,
++      0x20a3, 0x0000, 0x20a3, 0x0000, 0x60c3, 0x0014, 0x080c, 0x8be2,
++      0x0005, 0x20a1, 0x020b, 0x080c, 0x83bf, 0x20a3, 0x5000, 0x0804,
++      0x81b9, 0x20a1, 0x020b, 0x080c, 0x83bf, 0x20a3, 0x2110, 0x20a3,
++      0x0014, 0x20a3, 0x0000, 0x20a3, 0x0000, 0x20a3, 0x0000, 0x20a3,
++      0x0000, 0x20a3, 0x0000, 0x20a3, 0x0000, 0x20a3, 0x0000, 0x20a3,
++      0x0000, 0x20a3, 0x0000, 0x20a3, 0x0000, 0x60c3, 0x0014, 0x080c,
++      0x8be2, 0x0005, 0x20a1, 0x020b, 0x080c, 0x8453, 0x0020, 0x20a1,
++      0x020b, 0x080c, 0x845b, 0x20a3, 0x0200, 0x20a3, 0x0000, 0x20a3,
++      0x0000, 0x20a3, 0x0000, 0x60c3, 0x0004, 0x080c, 0x8be2, 0x0005,
++      0x20a1, 0x020b, 0x080c, 0x845b, 0x20a3, 0x0100, 0x20a3, 0x0000,
++      0x20a3, 0x0003, 0x20a3, 0x2a00, 0x60c3, 0x0008, 0x080c, 0x8be2,
++      0x0005, 0x20a1, 0x020b, 0x080c, 0x845b, 0x20a3, 0x0200, 0x0804,
++      0x81b9, 0x20a1, 0x020b, 0x080c, 0x845b, 0x20a3, 0x0100, 0x20a3,
++      0x0000, 0x7828, 0xa005, 0x0110, 0x20a2, 0x0010, 0x20a3, 0x0003,
++      0x7810, 0x20a2, 0x60c3, 0x0008, 0x080c, 0x8be2, 0x0005, 0x00d6,
++      0x20a1, 0x020b, 0x080c, 0x845b, 0x20a3, 0x0210, 0x20a3, 0x0014,
++      0x20a3, 0x0800, 0x7818, 0x2068, 0x6894, 0xa086, 0x0014, 0x1198,
++      0x699c, 0xa184, 0x0030, 0x0190, 0x6998, 0xa184, 0xc000, 0x1140,
++      0xd1ec, 0x0118, 0x20a3, 0x2100, 0x0058, 0x20a3, 0x0100, 0x0040,
++      0x20a3, 0x0400, 0x0028, 0x20a3, 0x0700, 0x0010, 0x700f, 0x0800,
++      0xa006, 0x20a2, 0x20a2, 0x20a2, 0x20a2, 0x20a2, 0x00f6, 0x2079,
++      0xc652, 0x7904, 0x00fe, 0xd1ac, 0x1110, 0xa085, 0x0020, 0xd1a4,
++      0x0110, 0xa085, 0x0010, 0x2009, 0xc674, 0x210c, 0xd184, 0x1110,
++      0xa085, 0x0002, 0x0026, 0x2009, 0xc672, 0x210c, 0xd1e4, 0x0130,
++      0xc0c5, 0xa094, 0x0030, 0xa296, 0x0010, 0x0140, 0xd1ec, 0x0130,
++      0xa094, 0x0030, 0xa296, 0x0010, 0x0108, 0xc0bd, 0x002e, 0x20a2,
++      0x20a2, 0x20a2, 0x60c3, 0x0014, 0x080c, 0x8be2, 0x00de, 0x0005,
++      0x20a1, 0x020b, 0x080c, 0x845b, 0x20a3, 0x0210, 0x20a3, 0x0014,
++      0x20a3, 0x0000, 0x20a3, 0x0100, 0x20a3, 0x0000, 0x20a3, 0x0000,
++      0x20a3, 0x0000, 0x20a3, 0x0000, 0x20a3, 0x0000, 0x20a3, 0x0000,
++      0x20a3, 0x0000, 0x20a3, 0x0000, 0x60c3, 0x0014, 0x080c, 0x8be2,
++      0x0005, 0x20a1, 0x020b, 0x080c, 0x845b, 0x20a3, 0x0200, 0x0804,
++      0x812c, 0x20a1, 0x020b, 0x080c, 0x845b, 0x20a3, 0x0100, 0x20a3,
++      0x0000, 0x20a3, 0x0003, 0x20a3, 0x2a00, 0x60c3, 0x0008, 0x080c,
++      0x8be2, 0x0005, 0x20e1, 0x9080, 0x20e1, 0x4000, 0x20a1, 0x020b,
++      0x080c, 0x845b, 0x20a3, 0x0100, 0x20a3, 0x0000, 0x20a3, 0x000b,
++      0x20a3, 0x0000, 0x60c3, 0x0008, 0x080c, 0x8be2, 0x0005, 0x0026,
++      0x0036, 0x0046, 0x2019, 0x3200, 0x2021, 0x0800, 0x0038, 0x0026,
++      0x0036, 0x0046, 0x2019, 0x2200, 0x2021, 0x0100, 0x20e1, 0x9080,
++      0x20e1, 0x4000, 0x7818, 0xa080, 0x0028, 0x2014, 0xa286, 0x007e,
++      0x11a0, 0xa385, 0x00ff, 0x20a2, 0x20a3, 0xfffe, 0x20a3, 0x0000,
++      0x2011, 0xc615, 0x2214, 0x2001, 0xc8e5, 0x2004, 0xa005, 0x0118,
++      0x2011, 0xc61d, 0x2214, 0x22a2, 0x04d0, 0xa286, 0x007f, 0x1138,
++      0x00d6, 0xa385, 0x00ff, 0x20a2, 0x20a3, 0xfffd, 0x00c8, 0x2001,
++      0xc635, 0x2004, 0xd0ac, 0x1110, 0xd2bc, 0x01c8, 0xa286, 0x0080,
++      0x00d6, 0x1130, 0xa385, 0x00ff, 0x20a2, 0x20a3, 0xfffc, 0x0040,
++      0xa2e8, 0xc77b, 0x2d6c, 0x6810, 0xa305, 0x20a2, 0x6814, 0x20a2,
++      0x2069, 0xc61c, 0x2da6, 0x8d68, 0x2da6, 0x00de, 0x0080, 0x00d6,
++      0xa2e8, 0xc77b, 0x2d6c, 0x6810, 0xa305, 0x20a2, 0x6814, 0x20a2,
++      0x00de, 0x20a3, 0x0000, 0x2011, 0xc615, 0x2214, 0x22a2, 0xa485,
++      0x0029, 0x20a2, 0x004e, 0x003e, 0x20a3, 0x0000, 0x080c, 0x8bd1,
++      0x22a2, 0x20a3, 0x0000, 0x2fa2, 0x20a3, 0xffff, 0x20a3, 0x0000,
++      0x20a3, 0x0000, 0x002e, 0x0005, 0x0026, 0x20e1, 0x9080, 0x20e1,
++      0x4000, 0x20a3, 0x02ff, 0x2011, 0xfffc, 0x22a2, 0x00d6, 0x2069,
++      0xc61c, 0x2da6, 0x8d68, 0x2da6, 0x00de, 0x20a3, 0x2029, 0x20a3,
++      0x0000, 0x08e0, 0x20a3, 0x0100, 0x20a3, 0x0000, 0x20a3, 0xfc02,
++      0x20a3, 0x0000, 0x0005, 0x0026, 0x0036, 0x0046, 0x2019, 0x3300,
++      0x2021, 0x0800, 0x0038, 0x0026, 0x0036, 0x0046, 0x2019, 0x2300,
++      0x2021, 0x0100, 0x20e1, 0x9080, 0x20e1, 0x4000, 0x7818, 0xa080,
++      0x0028, 0x2004, 0x2011, 0xc635, 0x2214, 0xd2ac, 0x1118, 0xa092,
++      0x007e, 0x02d8, 0x00d6, 0xa0e8, 0xc77b, 0x2d6c, 0x6810, 0xa305,
++      0x20a2, 0x6814, 0x20a2, 0x6810, 0xa005, 0x1140, 0x6814, 0xa005,
++      0x1128, 0x20a3, 0x00ff, 0x20a3, 0xfffe, 0x0028, 0x2069, 0xc61c,
++      0x2da6, 0x8d68, 0x2da6, 0x00de, 0x0080, 0x00d6, 0xa0e8, 0xc77b,
++      0x2d6c, 0x6810, 0xa305, 0x20a2, 0x6814, 0x20a2, 0x00de, 0x20a3,
++      0x0000, 0x2011, 0xc615, 0x2214, 0x22a2, 0xa485, 0x0098, 0x20a2,
++      0x20a3, 0x0000, 0x004e, 0x003e, 0x080c, 0x8bd1, 0x22a2, 0x20a3,
++      0x0000, 0x7a08, 0x22a2, 0x2fa2, 0x20a3, 0x0000, 0x20a3, 0x0000,
++      0x002e, 0x0005, 0x080c, 0x8bd1, 0x22a2, 0x20a3, 0x0000, 0x7a08,
++      0x22a2, 0x7810, 0x20a2, 0x20a3, 0x0000, 0x20a3, 0x0000, 0x002e,
++      0x0005, 0x00c6, 0x00f6, 0x6004, 0xa08a, 0x0085, 0x0a0c, 0x1519,
++      0xa08a, 0x008c, 0x1a0c, 0x1519, 0x6118, 0x2178, 0x79a0, 0x2011,
++      0xc635, 0x2214, 0xd2ac, 0x1110, 0xd1bc, 0x0150, 0x7900, 0xd1f4,
++      0x0120, 0x7914, 0xa18c, 0x00ff, 0x0040, 0x2009, 0x0000, 0x0028,
++      0xa1f8, 0x2f6e, 0x2f0d, 0xa18c, 0x00ff, 0x2c78, 0x2061, 0x0100,
++      0x619a, 0xa082, 0x0085, 0x001b, 0x00fe, 0x00ce, 0x0005, 0x84f8,
++      0x8502, 0x851d, 0x84f6, 0x84f6, 0x84f6, 0x84f8, 0x080c, 0x1519,
++      0x0146, 0x20a1, 0x020b, 0x04a1, 0x60c3, 0x0000, 0x080c, 0x8be2,
++      0x014e, 0x0005, 0x0146, 0x20a1, 0x020b, 0x080c, 0x8569, 0x20a3,
++      0x0000, 0x20a3, 0x0000, 0x7808, 0x20a2, 0x7810, 0x20a2, 0x20a3,
++      0x0000, 0x20a3, 0xffff, 0x20a3, 0x0000, 0x20a3, 0x0000, 0x60c3,
++      0x000c, 0x080c, 0x8be2, 0x014e, 0x0005, 0x0146, 0x20a1, 0x020b,
++      0x080c, 0x85a3, 0x20a3, 0x0003, 0x20a3, 0x0300, 0x20a3, 0x0000,
++      0x20a3, 0x0000, 0x60c3, 0x0004, 0x080c, 0x8be2, 0x014e, 0x0005,
++      0x0026, 0x20e1, 0x9080, 0x20e1, 0x4000, 0x7818, 0xa080, 0x0028,
++      0x2004, 0x2011, 0xc635, 0x2214, 0xd2ac, 0x1118, 0xa092, 0x007e,
++      0x0288, 0x00d6, 0xa0e8, 0xc77b, 0x2d6c, 0x6810, 0xa085, 0x8100,
++      0x20a2, 0x6814, 0x20a2, 0x2069, 0xc61c, 0x2da6, 0x8d68, 0x2da6,
++      0x00de, 0x0088, 0x00d6, 0xa0e8, 0xc77b, 0x2d6c, 0x6810, 0xa085,
++      0x8100, 0x20a2, 0x6814, 0x20a2, 0x00de, 0x20a3, 0x0000, 0x2011,
++      0xc615, 0x2214, 0x22a2, 0x20a3, 0x0009, 0x20a3, 0x0000, 0x0804,
++      0x8426, 0x0026, 0x20e1, 0x9080, 0x20e1, 0x4000, 0x7818, 0xa080,
++      0x0028, 0x2004, 0x2011, 0xc635, 0x2214, 0xd2ac, 0x1118, 0xa092,
++      0x007e, 0x0288, 0x00d6, 0xa0e8, 0xc77b, 0x2d6c, 0x6810, 0xa085,
++      0x8400, 0x20a2, 0x6814, 0x20a2, 0x2069, 0xc61c, 0x2da6, 0x8d68,
++      0x2da6, 0x00de, 0x0088, 0x00d6, 0xa0e8, 0xc77b, 0x2d6c, 0x6810,
++      0xa085, 0x8400, 0x20a2, 0x6814, 0x20a2, 0x00de, 0x20a3, 0x0000,
++      0x2011, 0xc615, 0x2214, 0x22a2, 0x2001, 0x0099, 0x20a2, 0x20a3,
++      0x0000, 0x0804, 0x84b2, 0x0026, 0x20e1, 0x9080, 0x20e1, 0x4000,
++      0x7818, 0xa080, 0x0028, 0x2004, 0x2011, 0xc635, 0x2214, 0xd2ac,
++      0x1118, 0xa092, 0x007e, 0x0288, 0x00d6, 0xa0e8, 0xc77b, 0x2d6c,
++      0x6810, 0xa085, 0x8500, 0x20a2, 0x6814, 0x20a2, 0x2069, 0xc61c,
++      0x2da6, 0x8d68, 0x2da6, 0x00de, 0x0088, 0x00d6, 0xa0e8, 0xc77b,
++      0x2d6c, 0x6810, 0xa085, 0x8500, 0x20a2, 0x6814, 0x20a2, 0x00de,
++      0x20a3, 0x0000, 0x2011, 0xc615, 0x2214, 0x22a2, 0x2001, 0x0099,
++      0x20a2, 0x20a3, 0x0000, 0x0804, 0x84b2, 0x00c6, 0x00f6, 0x2c78,
++      0x7804, 0xa08a, 0x0040, 0x0a0c, 0x1519, 0xa08a, 0x0053, 0x1a0c,
++      0x1519, 0x7918, 0x2160, 0x61a0, 0x2011, 0xc635, 0x2214, 0xd2ac,
++      0x1110, 0xd1bc, 0x0150, 0x6100, 0xd1f4, 0x0120, 0x6114, 0xa18c,
++      0x00ff, 0x0040, 0x2009, 0x0000, 0x0028, 0xa1e0, 0x2f6e, 0x2c0d,
++      0xa18c, 0x00ff, 0x2061, 0x0100, 0x619a, 0xa082, 0x0040, 0x001b,
++      0x00fe, 0x00ce, 0x0005, 0x8620, 0x872c, 0x86c9, 0x88de, 0x861e,
++      0x861e, 0x861e, 0x861e, 0x861e, 0x861e, 0x861e, 0x8f70, 0x8f80,
++      0x8f90, 0x8fa0, 0x861e, 0x93b7, 0x861e, 0x8f5f, 0x080c, 0x1519,
++      0x00d6, 0x0156, 0x0146, 0x780b, 0xffff, 0x20a1, 0x020b, 0x080c,
++      0x8680, 0x7910, 0x2168, 0x6948, 0x7952, 0x21a2, 0xa016, 0x22a2,
++      0x22a2, 0x22a2, 0x694c, 0xa184, 0x000f, 0x1118, 0x2001, 0x0005,
++      0x0040, 0xd184, 0x0118, 0x2001, 0x0004, 0x0018, 0xa084, 0x0006,
++      0x8004, 0x0016, 0x2008, 0x7858, 0xa084, 0x00ff, 0x8007, 0xa105,
++      0x001e, 0x20a2, 0xd1ac, 0x0118, 0x20a3, 0x0002, 0x0048, 0xd1b4,
++      0x0118, 0x20a3, 0x0001, 0x0020, 0x20a3, 0x0000, 0x2230, 0x0010,
++      0x6a80, 0x6e7c, 0x20a9, 0x0008, 0x0136, 0xad88, 0x0017, 0x2198,
++      0x20a1, 0x021b, 0x53a6, 0x013e, 0x20a1, 0x020b, 0x22a2, 0x26a2,
++      0x60c3, 0x0020, 0x20e1, 0x9080, 0x6014, 0xa084, 0x0004, 0xa085,
++      0x0009, 0x6016, 0x2001, 0xc943, 0x2003, 0x07d0, 0x2001, 0xc942,
++      0x2003, 0x0009, 0x080c, 0x17f1, 0x014e, 0x015e, 0x00de, 0x0005,
++      0x20e1, 0x9080, 0x20e1, 0x4000, 0x7a18, 0xa280, 0x0023, 0x2014,
++      0x8210, 0xa294, 0x00ff, 0x2202, 0x8217, 0x7818, 0xa080, 0x0028,
++      0x2004, 0x2019, 0xc635, 0x231c, 0xd3ac, 0x1110, 0xd0bc, 0x0188,
++      0x00d6, 0xa0e8, 0xc77b, 0x2d6c, 0x6810, 0xa085, 0x0600, 0x20a2,
++      0x6814, 0x20a2, 0x2069, 0xc61c, 0x2da6, 0x8d68, 0x2da6, 0x00de,
++      0x0088, 0x00d6, 0xa0e8, 0xc77b, 0x2d6c, 0x6810, 0xa085, 0x0600,
++      0x20a2, 0x6814, 0x20a2, 0x00de, 0x20a3, 0x0000, 0x2009, 0xc615,
++      0x210c, 0x21a2, 0x20a3, 0x0829, 0x20a3, 0x0000, 0x22a2, 0x20a3,
++      0x0000, 0x2fa2, 0x20a3, 0xffff, 0x20a3, 0x0000, 0x20a3, 0x0000,
++      0x0005, 0x00d6, 0x0156, 0x0136, 0x0146, 0x20a1, 0x020b, 0x00c1,
++      0x7810, 0x2068, 0x6860, 0x20a2, 0x685c, 0x20a2, 0x6880, 0x20a2,
++      0x687c, 0x20a2, 0xa006, 0x20a2, 0x20a2, 0x20a2, 0x20a2, 0x60c3,
++      0x000c, 0x080c, 0x8be2, 0x014e, 0x013e, 0x015e, 0x00de, 0x0005,
++      0x0026, 0x20e1, 0x9080, 0x20e1, 0x4000, 0x7818, 0xa080, 0x0028,
++      0x2004, 0x2011, 0xc635, 0x2214, 0xd2ac, 0x1110, 0xd0bc, 0x0188,
++      0x00d6, 0xa0e8, 0xc77b, 0x2d6c, 0x6810, 0xa085, 0x0500, 0x20a2,
++      0x6814, 0x20a2, 0x2069, 0xc61c, 0x2da6, 0x8d68, 0x2da6, 0x00de,
++      0x0088, 0x00d6, 0xa0e8, 0xc77b, 0x2d6c, 0x6810, 0xa085, 0x0500,
++      0x20a2, 0x6814, 0x20a2, 0x00de, 0x20a3, 0x0000, 0x2011, 0xc615,
++      0x2214, 0x22a2, 0x20a3, 0x0889, 0x20a3, 0x0000, 0x080c, 0x8bd1,
++      0x22a2, 0x20a3, 0x0000, 0x7a08, 0x22a2, 0x2fa2, 0x20a3, 0x0000,
++      0x20a3, 0x0000, 0x002e, 0x0005, 0x00d6, 0x0156, 0x0136, 0x0146,
++      0x7810, 0xa0ec, 0xf000, 0x0168, 0xa06d, 0x080c, 0x56bf, 0x0148,
++      0x684c, 0xa084, 0x2020, 0xa086, 0x2020, 0x1118, 0x7820, 0xc0cd,
++      0x7822, 0x20a1, 0x020b, 0x080c, 0x8894, 0xa016, 0x22a2, 0x22a2,
++      0x22a2, 0x22a2, 0x22a2, 0x7810, 0xa084, 0xf000, 0x1130, 0x7810,
++      0xa084, 0x0700, 0x8007, 0x0043, 0x0010, 0xa006, 0x002b, 0x014e,
++      0x013e, 0x015e, 0x00de, 0x0005, 0x8766, 0x87fb, 0x880b, 0x883d,
++      0x8850, 0x886b, 0x8874, 0x8764, 0x080c, 0x1519, 0x0016, 0x0036,
++      0x694c, 0xa18c, 0x0003, 0x0118, 0xa186, 0x0003, 0x1170, 0x6b78,
++      0x7820, 0xd0cc, 0x0108, 0xc3e5, 0x23a2, 0x6868, 0x20a2, 0x6864,
++      0x20a2, 0x003e, 0x001e, 0x0804, 0x8847, 0xa186, 0x0001, 0x190c,
++      0x1519, 0x6b78, 0x7820, 0xd0cc, 0x0108, 0xc3e5, 0x23a2, 0x6868,
++      0x20a2, 0x6864, 0x20a2, 0x22a2, 0x6874, 0x20a2, 0x22a2, 0x687c,
++      0x20a2, 0x2009, 0x0018, 0xa384, 0x0300, 0x0904, 0x87f5, 0xd3c4,
++      0x0110, 0x687c, 0xa108, 0xd3cc, 0x0110, 0x6874, 0xa108, 0x0156,
++      0x20a9, 0x000d, 0xad80, 0x0020, 0x201c, 0x831f, 0x23a2, 0x8000,
++      0x1f04, 0x87a4, 0x015e, 0x22a2, 0x22a2, 0x22a2, 0xa184, 0x0003,
++      0x0904, 0x87f5, 0x20a1, 0x020b, 0x20e1, 0x9080, 0x20e1, 0x4000,
++      0x0006, 0x7818, 0xa080, 0x0028, 0x2004, 0x2011, 0xc635, 0x2214,
++      0xd2ac, 0x1110, 0xd0bc, 0x0188, 0x00d6, 0xa0e8, 0xc77b, 0x2d6c,
++      0x6810, 0xa085, 0x0700, 0x20a2, 0x6814, 0x20a2, 0x2069, 0xc61c,
++      0x2da6, 0x8d68, 0x2da6, 0x00de, 0x0088, 0x00d6, 0xa0e8, 0xc77b,
++      0x2d6c, 0x6810, 0xa085, 0x0700, 0x20a2, 0x6814, 0x20a2, 0x00de,
++      0x20a3, 0x0000, 0x2011, 0xc615, 0x2214, 0x22a2, 0x000e, 0x7b20,
++      0xd3cc, 0x0118, 0x20a3, 0x0889, 0x0010, 0x20a3, 0x0898, 0x20a2,
++      0x080c, 0x8bd1, 0x22a2, 0x20a3, 0x0000, 0x61c2, 0x003e, 0x001e,
++      0x080c, 0x8be2, 0x0005, 0x2011, 0x0008, 0x2001, 0xc60d, 0x2004,
++      0xd0f4, 0x0110, 0x2011, 0x0028, 0x7820, 0xd0cc, 0x0108, 0xc2e5,
++      0x22a2, 0xa016, 0x04d0, 0x2011, 0x0302, 0x0016, 0x0036, 0x7828,
++      0x792c, 0xa11d, 0x0108, 0xc2dd, 0x7b20, 0xd3cc, 0x0108, 0xc2e5,
++      0x22a2, 0x20a2, 0x21a2, 0x003e, 0x001e, 0xa016, 0x22a2, 0x20a3,
++      0x0012, 0x22a2, 0x20a3, 0x0008, 0x22a2, 0x22a2, 0x22a2, 0x22a2,
++      0x20a3, 0x7000, 0x20a3, 0x0500, 0x22a2, 0x20a3, 0x000a, 0x22a2,
++      0x22a2, 0x20a3, 0x2500, 0x22a2, 0x22a2, 0x22a2, 0x22a2, 0x22a2,
++      0x60c3, 0x0032, 0x080c, 0x8be2, 0x0005, 0x2011, 0x0028, 0x7820,
++      0xd0cc, 0x0108, 0xc2e5, 0x22a2, 0xa016, 0x22a2, 0x22a2, 0x22a2,
++      0x22a2, 0x22a2, 0x22a2, 0x60c3, 0x0018, 0x080c, 0x8be2, 0x0005,
++      0x2011, 0x0100, 0x7820, 0xd0cc, 0x0108, 0xc2e5, 0x22a2, 0xa016,
++      0x22a2, 0x22a2, 0x22a2, 0x22a2, 0x22a2, 0x20a3, 0x0008, 0x22a2,
++      0x7854, 0xa084, 0x00ff, 0x20a2, 0x22a2, 0x22a2, 0x60c3, 0x0020,
++      0x080c, 0x8be2, 0x0005, 0x2011, 0x0008, 0x7820, 0xd0cc, 0x0108,
++      0xc2e5, 0x22a2, 0xa016, 0x0888, 0x0036, 0x7b10, 0xa384, 0xff00,
++      0x7812, 0xa384, 0x00ff, 0x8001, 0x1138, 0x7820, 0xd0cc, 0x0108,
++      0xc2e5, 0x22a2, 0x003e, 0x0808, 0x0046, 0x2021, 0x0800, 0x0006,
++      0x7820, 0xd0cc, 0x000e, 0x0108, 0xc4e5, 0x24a2, 0x004e, 0x22a2,
++      0x20a2, 0x003e, 0x0804, 0x8847, 0x0026, 0x20e1, 0x9080, 0x20e1,
++      0x4000, 0x7818, 0xa080, 0x0028, 0x2004, 0x2011, 0xc635, 0x2214,
++      0xd2ac, 0x1110, 0xd0bc, 0x0188, 0x00d6, 0xa0e8, 0xc77b, 0x2d6c,
++      0x6810, 0xa085, 0x0700, 0x20a2, 0x6814, 0x20a2, 0x2069, 0xc61c,
++      0x2da6, 0x8d68, 0x2da6, 0x00de, 0x0088, 0x00d6, 0xa0e8, 0xc77b,
++      0x2d6c, 0x6810, 0xa085, 0x0700, 0x20a2, 0x6814, 0x20a2, 0x00de,
++      0x20a3, 0x0000, 0x2011, 0xc615, 0x2214, 0x22a2, 0x7820, 0xd0cc,
++      0x0118, 0x20a3, 0x0889, 0x0010, 0x20a3, 0x0898, 0x20a3, 0x0000,
++      0x080c, 0x8bd1, 0x22a2, 0x20a3, 0x0000, 0x7a08, 0x22a2, 0x2fa2,
++      0x20a3, 0x0000, 0x20a3, 0x0000, 0x002e, 0x0005, 0x00d6, 0x0156,
++      0x0136, 0x0146, 0x0016, 0x0036, 0x7810, 0xa084, 0x0700, 0x8007,
++      0x003b, 0x003e, 0x001e, 0x014e, 0x013e, 0x015e, 0x00de, 0x0005,
++      0x88f8, 0x88f8, 0x88fa, 0x88f8, 0x88f8, 0x88f8, 0x891c, 0x88f8,
++      0x080c, 0x1519, 0x7910, 0xa18c, 0xf8ff, 0xa18d, 0x0600, 0x7912,
++      0x20a1, 0x020b, 0x2009, 0x0003, 0x00f9, 0x00d6, 0x2069, 0xc652,
++      0x6804, 0xd0bc, 0x0130, 0x682c, 0xa084, 0x00ff, 0x8007, 0x20a2,
++      0x0010, 0x20a3, 0x3f00, 0x00de, 0x22a2, 0x22a2, 0x22a2, 0x60c3,
++      0x0001, 0x080c, 0x8be2, 0x0005, 0x20a1, 0x020b, 0x2009, 0x0003,
++      0x0019, 0x20a3, 0x7f00, 0x0c80, 0x0026, 0x20e1, 0x9080, 0x20e1,
++      0x4000, 0x7818, 0xa080, 0x0028, 0x2004, 0x2011, 0xc635, 0x2214,
++      0xd2ac, 0x1110, 0xd0bc, 0x0188, 0x00d6, 0xa0e8, 0xc77b, 0x2d6c,
++      0x6810, 0xa085, 0x0100, 0x20a2, 0x6814, 0x20a2, 0x2069, 0xc61c,
++      0x2da6, 0x8d68, 0x2da6, 0x00de, 0x0088, 0x00d6, 0xa0e8, 0xc77b,
++      0x2d6c, 0x6810, 0xa085, 0x0100, 0x20a2, 0x6814, 0x20a2, 0x00de,
++      0x20a3, 0x0000, 0x2011, 0xc615, 0x2214, 0x22a2, 0x20a3, 0x0888,
++      0xa18d, 0x0008, 0x21a2, 0x080c, 0x8bd1, 0x22a2, 0x20a3, 0x0000,
++      0x7a08, 0x22a2, 0x2fa2, 0x20a3, 0x0000, 0x20a3, 0x0000, 0x002e,
++      0x0005, 0x00e6, 0x00d6, 0x00c6, 0x0066, 0x0056, 0x0046, 0x0036,
++      0x2061, 0x0100, 0x2071, 0xc600, 0x2009, 0xc615, 0x210c, 0x7818,
++      0x2068, 0x2031, 0xc635, 0x2634, 0xa6b4, 0x0028, 0x0110, 0x7370,
++      0x7474, 0x2500, 0x2031, 0xc635, 0x2634, 0xa6b4, 0x0028, 0x0140,
++      0x2001, 0x04ff, 0x6062, 0x6067, 0xffff, 0x636a, 0x646e, 0x0050,
++      0x2001, 0x00ff, 0xa085, 0x0400, 0x6062, 0x6067, 0xffff, 0x606b,
++      0x0000, 0x616e, 0x68b8, 0x6073, 0x0530, 0x6077, 0x0008, 0x688c,
++      0x8000, 0xa084, 0x00ff, 0x688e, 0x8007, 0xa085, 0x0020, 0x607a,
++      0x68b4, 0x607f, 0x0000, 0x2d00, 0x6082, 0x6087, 0xffff, 0x7810,
++      0x2070, 0x7014, 0x608a, 0x7010, 0x608e, 0x700c, 0x60c6, 0x7008,
++      0x60ca, 0x686c, 0x60ce, 0x60ab, 0x0036, 0x60af, 0x95d5, 0x60d7,
++      0x0000, 0x2001, 0xc635, 0x2004, 0xa084, 0x0028, 0x0128, 0x609f,
++      0x0000, 0x2001, 0x0092, 0x0048, 0x6028, 0xc0bd, 0x602a, 0x609f,
++      0x00ff, 0x6027, 0xffff, 0x2001, 0x00b2, 0x6016, 0x2009, 0x07d0,
++      0x080c, 0x7029, 0x003e, 0x004e, 0x005e, 0x006e, 0x00ce, 0x00de,
++      0x00ee, 0x0005, 0x00e6, 0x00d6, 0x00c6, 0x0066, 0x0056, 0x0046,
++      0x0036, 0x2061, 0x0100, 0x2071, 0xc600, 0x2009, 0xc615, 0x210c,
++      0x7818, 0x2068, 0x68a0, 0x2028, 0x2031, 0xc635, 0x2634, 0xd6ac,
++      0x1160, 0xa582, 0x007e, 0x1248, 0x2500, 0xd0bc, 0x1130, 0xa080,
++      0x2f6e, 0x2015, 0xa294, 0x00ff, 0x0020, 0x6910, 0x6a14, 0x7370,
++      0x7474, 0x2001, 0xc635, 0x2004, 0xd0ac, 0x1128, 0xa582, 0x007e,
++      0x1210, 0xd5bc, 0x0138, 0xa185, 0x0400, 0x6062, 0x6266, 0x636a,
++      0x646e, 0x0030, 0x6063, 0x0400, 0x6266, 0x606b, 0x0000, 0x616e,
++      0x68b8, 0x6072, 0x6077, 0x0000, 0x6864, 0xd0a4, 0x0110, 0x6077,
++      0x0008, 0x688c, 0x8000, 0xa084, 0x00ff, 0x688e, 0x8007, 0xa085,
++      0x0020, 0x607a, 0x68b4, 0x607f, 0x0000, 0x2d00, 0x6082, 0x6087,
++      0xffff, 0x7810, 0x2070, 0x7014, 0x608a, 0x7010, 0x608e, 0x700c,
++      0x60c6, 0x7008, 0x60ca, 0x686c, 0x60ce, 0x60ab, 0x0036, 0x60af,
++      0x95d5, 0x60d7, 0x0000, 0xa582, 0x007e, 0x0210, 0x2011, 0x0000,
++      0x629e, 0x00f6, 0x2079, 0x0140, 0x7803, 0x0000, 0x00fe, 0x2009,
++      0x0092, 0x6116, 0x2009, 0x07d0, 0x080c, 0x7029, 0x003e, 0x004e,
++      0x005e, 0x006e, 0x00ce, 0x00de, 0x00ee, 0x0005, 0x00e6, 0x00d6,
++      0x00c6, 0x0056, 0x0046, 0x0036, 0x2061, 0x0100, 0x2071, 0xc600,
++      0x7154, 0x7818, 0x2068, 0x68a0, 0x2028, 0x76d4, 0xd6ac, 0x1130,
++      0xd0bc, 0x1120, 0x6910, 0x6a14, 0x7454, 0x0020, 0x6910, 0x6a14,
++      0x7370, 0x7474, 0x781c, 0xa0be, 0x0006, 0x0904, 0x8b1c, 0xa0be,
++      0x000a, 0x15e8, 0xa185, 0x0200, 0x6062, 0x6266, 0x636a, 0x646e,
++      0x6073, 0x2029, 0x6077, 0x0000, 0x688c, 0x8000, 0xa084, 0x00ff,
++      0x688e, 0x8007, 0x607a, 0x607f, 0x0000, 0x2f00, 0x6082, 0x7808,
++      0x6086, 0x7810, 0x2070, 0x7014, 0x608a, 0x7010, 0x608e, 0x700c,
++      0x60c6, 0x7008, 0x60ca, 0x686c, 0x60ce, 0x60af, 0x95d5, 0x60d7,
++      0x0000, 0x609f, 0x0000, 0x080c, 0x9452, 0x2009, 0x07d0, 0x60c4,
++      0xa084, 0xfff0, 0xa005, 0x0110, 0x2009, 0x1b58, 0x080c, 0x7029,
++      0x003e, 0x004e, 0x005e, 0x00ce, 0x00de, 0x00ee, 0x0005, 0x70d4,
++      0xd0ac, 0x1110, 0xd5bc, 0x0138, 0xa185, 0x0100, 0x6062, 0x6266,
++      0x636a, 0x646e, 0x0038, 0xa185, 0x0100, 0x6062, 0x6266, 0x606b,
++      0x0000, 0x646e, 0x6073, 0x0809, 0x6077, 0x0008, 0x688c, 0x8000,
++      0xa084, 0x00ff, 0x688e, 0x8007, 0x607a, 0x607f, 0x0000, 0x2f00,
++      0x6082, 0x7808, 0x6086, 0x7810, 0x2070, 0x7014, 0x608a, 0x7010,
++      0x608e, 0x700c, 0x60c6, 0x7008, 0x60ca, 0x686c, 0x60ce, 0x60af,
++      0x95d5, 0x60d7, 0x0000, 0xa582, 0x0080, 0x0248, 0x6a00, 0xd2f4,
++      0x0120, 0x6a14, 0xa294, 0x00ff, 0x0010, 0x2011, 0x0000, 0x629e,
++      0x080c, 0x9452, 0x2009, 0x07d0, 0x60c4, 0xa084, 0xfff0, 0xa005,
++      0x0110, 0x2009, 0x1b58, 0x080c, 0x7029, 0x003e, 0x004e, 0x005e,
++      0x00ce, 0x00de, 0x00ee, 0x0005, 0x7810, 0x2070, 0x704c, 0xa084,
++      0x0003, 0xa086, 0x0002, 0x0904, 0x8b72, 0x2001, 0xc635, 0x2004,
++      0xd0ac, 0x1110, 0xd5bc, 0x0138, 0xa185, 0x0100, 0x6062, 0x6266,
++      0x636a, 0x646e, 0x0038, 0xa185, 0x0100, 0x6062, 0x6266, 0x606b,
++      0x0000, 0x646e, 0x6073, 0x0880, 0x6077, 0x0008, 0x688c, 0x8000,
++      0xa084, 0x00ff, 0x688e, 0x8007, 0x607a, 0x7834, 0x607e, 0x2f00,
++      0x6086, 0x7808, 0x6082, 0x7060, 0x608a, 0x705c, 0x608e, 0x7080,
++      0x60c6, 0x707c, 0x60ca, 0x707c, 0x792c, 0xa108, 0x792e, 0x7080,
++      0x7928, 0xa109, 0x792a, 0x686c, 0x60ce, 0x60af, 0x95d5, 0x60d7,
++      0x0000, 0xa582, 0x0080, 0x0248, 0x6a00, 0xd2f4, 0x0120, 0x6a14,
++      0xa294, 0x00ff, 0x0010, 0x2011, 0x0000, 0x629e, 0x080c, 0x944f,
++      0x0804, 0x8b0a, 0x2001, 0xc635, 0x2004, 0xd0ac, 0x1110, 0xd5bc,
++      0x0138, 0xa185, 0x0700, 0x6062, 0x6266, 0x636a, 0x646e, 0x0038,
++      0xa185, 0x0700, 0x6062, 0x6266, 0x606b, 0x0000, 0x646e, 0x080c,
++      0x56bf, 0x0180, 0x00d6, 0x7810, 0xa06d, 0x684c, 0x00de, 0xa084,
++      0x2020, 0xa086, 0x2020, 0x1130, 0x7820, 0xc0cd, 0x7822, 0x6073,
++      0x0889, 0x0010, 0x6073, 0x0898, 0x6077, 0x0000, 0x688c, 0x8000,
++      0xa084, 0x00ff, 0x688e, 0x8007, 0x607a, 0x607f, 0x0000, 0x2f00,
++      0x6086, 0x7808, 0x6082, 0x7014, 0x608a, 0x7010, 0x608e, 0x700c,
++      0x60c6, 0x7008, 0x60ca, 0x686c, 0x60ce, 0x60af, 0x95d5, 0x60d7,
++      0x0000, 0xa582, 0x0080, 0x0248, 0x6a00, 0xd2f4, 0x0120, 0x6a14,
++      0xa294, 0x00ff, 0x0010, 0x2011, 0x0000, 0x629e, 0x7820, 0xd0cc,
++      0x0120, 0x080c, 0x9452, 0x0804, 0x8b0a, 0x080c, 0x944f, 0x0804,
++      0x8b0a, 0x7a18, 0xa280, 0x0023, 0x2014, 0x8210, 0xa294, 0x00ff,
++      0x2202, 0x8217, 0x0005, 0x00d6, 0x2069, 0xc927, 0x6843, 0x0001,
++      0x00de, 0x0005, 0x20e1, 0x9080, 0x60a3, 0x0056, 0x60a7, 0x9575,
++      0x0019, 0x080c, 0x701b, 0x0005, 0x0006, 0x6014, 0xa084, 0x0004,
++      0xa085, 0x0009, 0x6016, 0x000e, 0x0005, 0x0016, 0x00c6, 0x0006,
++      0x2061, 0x0100, 0x61a4, 0x60a7, 0x95f5, 0x6014, 0xa084, 0x0004,
++      0xa085, 0x0008, 0x6016, 0x000e, 0xe000, 0xe000, 0xe000, 0xe000,
++      0x61a6, 0x00ce, 0x001e, 0x0005, 0x00c6, 0x00d6, 0x0016, 0x0026,
++      0x2061, 0x0100, 0x2069, 0x0140, 0x080c, 0x5f22, 0x1198, 0x2001,
++      0xc943, 0x2004, 0xa005, 0x15b8, 0x0066, 0x2031, 0x0001, 0x080c,
++      0x5fa4, 0x006e, 0x1118, 0x080c, 0x701b, 0x0468, 0x00c6, 0x2061,
++      0xc927, 0x00d8, 0x6904, 0xa194, 0x4000, 0x0550, 0x0831, 0x6803,
++      0x1000, 0x6803, 0x0000, 0x00c6, 0x2061, 0xc927, 0x6128, 0xa192,
++      0x00c8, 0x1258, 0x8108, 0x612a, 0x6124, 0x00ce, 0x81ff, 0x0198,
++      0x080c, 0x701b, 0x080c, 0x8bec, 0x0070, 0x6124, 0xa1e5, 0x0000,
++      0x0140, 0x080c, 0xc59b, 0x080c, 0x7024, 0x2009, 0x0014, 0x080c,
++      0x9613, 0x00ce, 0x0000, 0x002e, 0x001e, 0x00de, 0x00ce, 0x0005,
++      0x2001, 0xc943, 0x2004, 0xa005, 0x1db0, 0x00c6, 0x2061, 0xc927,
++      0x6128, 0xa192, 0x0003, 0x1e08, 0x8108, 0x612a, 0x00ce, 0x080c,
++      0x701b, 0x080c, 0x4e5b, 0x0c38, 0x00c6, 0x00d6, 0x00e6, 0x0016,
++      0x0026, 0x080c, 0x7031, 0x2071, 0xc927, 0x713c, 0x81ff, 0x0904,
++      0x8cc1, 0x2061, 0x0100, 0x2069, 0x0140, 0x080c, 0x5f22, 0x1500,
++      0x0036, 0x2019, 0x0002, 0x080c, 0x8e79, 0x003e, 0x713c, 0x2160,
++      0x080c, 0xc59b, 0x2009, 0x004a, 0x621c, 0xa296, 0x0009, 0x1138,
++      0x6110, 0xa188, 0x0012, 0x200b, 0x0006, 0x2009, 0x0104, 0x080c,
++      0x9613, 0x0066, 0x2031, 0x0001, 0x080c, 0x5fa4, 0x006e, 0x0408,
++      0x6904, 0xa194, 0x4000, 0x0518, 0x6803, 0x1000, 0x6803, 0x0000,
++      0x0036, 0x2019, 0x0001, 0x080c, 0x8e79, 0x003e, 0x713c, 0x2160,
++      0x080c, 0xc59b, 0x2009, 0x004a, 0x621c, 0xa296, 0x0009, 0x1138,
++      0x6110, 0xa188, 0x0012, 0x200b, 0x0006, 0x2009, 0x0104, 0x080c,
++      0x9613, 0x002e, 0x001e, 0x00ee, 0x00de, 0x00ce, 0x0005, 0x0c00,
++      0x0026, 0x00e6, 0x2071, 0xc927, 0x7048, 0xd084, 0x01d8, 0x713c,
++      0x81ff, 0x01c0, 0x2071, 0x0100, 0xa188, 0x0007, 0x2114, 0xa28e,
++      0x0006, 0x1138, 0x7014, 0xa084, 0x0184, 0xa085, 0x0012, 0x7016,
++      0x0048, 0xa28e, 0x0009, 0x0db0, 0x7014, 0xa084, 0x0184, 0xa085,
++      0x0016, 0x7016, 0x00ee, 0x002e, 0x0005, 0x00e6, 0x00d6, 0x00c6,
++      0x0066, 0x0056, 0x0046, 0x0006, 0x0126, 0x2091, 0x8000, 0x6018,
++      0x2068, 0x6ca0, 0x2071, 0xc927, 0x7018, 0x2068, 0x8dff, 0x0188,
++      0x68a0, 0xa406, 0x0118, 0x6854, 0x2068, 0x0cc0, 0x6010, 0x2060,
++      0x643c, 0x6540, 0x6648, 0x2d60, 0x080c, 0x54ae, 0x0110, 0xa085,
++      0x0001, 0x012e, 0x000e, 0x004e, 0x005e, 0x006e, 0x00ce, 0x00de,
++      0x00ee, 0x0005, 0x20a1, 0x020b, 0x080c, 0x83bf, 0x20a3, 0x1200,
++      0x20a3, 0x0000, 0x20a3, 0x0000, 0x781c, 0xa086, 0x0004, 0x1110,
++      0x6098, 0x0018, 0x2001, 0xc615, 0x2004, 0x20a2, 0x7834, 0x20a2,
++      0x7838, 0x20a2, 0x20a9, 0x0010, 0xa006, 0x20a2, 0x1f04, 0x8d35,
++      0x20a2, 0x20a2, 0x60c3, 0x002c, 0x080c, 0x8be2, 0x0005, 0x0156,
++      0x0146, 0x20a1, 0x020b, 0x080c, 0x83bf, 0x20a3, 0x0f00, 0x20a3,
++      0x0000, 0x20a3, 0x0000, 0x7808, 0x20a2, 0x60c3, 0x0008, 0x080c,
++      0x8be2, 0x014e, 0x015e, 0x0005, 0x0156, 0x0146, 0x20a1, 0x020b,
++      0x080c, 0x845b, 0x20a3, 0x0200, 0x20a3, 0x0000, 0x20a9, 0x0006,
++      0x2011, 0xc640, 0x2019, 0xc641, 0x23a6, 0x22a6, 0xa398, 0x0002,
++      0xa290, 0x0002, 0x1f04, 0x8d64, 0x20a3, 0x0000, 0x20a3, 0x0000,
++      0x60c3, 0x001c, 0x080c, 0x8be2, 0x014e, 0x015e, 0x0005, 0x0156,
++      0x0146, 0x0016, 0x0026, 0x20a1, 0x020b, 0x080c, 0x8434, 0x080c,
++      0x844a, 0x7810, 0xa080, 0x0000, 0x2004, 0xa080, 0x0015, 0x2098,
++      0x7808, 0xa088, 0x0002, 0x21a8, 0x53a6, 0xa080, 0x0004, 0x8003,
++      0x60c2, 0x080c, 0x8be2, 0x002e, 0x001e, 0x014e, 0x015e, 0x0005,
++      0x0156, 0x0146, 0x20a1, 0x020b, 0x080c, 0x83bf, 0x20a3, 0x6200,
++      0x20a3, 0x0000, 0x20a3, 0x0000, 0x7808, 0x20a2, 0x60c3, 0x0008,
++      0x080c, 0x8be2, 0x014e, 0x015e, 0x0005, 0x0156, 0x0146, 0x0016,
++      0x0026, 0x20a1, 0x020b, 0x080c, 0x83bf, 0x7810, 0xa080, 0x0000,
++      0x2004, 0xa080, 0x0017, 0x2098, 0x7808, 0xa088, 0x0002, 0x21a8,
++      0x53a6, 0x8003, 0x60c2, 0x080c, 0x8be2, 0x002e, 0x001e, 0x014e,
++      0x015e, 0x0005, 0x00e6, 0x00c6, 0x0006, 0x0126, 0x2091, 0x8000,
++      0x2071, 0xc927, 0x700c, 0x2060, 0x8cff, 0x0178, 0x080c, 0xae8f,
++      0x1110, 0x080c, 0x9c09, 0x600c, 0x0006, 0x080c, 0xb056, 0x080c,
++      0x95e3, 0x080c, 0x8fb7, 0x00ce, 0x0c78, 0x700f, 0x0000, 0x700b,
++      0x0000, 0x012e, 0x000e, 0x00ce, 0x00ee, 0x0005, 0x0126, 0x0156,
++      0x00f6, 0x00e6, 0x00d6, 0x00c6, 0x0026, 0x0016, 0x0006, 0x2091,
++      0x8000, 0x2069, 0x0100, 0x2079, 0x0140, 0x2071, 0xc927, 0x7024,
++      0x2060, 0x8cff, 0x05a0, 0x080c, 0x8bf5, 0x68c3, 0x0000, 0x080c,
++      0x7024, 0x2009, 0x0013, 0x080c, 0x9613, 0x20a9, 0x01f4, 0x6824,
++      0xd094, 0x0158, 0x6827, 0x0004, 0x7804, 0xa084, 0x4000, 0x01a0,
++      0x7803, 0x1000, 0x7803, 0x0000, 0x0078, 0xd084, 0x0118, 0x6827,
++      0x0001, 0x0010, 0x1f04, 0x8e0f, 0x7804, 0xa084, 0x1000, 0x0120,
++      0x7803, 0x0100, 0x7803, 0x0000, 0x6824, 0x000e, 0x001e, 0x002e,
++      0x00ce, 0x00de, 0x00ee, 0x00fe, 0x015e, 0x012e, 0x0005, 0x2001,
++      0xc600, 0x2004, 0xa096, 0x0001, 0x0590, 0xa096, 0x0004, 0x0578,
++      0x080c, 0x7024, 0x6814, 0xa084, 0x0001, 0x0110, 0x68a7, 0x95f5,
++      0x6817, 0x0008, 0x68c3, 0x0000, 0x2011, 0x4e18, 0x080c, 0x6fad,
++      0x20a9, 0x01f4, 0x6824, 0xd094, 0x0158, 0x6827, 0x0004, 0x7804,
++      0xa084, 0x4000, 0x01a0, 0x7803, 0x1000, 0x7803, 0x0000, 0x0078,
++      0xd084, 0x0118, 0x6827, 0x0001, 0x0010, 0x1f04, 0x8e52, 0x7804,
++      0xa084, 0x1000, 0x0120, 0x7803, 0x0100, 0x7803, 0x0000, 0x000e,
++      0x001e, 0x002e, 0x00ce, 0x00de, 0x00ee, 0x00fe, 0x015e, 0x012e,
++      0x0005, 0x0126, 0x0156, 0x00f6, 0x00e6, 0x00d6, 0x00c6, 0x0026,
++      0x0016, 0x0006, 0x2091, 0x8000, 0x2069, 0x0100, 0x2079, 0x0140,
++      0x2071, 0xc927, 0x703c, 0x2060, 0x8cff, 0x0904, 0x8f04, 0xa386,
++      0x0002, 0x1128, 0x6814, 0xa084, 0x0002, 0x0904, 0x8f04, 0x68af,
++      0x95f5, 0x6817, 0x0010, 0x2009, 0x00fa, 0x8109, 0x1df0, 0x68c7,
++      0x0000, 0x68cb, 0x0008, 0x080c, 0x7031, 0x080c, 0x22ee, 0x0046,
++      0x2009, 0x017f, 0x200b, 0x00a5, 0x2021, 0x0169, 0x2404, 0xa084,
++      0x000f, 0xa086, 0x0004, 0x1500, 0x68af, 0x95f5, 0x68c7, 0x0000,
++      0x68cb, 0x0008, 0x00e6, 0x00f6, 0x2079, 0x0020, 0x2071, 0xc992,
++      0x6814, 0xa084, 0x0184, 0xa085, 0x0012, 0x6816, 0x7803, 0x0008,
++      0x7003, 0x0000, 0x00fe, 0x00ee, 0xa386, 0x0002, 0x1128, 0x7884,
++      0xa005, 0x1110, 0x7887, 0x0001, 0x2001, 0xc8f8, 0x2004, 0x200a,
++      0x004e, 0xa39d, 0x0000, 0x1140, 0x2009, 0x0049, 0x601c, 0xa086,
++      0x0009, 0x0110, 0x080c, 0x9613, 0x20a9, 0x03e8, 0x6824, 0xd094,
++      0x0158, 0x6827, 0x0004, 0x7804, 0xa084, 0x4000, 0x01a0, 0x7803,
++      0x1000, 0x7803, 0x0000, 0x0078, 0xd08c, 0x0118, 0x6827, 0x0002,
++      0x0010, 0x1f04, 0x8ee6, 0x7804, 0xa084, 0x1000, 0x0120, 0x7803,
++      0x0100, 0x7803, 0x0000, 0x6824, 0x000e, 0x001e, 0x002e, 0x00ce,
++      0x00de, 0x00ee, 0x00fe, 0x015e, 0x012e, 0x0005, 0x00d6, 0x0126,
++      0x2091, 0x8000, 0x2069, 0xc927, 0x6a06, 0x012e, 0x00de, 0x0005,
++      0x00d6, 0x0126, 0x2091, 0x8000, 0x2069, 0xc927, 0x6a32, 0x012e,
++      0x00de, 0x0005, 0x00f6, 0x00e6, 0x00c6, 0x0066, 0x0006, 0x0126,
++      0x2071, 0xc927, 0x7614, 0x2660, 0x2678, 0x2091, 0x8000, 0x8cff,
++      0x0538, 0x601c, 0xa206, 0x1500, 0x7014, 0xac36, 0x1110, 0x660c,
++      0x7616, 0x7010, 0xac36, 0x1140, 0x2c00, 0xaf36, 0x0118, 0x2f00,
++      0x7012, 0x0010, 0x7013, 0x0000, 0x660c, 0x0066, 0x2c00, 0xaf06,
++      0x0110, 0x7e0e, 0x0008, 0x2678, 0x600f, 0x0000, 0x080c, 0xae54,
++      0x080c, 0x8fb7, 0x00ce, 0x08d8, 0x2c78, 0x600c, 0x2060, 0x08b8,
++      0x012e, 0x000e, 0x006e, 0x00ce, 0x00ee, 0x00fe, 0x0005, 0x0156,
++      0x0146, 0x20a1, 0x020b, 0x080c, 0x8680, 0x7810, 0x20a2, 0xa006,
++      0x20a2, 0x20a2, 0x20a2, 0x20a2, 0x20a3, 0x1000, 0x0804, 0x8faf,
++      0x0156, 0x0146, 0x20a1, 0x020b, 0x080c, 0x8680, 0x7810, 0x20a2,
++      0xa006, 0x20a2, 0x20a2, 0x20a2, 0x20a2, 0x20a3, 0x4000, 0x0478,
++      0x0156, 0x0146, 0x20a1, 0x020b, 0x080c, 0x8680, 0x7810, 0x20a2,
++      0xa006, 0x20a2, 0x20a2, 0x20a2, 0x20a2, 0x20a3, 0x2000, 0x00f8,
++      0x0156, 0x0146, 0x20a1, 0x020b, 0x080c, 0x8680, 0x7810, 0x20a2,
++      0xa006, 0x20a2, 0x20a2, 0x20a2, 0x20a2, 0x20a3, 0x0400, 0x0078,
++      0x0156, 0x0146, 0x20a1, 0x020b, 0x080c, 0x8680, 0x7810, 0x20a2,
++      0xa006, 0x20a2, 0x20a2, 0x20a2, 0x20a2, 0x20a3, 0x0200, 0x0089,
++      0x60c3, 0x0020, 0x080c, 0x8be2, 0x014e, 0x015e, 0x0005, 0x00e6,
++      0x2071, 0xc927, 0x7020, 0xa005, 0x0110, 0x8001, 0x7022, 0x00ee,
++      0x0005, 0x20a9, 0x0008, 0x20a2, 0x1f04, 0x8fc3, 0x20a2, 0x20a2,
++      0x0005, 0x00f6, 0x00e6, 0x00d6, 0x00c6, 0x0076, 0x0066, 0x0006,
++      0x0126, 0x2091, 0x8000, 0x2071, 0xc927, 0x7614, 0x2660, 0x2678,
++      0x2039, 0x0001, 0x87ff, 0x0904, 0x905f, 0x8cff, 0x0904, 0x905f,
++      0x601c, 0xa086, 0x0006, 0x1904, 0x905a, 0x88ff, 0x0138, 0x2800,
++      0xac06, 0x1904, 0x905a, 0x2039, 0x0000, 0x0050, 0x6018, 0xa206,
++      0x1904, 0x905a, 0x85ff, 0x0120, 0x6050, 0xa106, 0x1904, 0x905a,
++      0x7024, 0xac06, 0x1598, 0x2069, 0x0100, 0x68c0, 0xa005, 0x1160,
++      0x6824, 0xd084, 0x0148, 0x6827, 0x0001, 0x080c, 0x7024, 0x080c,
++      0x90e6, 0x7027, 0x0000, 0x0410, 0x080c, 0x7024, 0x6820, 0xd0b4,
++      0x0110, 0x68a7, 0x95f5, 0x6817, 0x0008, 0x68c3, 0x0000, 0x080c,
++      0x90e6, 0x7027, 0x0000, 0x0036, 0x2069, 0x0140, 0x6b04, 0xa384,
++      0x1000, 0x0120, 0x6803, 0x0100, 0x6803, 0x0000, 0x2069, 0x0100,
++      0x6824, 0xd084, 0x0110, 0x6827, 0x0001, 0x003e, 0x7014, 0xac36,
++      0x1110, 0x660c, 0x7616, 0x7010, 0xac36, 0x1140, 0x2c00, 0xaf36,
++      0x0118, 0x2f00, 0x7012, 0x0010, 0x7013, 0x0000, 0x660c, 0x0066,
++      0x2c00, 0xaf06, 0x0110, 0x7e0e, 0x0008, 0x2678, 0x89ff, 0x1158,
++      0x600f, 0x0000, 0x6010, 0x2068, 0x080c, 0xac91, 0x0110, 0x080c,
++      0xc141, 0x080c, 0xae54, 0x080c, 0x8fb7, 0x88ff, 0x1190, 0x00ce,
++      0x0804, 0x8fda, 0x2c78, 0x600c, 0x2060, 0x0804, 0x8fda, 0xa006,
++      0x012e, 0x000e, 0x006e, 0x007e, 0x00ce, 0x00de, 0x00ee, 0x00fe,
++      0x0005, 0x6017, 0x0000, 0x00ce, 0xa8c5, 0x0001, 0x0c88, 0x00f6,
++      0x00e6, 0x00d6, 0x00c6, 0x0066, 0x0026, 0x0006, 0x0126, 0x2091,
++      0x8000, 0x2071, 0xc927, 0x7638, 0x2660, 0x2678, 0x8cff, 0x0904,
++      0x90d6, 0x601c, 0xa086, 0x0006, 0x1904, 0x90d1, 0x87ff, 0x0128,
++      0x2700, 0xac06, 0x1904, 0x90d1, 0x0048, 0x6018, 0xa206, 0x1904,
++      0x90d1, 0x85ff, 0x0118, 0x6050, 0xa106, 0x15d8, 0x703c, 0xac06,
++      0x1180, 0x0036, 0x2019, 0x0001, 0x080c, 0x8e79, 0x7033, 0x0000,
++      0x703f, 0x0000, 0x7043, 0x0000, 0x7047, 0x0000, 0x704b, 0x0000,
++      0x003e, 0x7038, 0xac36, 0x1110, 0x660c, 0x763a, 0x7034, 0xac36,
++      0x1140, 0x2c00, 0xaf36, 0x0118, 0x2f00, 0x7036, 0x0010, 0x7037,
++      0x0000, 0x660c, 0x0066, 0x2c00, 0xaf06, 0x0110, 0x7e0e, 0x0008,
++      0x2678, 0x600f, 0x0000, 0x6010, 0x2068, 0x080c, 0xac91, 0x0110,
++      0x080c, 0xc141, 0x080c, 0xae54, 0x87ff, 0x1190, 0x00ce, 0x0804,
++      0x907e, 0x2c78, 0x600c, 0x2060, 0x0804, 0x907e, 0xa006, 0x012e,
++      0x000e, 0x002e, 0x006e, 0x00ce, 0x00de, 0x00ee, 0x00fe, 0x0005,
++      0x6017, 0x0000, 0x00ce, 0xa7bd, 0x0001, 0x0c88, 0x00e6, 0x2071,
++      0xc927, 0x2001, 0xc600, 0x2004, 0xa086, 0x0002, 0x1118, 0x7007,
++      0x0005, 0x0010, 0x7007, 0x0000, 0x00ee, 0x0005, 0x00f6, 0x00e6,
++      0x00c6, 0x0066, 0x0026, 0x0006, 0x0126, 0x2091, 0x8000, 0x2071,
++      0xc927, 0x2c10, 0x7638, 0x2660, 0x2678, 0x8cff, 0x0518, 0x2200,
++      0xac06, 0x11e0, 0x7038, 0xac36, 0x1110, 0x660c, 0x763a, 0x7034,
++      0xac36, 0x1140, 0x2c00, 0xaf36, 0x0118, 0x2f00, 0x7036, 0x0010,
++      0x7037, 0x0000, 0x660c, 0x2c00, 0xaf06, 0x0110, 0x7e0e, 0x0008,
++      0x2678, 0x600f, 0x0000, 0xa085, 0x0001, 0x0020, 0x2c78, 0x600c,
++      0x2060, 0x08d8, 0x012e, 0x000e, 0x002e, 0x006e, 0x00ce, 0x00ee,
++      0x00fe, 0x0005, 0x00f6, 0x00e6, 0x00d6, 0x00c6, 0x0066, 0x0006,
++      0x0126, 0x2091, 0x8000, 0x2071, 0xc927, 0x760c, 0x2660, 0x2678,
++      0x8cff, 0x0904, 0x91bc, 0x6018, 0xa080, 0x0028, 0x2004, 0xa206,
++      0x1904, 0x91b7, 0x7024, 0xac06, 0x1508, 0x2069, 0x0100, 0x68c0,
++      0xa005, 0x0904, 0x9193, 0x080c, 0x8bf5, 0x68c3, 0x0000, 0x080c,
++      0x90e6, 0x7027, 0x0000, 0x0036, 0x2069, 0x0140, 0x6b04, 0xa384,
++      0x1000, 0x0120, 0x6803, 0x0100, 0x6803, 0x0000, 0x2069, 0x0100,
++      0x6824, 0xd084, 0x0110, 0x6827, 0x0001, 0x003e, 0x700c, 0xac36,
++      0x1110, 0x660c, 0x760e, 0x7008, 0xac36, 0x1140, 0x2c00, 0xaf36,
++      0x0118, 0x2f00, 0x700a, 0x0010, 0x700b, 0x0000, 0x660c, 0x0066,
++      0x2c00, 0xaf06, 0x0110, 0x7e0e, 0x0008, 0x2678, 0x600f, 0x0000,
++      0x080c, 0xae7e, 0x1158, 0x080c, 0x2e6c, 0x080c, 0xae8f, 0x11f0,
++      0x080c, 0x9c09, 0x00d8, 0x080c, 0x90e6, 0x08c0, 0x080c, 0xae8f,
++      0x1118, 0x080c, 0x9c09, 0x0090, 0x6010, 0x2068, 0x080c, 0xac91,
++      0x0168, 0x601c, 0xa086, 0x0003, 0x11f8, 0x6837, 0x0103, 0x6b4a,
++      0x6847, 0x0000, 0x080c, 0x580a, 0x080c, 0xae48, 0x080c, 0xb056,
++      0x080c, 0xae54, 0x080c, 0x8fb7, 0x00ce, 0x0804, 0x9140, 0x2c78,
++      0x600c, 0x2060, 0x0804, 0x9140, 0x012e, 0x000e, 0x006e, 0x00ce,
++      0x00de, 0x00ee, 0x00fe, 0x0005, 0x601c, 0xa086, 0x0006, 0x1d30,
++      0x080c, 0xc141, 0x0c18, 0x0036, 0x0156, 0x0136, 0x0146, 0x3908,
++      0xa006, 0xa190, 0x0020, 0x221c, 0xa39e, 0x2c61, 0x1118, 0x8210,
++      0x8000, 0x0cc8, 0xa005, 0x0138, 0x20a9, 0x0020, 0x2198, 0xa110,
++      0x22a0, 0x22c8, 0x53a3, 0x014e, 0x013e, 0x015e, 0x003e, 0x0005,
++      0x00d6, 0x20a1, 0x020b, 0x080c, 0x845b, 0x20a3, 0x0200, 0x20a3,
++      0x0014, 0x60c3, 0x0014, 0x20a3, 0x0000, 0x20a3, 0x0000, 0x2099,
++      0xc900, 0x20a9, 0x0004, 0x53a6, 0x20a3, 0x0004, 0x20a3, 0x7878,
++      0x20a3, 0x0000, 0x20a3, 0x0000, 0x080c, 0x8be2, 0x00de, 0x0005,
++      0x20a1, 0x020b, 0x080c, 0x845b, 0x20a3, 0x0214, 0x20a3, 0x0018,
++      0x20a3, 0x0800, 0x7810, 0xa084, 0xff00, 0x20a2, 0x20a3, 0x0000,
++      0x20a3, 0x0000, 0x20a3, 0x0000, 0x20a3, 0x0000, 0x7810, 0xa084,
++      0x00ff, 0x20a2, 0x7828, 0x20a2, 0x20a3, 0x0000, 0x20a3, 0x0000,
++      0x60c3, 0x0018, 0x080c, 0x8be2, 0x0005, 0x00d6, 0x0016, 0x2f68,
++      0x2009, 0x0035, 0x080c, 0xb141, 0x1904, 0x929b, 0x20a1, 0x020b,
++      0x080c, 0x83bf, 0x20a3, 0x1300, 0x20a3, 0x0000, 0x7828, 0x2068,
++      0x681c, 0xa086, 0x0003, 0x0580, 0x7818, 0xa080, 0x0028, 0x2014,
++      0x2001, 0xc635, 0x2004, 0xd0ac, 0x11d0, 0xa286, 0x007e, 0x1128,
++      0x20a3, 0x00ff, 0x20a3, 0xfffe, 0x04b8, 0xa286, 0x007f, 0x1128,
++      0x20a3, 0x00ff, 0x20a3, 0xfffd, 0x0478, 0xd2bc, 0x0180, 0xa286,
++      0x0080, 0x1128, 0x20a3, 0x00ff, 0x20a3, 0xfffc, 0x0428, 0xa2e8,
++      0xc77b, 0x2d6c, 0x6810, 0x20a2, 0x6814, 0x20a2, 0x00e8, 0x20a3,
++      0x0000, 0x6098, 0x20a2, 0x00c0, 0x2001, 0xc635, 0x2004, 0xd0ac,
++      0x1138, 0x7818, 0xa080, 0x0028, 0x2004, 0xa082, 0x007e, 0x0240,
++      0x00d6, 0x2069, 0xc61c, 0x2da6, 0x8d68, 0x2da6, 0x00de, 0x0020,
++      0x20a3, 0x0000, 0x6034, 0x20a2, 0x7834, 0x20a2, 0x7838, 0x20a2,
++      0x20a3, 0x0000, 0x20a3, 0x0000, 0x60c3, 0x000c, 0x080c, 0x8be2,
++      0x001e, 0x00de, 0x0005, 0x7817, 0x0001, 0x7803, 0x0006, 0x001e,
++      0x00de, 0x0005, 0x00d6, 0x0026, 0x7928, 0x2168, 0x691c, 0xa186,
++      0x0006, 0x01c0, 0xa186, 0x0003, 0x0904, 0x9311, 0xa186, 0x0005,
++      0x0904, 0x92fa, 0xa186, 0x0004, 0x05b8, 0xa186, 0x0008, 0x0904,
++      0x9302, 0x7807, 0x0037, 0x7813, 0x1700, 0x080c, 0x9379, 0x002e,
++      0x00de, 0x0005, 0x080c, 0x9335, 0x2009, 0x4000, 0x6800, 0x0002,
++      0x92db, 0x92e6, 0x92dd, 0x92e6, 0x92e2, 0x92db, 0x92db, 0x92e6,
++      0x92e6, 0x92e6, 0x92e6, 0x92db, 0x92db, 0x92db, 0x92db, 0x92db,
++      0x92e6, 0x92db, 0x92e6, 0x080c, 0x1519, 0x6820, 0xd0e4, 0x0110,
++      0xd0cc, 0x0110, 0xa00e, 0x0010, 0x2009, 0x2000, 0x6828, 0x20a2,
++      0x682c, 0x20a2, 0x0804, 0x932b, 0x080c, 0x9335, 0x20a3, 0x0000,
++      0x20a3, 0x0000, 0x2009, 0x4000, 0x6a00, 0xa286, 0x0002, 0x1108,
++      0xa00e, 0x0488, 0x04d1, 0x20a3, 0x0000, 0x20a3, 0x0000, 0x2009,
++      0x4000, 0x0448, 0x0491, 0x20a3, 0x0000, 0x20a3, 0x0000, 0x2009,
++      0x4000, 0xa286, 0x0005, 0x0118, 0xa286, 0x0002, 0x1108, 0xa00e,
++      0x00d0, 0x0419, 0x6810, 0x2068, 0x697c, 0x6810, 0xa112, 0x6980,
++      0x6814, 0xa103, 0x20a2, 0x22a2, 0x7928, 0xa180, 0x0000, 0x2004,
++      0xa08e, 0x0002, 0x0130, 0xa08e, 0x0004, 0x0118, 0x2009, 0x4000,
++      0x0010, 0x2009, 0x0000, 0x21a2, 0x20a3, 0x0000, 0x60c3, 0x0018,
++      0x080c, 0x8be2, 0x002e, 0x00de, 0x0005, 0x0036, 0x0046, 0x0056,
++      0x0066, 0x20a1, 0x020b, 0x080c, 0x845b, 0xa006, 0x20a3, 0x0200,
++      0x20a2, 0x7934, 0x21a2, 0x7938, 0x21a2, 0x7818, 0xa080, 0x0028,
++      0x2004, 0x2011, 0xc635, 0x2214, 0xd2ac, 0x1118, 0xa092, 0x007e,
++      0x0268, 0x00d6, 0x2069, 0xc61c, 0x2d2c, 0x8d68, 0x2d34, 0xa0e8,
++      0xc77b, 0x2d6c, 0x6b10, 0x6c14, 0x00de, 0x0030, 0x2019, 0x0000,
++      0x6498, 0x2029, 0x0000, 0x6634, 0x7828, 0xa080, 0x0007, 0x2004,
++      0xa086, 0x0003, 0x1128, 0x25a2, 0x26a2, 0x23a2, 0x24a2, 0x0020,
++      0x23a2, 0x24a2, 0x25a2, 0x26a2, 0x006e, 0x005e, 0x004e, 0x003e,
++      0x0005, 0x20a1, 0x020b, 0x080c, 0x845b, 0x20a3, 0x0100, 0x20a3,
++      0x0000, 0x20a3, 0x0009, 0x7810, 0x20a2, 0x60c3, 0x0008, 0x080c,
++      0x8be2, 0x0005, 0x20a1, 0x020b, 0x080c, 0x83b7, 0x20a3, 0x1400,
++      0x20a3, 0x0000, 0x7834, 0x20a2, 0x7838, 0x20a2, 0x7828, 0x20a2,
++      0x782c, 0x20a2, 0x7830, 0xa084, 0x00ff, 0x8007, 0x20a2, 0x20a3,
++      0x0000, 0x60c3, 0x0010, 0x080c, 0x8be2, 0x0005, 0x20a1, 0x020b,
++      0x080c, 0x8453, 0x20a3, 0x0100, 0x20a3, 0x0000, 0x7828, 0x20a2,
++      0x7810, 0x20a2, 0x60c3, 0x0008, 0x080c, 0x8be2, 0x0005, 0x0146,
++      0x20a1, 0x020b, 0x0031, 0x60c3, 0x0000, 0x080c, 0x8be2, 0x014e,
++      0x0005, 0x20e1, 0x9080, 0x20e1, 0x4000, 0x7818, 0xa080, 0x0028,
++      0x2004, 0x2011, 0xc635, 0x2214, 0xd2ac, 0x1110, 0xd0bc, 0x0188,
++      0x00d6, 0xa0e8, 0xc77b, 0x2d6c, 0x6810, 0xa085, 0x0300, 0x20a2,
++      0x6814, 0x20a2, 0x2069, 0xc61c, 0x2da6, 0x8d68, 0x2da6, 0x00de,
++      0x0078, 0x00d6, 0xa0e8, 0xc77b, 0x2d6c, 0x6810, 0xa085, 0x0300,
++      0x20a2, 0x6814, 0x20a2, 0x00de, 0x20a3, 0x0000, 0x6234, 0x22a2,
++      0x20a3, 0x0819, 0x20a3, 0x0000, 0x080c, 0x8bd1, 0x22a2, 0x20a3,
++      0x0000, 0x2fa2, 0x7a08, 0x22a2, 0x20a3, 0x0000, 0x20a3, 0x0000,
++      0x0005, 0x20a1, 0x020b, 0x0079, 0x7910, 0x21a2, 0x20a3, 0x0000,
++      0x60c3, 0x0000, 0x20e1, 0x9080, 0x60a7, 0x9575, 0x080c, 0x8bec,
++      0x080c, 0x701b, 0x0005, 0x0156, 0x0136, 0x0036, 0x00d6, 0x00e6,
++      0x20e1, 0x9080, 0x20e1, 0x4000, 0x7854, 0x2068, 0xadf0, 0x000f,
++      0x7210, 0xa296, 0x00c0, 0xa294, 0xfffd, 0x7212, 0x7214, 0xa294,
++      0x0300, 0x7216, 0x7100, 0xa194, 0x00ff, 0x7308, 0xa384, 0x00ff,
++      0xa08d, 0xc200, 0x7102, 0xa384, 0xff00, 0xa215, 0x720a, 0x7004,
++      0x720c, 0x700e, 0x7206, 0x20a9, 0x000a, 0x2e98, 0x53a6, 0x60a3,
++      0x0035, 0x6a38, 0xa294, 0x7000, 0xa286, 0x3000, 0x0110, 0x60a3,
++      0x0037, 0x00ee, 0x00de, 0x003e, 0x013e, 0x015e, 0x0005, 0x2009,
++      0x0092, 0x0010, 0x2009, 0x0096, 0x60ab, 0x0036, 0x6116, 0x0005,
++      0x609b, 0x0000, 0x20a1, 0x020b, 0x20e1, 0x9080, 0x20e1, 0x4000,
++      0x20a3, 0x22ff, 0x20a3, 0xffff, 0x00d6, 0x2069, 0xc61c, 0x2da6,
++      0x8d68, 0x2da6, 0x00de, 0x20a3, 0x0138, 0x20a3, 0x0000, 0x0026,
++      0x080c, 0x8bd1, 0x22a2, 0x20a3, 0x0000, 0x2fa2, 0x20a3, 0xffff,
++      0x20a3, 0x0000, 0x20a3, 0x0000, 0x002e, 0x20a3, 0x5400, 0x20a3,
++      0x0000, 0x080c, 0x768f, 0x11b8, 0x0016, 0x7810, 0xa080, 0x000d,
++      0x20a9, 0x0014, 0x200c, 0x810f, 0x21a2, 0x8000, 0x1f04, 0x948a,
++      0x20a9, 0x0012, 0x2001, 0x0000, 0x20a3, 0x0000, 0x1f04, 0x9494,
++      0x001e, 0x0804, 0x9502, 0x7810, 0x0016, 0x00c6, 0x00d6, 0x7810,
++      0x2068, 0x2061, 0xc600, 0x6070, 0xa084, 0x00ff, 0x6968, 0x810f,
++      0xa18c, 0xff00, 0xa105, 0x20a2, 0x6074, 0x20a2, 0x6968, 0xa18c,
++      0xff00, 0x21a2, 0x20a3, 0x0000, 0x20a9, 0x0004, 0x2009, 0xc605,
++      0x2104, 0x20a2, 0x8108, 0x1f04, 0x94b8, 0x20a9, 0x0004, 0x2009,
++      0xc601, 0x2104, 0x20a2, 0x8108, 0x1f04, 0x94c1, 0x20a9, 0x0004,
++      0x2d08, 0xa188, 0x001d, 0x2104, 0x8007, 0x20a2, 0x8108, 0x1f04,
++      0x94cb, 0x20a9, 0x0004, 0x2d08, 0xa188, 0x0021, 0x2104, 0x8007,
++      0x20a2, 0x8108, 0x1f04, 0x94d6, 0x080c, 0x7694, 0x1138, 0x20a9,
++      0x0008, 0x20a3, 0x0000, 0x1f04, 0x94e1, 0x0050, 0x20a9, 0x0008,
++      0x2009, 0xc69a, 0x2104, 0x8007, 0x20a2, 0x8108, 0x1f04, 0x94ea,
++      0x20a9, 0x0008, 0x2d08, 0xa188, 0x0025, 0x2104, 0x8007, 0x20a2,
++      0x8108, 0x1f04, 0x94f5, 0x00de, 0x00ce, 0x001e, 0x20a3, 0x0000,
++      0x20a3, 0x0000, 0x60c3, 0x004c, 0x080c, 0x8be2, 0x0005, 0x20a1,
++      0x020b, 0x080c, 0x83bf, 0x20a3, 0x5500, 0x20a3, 0x0000, 0x7810,
++      0x0016, 0x00c6, 0x00d6, 0x7810, 0x2068, 0x686c, 0xa084, 0x00ff,
++      0x6968, 0x810f, 0xa18c, 0xff00, 0xa105, 0x20a2, 0x696c, 0xa18c,
++      0xff00, 0x6870, 0xa084, 0x00ff, 0xa105, 0x20a2, 0x6968, 0xa18c,
++      0xff00, 0x2061, 0xc600, 0x6070, 0xa084, 0x00ff, 0xa10d, 0x21a2,
++      0x6174, 0x21a2, 0x20a9, 0x0004, 0x2d08, 0xa188, 0x001d, 0x2104,
++      0x8007, 0x20a2, 0x8108, 0x1f04, 0x9537, 0x20a9, 0x0004, 0x2d08,
++      0xa188, 0x0021, 0x2104, 0x8007, 0x20a2, 0x8108, 0x1f04, 0x9542,
++      0x20a9, 0x0004, 0x2009, 0xc605, 0x2104, 0x20a2, 0x8108, 0x1f04,
++      0x954c, 0x20a9, 0x0004, 0x2009, 0xc601, 0x2104, 0x20a2, 0x8108,
++      0x1f04, 0x9555, 0x20a9, 0x0008, 0x2d08, 0xa188, 0x0025, 0x2104,
++      0x8007, 0x20a2, 0x8108, 0x1f04, 0x955f, 0x080c, 0x7694, 0x1138,
++      0x20a9, 0x0008, 0x20a3, 0x0000, 0x1f04, 0x956a, 0x0050, 0x20a9,
++      0x0008, 0x2009, 0xc69a, 0x2104, 0x8007, 0x20a2, 0x8108, 0x1f04,
++      0x9573, 0x00de, 0x00ce, 0x001e, 0x20a3, 0x0000, 0x20a3, 0x0000,
++      0x60c3, 0x004c, 0x080c, 0x8be2, 0x0005, 0x2061, 0xce00, 0x2a70,
++      0x7068, 0x704a, 0x704f, 0xce00, 0x0005, 0x00e6, 0x0126, 0x2071,
++      0xc600, 0x2091, 0x8000, 0x7548, 0xa582, 0x0010, 0x0608, 0x704c,
++      0x2060, 0x6000, 0xa086, 0x0000, 0x0148, 0xace0, 0x0018, 0x705c,
++      0xac02, 0x1208, 0x0cb0, 0x2061, 0xce00, 0x0c98, 0x6003, 0x0008,
++      0x8529, 0x754a, 0xaca8, 0x0018, 0x705c, 0xa502, 0x1230, 0x754e,
++      0xa085, 0x0001, 0x012e, 0x00ee, 0x0005, 0x704f, 0xce00, 0x0cc0,
++      0xa006, 0x0cc0, 0x00e6, 0x2071, 0xc600, 0x7548, 0xa582, 0x0010,
++      0x0600, 0x704c, 0x2060, 0x6000, 0xa086, 0x0000, 0x0148, 0xace0,
++      0x0018, 0x705c, 0xac02, 0x1208, 0x0cb0, 0x2061, 0xce00, 0x0c98,
++      0x6003, 0x0008, 0x8529, 0x754a, 0xaca8, 0x0018, 0x705c, 0xa502,
++      0x1228, 0x754e, 0xa085, 0x0001, 0x00ee, 0x0005, 0x704f, 0xce00,
++      0x0cc8, 0xa006, 0x0cc8, 0xac82, 0xce00, 0x0a0c, 0x1519, 0x2001,
++      0xc617, 0x2004, 0xac02, 0x1a0c, 0x1519, 0xa006, 0x6006, 0x600a,
++      0x600e, 0x6012, 0x6016, 0x601a, 0x601f, 0x0000, 0x6003, 0x0000,
++      0x6052, 0x6056, 0x6022, 0x6026, 0x602a, 0x602e, 0x6032, 0x6036,
++      0x603a, 0x603e, 0x6026, 0x2061, 0xc600, 0x6048, 0x8000, 0x604a,
++      0xa086, 0x0001, 0x0108, 0x0005, 0x0126, 0x2091, 0x8000, 0x080c,
++      0x7e94, 0x012e, 0x0cc0, 0x601c, 0xa084, 0x000f, 0x0002, 0x9622,
++      0x9631, 0x964c, 0x9667, 0xb189, 0xb1a4, 0xb1bf, 0x9622, 0x9631,
++      0x7699, 0x9682, 0xa186, 0x0013, 0x1128, 0x080c, 0x7db1, 0x080c,
++      0x7e94, 0x0005, 0xa18e, 0x0047, 0x1118, 0xa016, 0x080c, 0x1870,
++      0x0005, 0x0066, 0x6000, 0xa0b2, 0x0010, 0x1a0c, 0x1519, 0x0013,
++      0x006e, 0x0005, 0x964a, 0x9a78, 0x9c43, 0x964a, 0x9cc0, 0x9740,
++      0x964a, 0x964a, 0x9a0a, 0xa126, 0x964a, 0x964a, 0x964a, 0x964a,
++      0x964a, 0x964a, 0x080c, 0x1519, 0x0066, 0x6000, 0xa0b2, 0x0010,
++      0x1a0c, 0x1519, 0x0013, 0x006e, 0x0005, 0x9665, 0xa759, 0x9665,
++      0x9665, 0x9665, 0x9665, 0x9665, 0x9665, 0xa704, 0xa8c5, 0x9665,
++      0xa786, 0xa7fd, 0xa786, 0xa7fd, 0x9665, 0x080c, 0x1519, 0x0066,
++      0x6000, 0xa0b2, 0x0010, 0x1a0c, 0x1519, 0x0013, 0x006e, 0x0005,
++      0x9680, 0xa167, 0xa231, 0xa36c, 0xa4c8, 0x9680, 0x9680, 0x9680,
++      0xa141, 0xa6b4, 0xa6b7, 0x9680, 0x9680, 0x9680, 0x9680, 0xa6e1,
++      0x080c, 0x1519, 0x0066, 0x6000, 0xa0b2, 0x0010, 0x1a0c, 0x1519,
++      0x0013, 0x006e, 0x0005, 0x969b, 0x969b, 0x969b, 0x96c9, 0x9716,
++      0x969b, 0x969b, 0x969b, 0x969d, 0x969b, 0x969b, 0x969b, 0x969b,
++      0x969b, 0x969b, 0x969b, 0x080c, 0x1519, 0xa186, 0x0003, 0x190c,
++      0x1519, 0x00d6, 0x6003, 0x0003, 0x6106, 0x6010, 0x2068, 0x684f,
++      0x0040, 0x687c, 0x680a, 0x6880, 0x680e, 0x6813, 0x0000, 0x6817,
++      0x0000, 0x6854, 0xa092, 0x199a, 0x0210, 0x2001, 0x1999, 0x8003,
++      0x8013, 0x8213, 0xa210, 0x6216, 0x00de, 0x2c10, 0x080c, 0x2068,
++      0x080c, 0x79fc, 0x0126, 0x2091, 0x8000, 0x080c, 0x7f6e, 0x012e,
++      0x0005, 0xa182, 0x0047, 0x0002, 0x96d5, 0x96d5, 0x96d7, 0x96f0,
++      0x96d5, 0x96d5, 0x96d5, 0x96d5, 0x9702, 0x080c, 0x1519, 0x00d6,
++      0x0016, 0x080c, 0x7e47, 0x080c, 0x7f6e, 0x6003, 0x0004, 0x6110,
++      0x2168, 0x684f, 0x0020, 0x685c, 0x685a, 0x6874, 0x687e, 0x6878,
++      0x6882, 0x6897, 0x0000, 0x689b, 0x0000, 0x001e, 0x00de, 0x0005,
++      0x080c, 0x7e47, 0x00d6, 0x6110, 0x2168, 0x080c, 0xac91, 0x0120,
++      0x684b, 0x0006, 0x080c, 0x580a, 0x00de, 0x080c, 0x95e3, 0x080c,
++      0x7f6e, 0x0005, 0x080c, 0x7e47, 0x080c, 0x2e46, 0x00d6, 0x6110,
++      0x2168, 0x080c, 0xac91, 0x0120, 0x684b, 0x0029, 0x080c, 0x580a,
++      0x00de, 0x080c, 0x95e3, 0x080c, 0x7f6e, 0x0005, 0xa182, 0x0047,
++      0x0002, 0x9724, 0x9733, 0x9722, 0x9722, 0x9722, 0x9722, 0x9722,
++      0x9722, 0x9722, 0x080c, 0x1519, 0x00d6, 0x6010, 0x2068, 0x684c,
++      0xc0f4, 0x684e, 0x00de, 0x20e1, 0x0005, 0x3d18, 0x3e20, 0x2c10,
++      0x080c, 0x1870, 0x0005, 0x00d6, 0x6110, 0x2168, 0x684b, 0x0000,
++      0x6853, 0x0000, 0x080c, 0x580a, 0x00de, 0x080c, 0x95e3, 0x0005,
++      0xa1b6, 0x0015, 0x1118, 0x080c, 0x95e3, 0x0030, 0xa1b6, 0x0016,
++      0x190c, 0x1519, 0x080c, 0x95e3, 0x0005, 0x20a9, 0x000e, 0x2e98,
++      0x6010, 0x20a0, 0x53a3, 0x20a9, 0x0006, 0x3310, 0x3420, 0x9398,
++      0x94a0, 0x3318, 0x3428, 0x222e, 0x2326, 0xa290, 0x0002, 0xa5a8,
++      0x0002, 0xa398, 0x0002, 0xa4a0, 0x0002, 0x1f04, 0x975b, 0x00e6,
++      0x080c, 0xac91, 0x0130, 0x6010, 0x2070, 0x7007, 0x0000, 0x7037,
++      0x0103, 0x00ee, 0x080c, 0x95e3, 0x0005, 0x00d6, 0x0036, 0x7330,
++      0xa386, 0x0200, 0x1130, 0x6018, 0x2068, 0x6813, 0x00ff, 0x6817,
++      0xfffd, 0x6010, 0xa005, 0x0130, 0x2068, 0x6807, 0x0000, 0x6837,
++      0x0103, 0x6b32, 0x080c, 0x95e3, 0x003e, 0x00de, 0x0005, 0x0016,
++      0x20a9, 0x002a, 0xae80, 0x000c, 0x2098, 0x6010, 0xa080, 0x0002,
++      0x20a0, 0x53a3, 0x20a9, 0x002a, 0x6010, 0xa080, 0x0001, 0x2004,
++      0xa080, 0x0002, 0x20a0, 0x53a3, 0x00e6, 0x6010, 0x2004, 0x2070,
++      0x7037, 0x0103, 0x00ee, 0x080c, 0x95e3, 0x001e, 0x0005, 0x0016,
++      0x2009, 0x0000, 0x7030, 0xa086, 0x0100, 0x0140, 0x7038, 0xa084,
++      0x00ff, 0x800c, 0x703c, 0xa084, 0x00ff, 0x8004, 0xa080, 0x0004,
++      0xa108, 0x21a8, 0xae80, 0x000c, 0x2098, 0x6010, 0xa080, 0x0002,
++      0x20a0, 0x080c, 0x4ecb, 0x00e6, 0x080c, 0xac91, 0x0140, 0x6010,
++      0x2070, 0x7007, 0x0000, 0x7034, 0x70b2, 0x7037, 0x0103, 0x00ee,
++      0x080c, 0x95e3, 0x001e, 0x0005, 0x0016, 0x2009, 0x0000, 0x7030,
++      0xa086, 0x0200, 0x0110, 0x2009, 0x0001, 0x00d6, 0x6010, 0xa06d,
++      0x090c, 0x1519, 0x694a, 0x080c, 0x580a, 0x00de, 0x080c, 0x95e3,
++      0x001e, 0x0005, 0x00e6, 0x00d6, 0x603f, 0x0000, 0x2c68, 0x0016,
++      0x2009, 0x0035, 0x080c, 0xb141, 0x001e, 0x1168, 0x0026, 0x6228,
++      0x2268, 0x002e, 0x2071, 0xcc8c, 0x6b1c, 0xa386, 0x0003, 0x0130,
++      0xa386, 0x0006, 0x0128, 0x080c, 0x95e3, 0x0020, 0x0031, 0x0010,
++      0x080c, 0x98d3, 0x00de, 0x00ee, 0x0005, 0x00f6, 0x6810, 0x2078,
++      0xa186, 0x0015, 0x0904, 0x98ba, 0xa18e, 0x0016, 0x1904, 0x98d1,
++      0x700c, 0xa08c, 0xff00, 0xa186, 0x1700, 0x0120, 0xa186, 0x0300,
++      0x1904, 0x9899, 0x8fff, 0x1138, 0x6800, 0xa086, 0x000f, 0x0904,
++      0x987d, 0x0804, 0x98cf, 0x6808, 0xa086, 0xffff, 0x1904, 0x98bc,
++      0x784c, 0xa084, 0x0060, 0xa086, 0x0020, 0x1150, 0x797c, 0x7810,
++      0xa106, 0x1904, 0x98bc, 0x7980, 0x7814, 0xa106, 0x1904, 0x98bc,
++      0x080c, 0xae48, 0x6858, 0x7852, 0x784c, 0xc0dc, 0xc0f4, 0xc0d4,
++      0x784e, 0x0026, 0xa00e, 0x6a14, 0x2001, 0x000a, 0x080c, 0x783f,
++      0x7854, 0xa20a, 0x0208, 0x8011, 0x7a56, 0x82ff, 0x002e, 0x1138,
++      0x00c6, 0x2d60, 0x080c, 0xaa40, 0x00ce, 0x0804, 0x98cf, 0x00c6,
++      0x00d6, 0x2f68, 0x6838, 0xd0fc, 0x1118, 0x080c, 0x4fa6, 0x0010,
++      0x080c, 0x51dd, 0x00de, 0x00ce, 0x1904, 0x98bc, 0x00c6, 0x2d60,
++      0x080c, 0x95e3, 0x00ce, 0x0804, 0x98cf, 0x00c6, 0x080c, 0xaf0d,
++      0x0190, 0x6013, 0x0000, 0x6818, 0x601a, 0x080c, 0xb05e, 0x601f,
++      0x0003, 0x6904, 0x00c6, 0x2d60, 0x080c, 0x95e3, 0x00ce, 0x080c,
++      0x9613, 0x00ce, 0x04e0, 0x2001, 0xc8ff, 0x2004, 0x683e, 0x00ce,
++      0x04b0, 0x7008, 0xa086, 0x000b, 0x11a0, 0x6018, 0x200c, 0xc1bc,
++      0x2102, 0x00c6, 0x2d60, 0x7853, 0x0003, 0x6007, 0x0085, 0x6003,
++      0x000b, 0x601f, 0x0002, 0x080c, 0x7999, 0x080c, 0x7e94, 0x00ce,
++      0x00f0, 0x700c, 0xa086, 0x2a00, 0x1138, 0x2001, 0xc8ff, 0x2004,
++      0x683e, 0x00a8, 0x0481, 0x00a8, 0x8fff, 0x090c, 0x1519, 0x00c6,
++      0x00d6, 0x2d60, 0x2f68, 0x6837, 0x0103, 0x684b, 0x0003, 0x080c,
++      0xa934, 0x080c, 0xae48, 0x080c, 0xae54, 0x00de, 0x00ce, 0x080c,
++      0x95e3, 0x00fe, 0x0005, 0xa186, 0x0015, 0x1128, 0x2001, 0xc8ff,
++      0x2004, 0x683e, 0x0068, 0xa18e, 0x0016, 0x1160, 0x00c6, 0x2d00,
++      0x2060, 0x080c, 0xc3e2, 0x080c, 0x7103, 0x080c, 0x95e3, 0x00ce,
++      0x080c, 0x95e3, 0x0005, 0x0026, 0x0036, 0x0046, 0x7228, 0x7c80,
++      0x7b7c, 0xd2f4, 0x0130, 0x2001, 0xc8ff, 0x2004, 0x683e, 0x0804,
++      0x994d, 0x00c6, 0x2d60, 0x080c, 0xa954, 0x00ce, 0x6804, 0xa086,
++      0x0050, 0x1168, 0x00c6, 0x2d00, 0x2060, 0x6003, 0x0001, 0x6007,
++      0x0050, 0x080c, 0x7999, 0x080c, 0x7e94, 0x00ce, 0x04f0, 0x6800,
++      0xa086, 0x000f, 0x01c8, 0x8fff, 0x090c, 0x1519, 0x6820, 0xd0dc,
++      0x1198, 0x6800, 0xa086, 0x0004, 0x1198, 0x784c, 0xd0ac, 0x0180,
++      0x784c, 0xc0dc, 0xc0f4, 0x784e, 0x7850, 0xc0f4, 0xc0fc, 0x7852,
++      0x2001, 0x0001, 0x682e, 0x00e0, 0x2001, 0x0007, 0x682e, 0x00c0,
++      0x784c, 0xd0b4, 0x1130, 0xd0ac, 0x0db8, 0x784c, 0xd0f4, 0x1da0,
++      0x0c38, 0xd2ec, 0x1d88, 0x7024, 0xa306, 0x1118, 0x7020, 0xa406,
++      0x0d58, 0x7020, 0x6836, 0x7024, 0x683a, 0x2001, 0x0005, 0x682e,
++      0x080c, 0xaf9a, 0x080c, 0x7e94, 0x0010, 0x080c, 0x95e3, 0x004e,
++      0x003e, 0x002e, 0x0005, 0x00e6, 0x00d6, 0x0026, 0x6034, 0x2068,
++      0x6a1c, 0xa286, 0x0007, 0x0904, 0x99b1, 0xa286, 0x0002, 0x0904,
++      0x99b1, 0xa286, 0x0000, 0x0904, 0x99b1, 0x6808, 0x6338, 0xa306,
++      0x1904, 0x99b1, 0x2071, 0xcc8c, 0xa186, 0x0015, 0x05e0, 0xa18e,
++      0x0016, 0x1190, 0x6030, 0xa084, 0x00ff, 0xa086, 0x0001, 0x1160,
++      0x700c, 0xa086, 0x2a00, 0x1140, 0x6034, 0xa080, 0x0008, 0x200c,
++      0xc1dd, 0xc1f5, 0x2102, 0x0438, 0x00c6, 0x6034, 0x2060, 0x6104,
++      0xa186, 0x004b, 0x01a0, 0xa186, 0x004c, 0x0188, 0xa186, 0x004d,
++      0x0170, 0xa186, 0x004e, 0x0158, 0xa186, 0x0052, 0x0140, 0x6010,
++      0x2068, 0x080c, 0xac91, 0x090c, 0x1519, 0x6853, 0x0003, 0x6007,
++      0x0085, 0x6003, 0x000b, 0x601f, 0x0002, 0x080c, 0x7999, 0x080c,
++      0x7e94, 0x00ce, 0x0030, 0x6034, 0x2070, 0x2001, 0xc8ff, 0x2004,
++      0x703e, 0x080c, 0x95e3, 0x002e, 0x00de, 0x00ee, 0x0005, 0x00d6,
++      0x20a9, 0x000e, 0x2e98, 0x6010, 0x20a0, 0x53a3, 0xa1b6, 0x0015,
++      0x1558, 0x6018, 0x2068, 0x0156, 0x0036, 0x0026, 0xae90, 0x000c,
++      0xa290, 0x0004, 0x20a9, 0x0004, 0xad98, 0x000a, 0x080c, 0xa103,
++      0x002e, 0x003e, 0x015e, 0x11d8, 0x0156, 0x0036, 0x0026, 0xae90,
++      0x000c, 0xa290, 0x0008, 0x20a9, 0x0004, 0xad98, 0x0006, 0x080c,
++      0xa103, 0x002e, 0x003e, 0x015e, 0x1150, 0x7038, 0x680a, 0x703c,
++      0x680e, 0x6800, 0xc08d, 0x6802, 0x00de, 0x0804, 0x9767, 0x080c,
++      0x2e46, 0x00c6, 0x080c, 0x958d, 0x2f00, 0x601a, 0x6013, 0x0000,
++      0x601f, 0x0001, 0x6007, 0x0001, 0x6003, 0x0001, 0x2001, 0x0007,
++      0x080c, 0x5291, 0x080c, 0x52be, 0x080c, 0x79df, 0x080c, 0x7e94,
++      0x00ce, 0x0c10, 0x2100, 0xa1b2, 0x0080, 0x1a0c, 0x1519, 0xa1b2,
++      0x0040, 0x1a04, 0x9a6e, 0x0002, 0x9a62, 0x9a56, 0x9a62, 0x9a62,
++      0x9a62, 0x9a62, 0x9a54, 0x9a54, 0x9a54, 0x9a54, 0x9a54, 0x9a54,
++      0x9a54, 0x9a54, 0x9a54, 0x9a54, 0x9a54, 0x9a54, 0x9a54, 0x9a54,
++      0x9a54, 0x9a54, 0x9a54, 0x9a54, 0x9a54, 0x9a54, 0x9a54, 0x9a54,
++      0x9a54, 0x9a54, 0x9a54, 0x9a62, 0x9a54, 0x9a62, 0x9a62, 0x9a54,
++      0x9a54, 0x9a54, 0x9a54, 0x9a54, 0x9a62, 0x9a54, 0x9a54, 0x9a54,
++      0x9a54, 0x9a54, 0x9a54, 0x9a54, 0x9a54, 0x9a54, 0x9a62, 0x9a62,
++      0x9a54, 0x9a54, 0x9a54, 0x9a54, 0x9a54, 0x9a54, 0x9a54, 0x9a54,
++      0x9a54, 0x9a62, 0x9a54, 0x9a54, 0x080c, 0x1519, 0x6003, 0x0001,
++      0x6106, 0x080c, 0x79df, 0x0126, 0x2091, 0x8000, 0x080c, 0x7e94,
++      0x012e, 0x0005, 0x6003, 0x0001, 0x6106, 0x080c, 0x79df, 0x0126,
++      0x2091, 0x8000, 0x080c, 0x7e94, 0x012e, 0x0005, 0x2600, 0x0002,
++      0x9a62, 0x9a62, 0x9a76, 0x9a62, 0x9a62, 0x9a76, 0x080c, 0x1519,
++      0x6004, 0xa0b2, 0x0080, 0x1a0c, 0x1519, 0xa1b6, 0x0013, 0x0904,
++      0x9b28, 0xa1b6, 0x0027, 0x1904, 0x9aee, 0x080c, 0x7db1, 0x6004,
++      0x080c, 0xae7e, 0x0190, 0x080c, 0xae8f, 0x0904, 0x9ae8, 0xa08e,
++      0x0021, 0x0904, 0x9aeb, 0xa08e, 0x0022, 0x0904, 0x9ae8, 0xa08e,
++      0x003d, 0x0904, 0x9aeb, 0x0804, 0x9ae1, 0x080c, 0x2e6c, 0x2001,
++      0x0007, 0x080c, 0x5291, 0x6018, 0xa080, 0x0028, 0x200c, 0x080c,
++      0x9c09, 0xa186, 0x007e, 0x1148, 0x2001, 0xc635, 0x2014, 0xc285,
++      0x080c, 0x5f22, 0x1108, 0xc2ad, 0x2202, 0x0016, 0x0026, 0x0036,
++      0x2110, 0x0026, 0x2019, 0x0028, 0x080c, 0x9132, 0x002e, 0x080c,
++      0xc4e4, 0x003e, 0x002e, 0x001e, 0x0016, 0x0026, 0x0036, 0x2110,
++      0x2019, 0x0028, 0x080c, 0x7b16, 0x0076, 0x2039, 0x0000, 0x080c,
++      0x7a0e, 0x00c6, 0x6018, 0xa065, 0x0110, 0x080c, 0x553e, 0x00ce,
++      0x2c08, 0x080c, 0xbef7, 0x007e, 0x003e, 0x002e, 0x001e, 0x080c,
++      0x5300, 0x080c, 0xb056, 0x080c, 0x95e3, 0x080c, 0x7e94, 0x0005,
++      0x080c, 0x9c09, 0x0cb0, 0x080c, 0x9c37, 0x0c98, 0xa186, 0x0014,
++      0x1db0, 0x080c, 0x7db1, 0x080c, 0x2e46, 0x080c, 0xae7e, 0x1188,
++      0x080c, 0x2e6c, 0x6018, 0xa080, 0x0028, 0x200c, 0x080c, 0x9c09,
++      0xa186, 0x007e, 0x1128, 0x2001, 0xc635, 0x200c, 0xc185, 0x2102,
++      0x08c0, 0x080c, 0xae8f, 0x1118, 0x080c, 0x9c09, 0x0890, 0x6004,
++      0xa08e, 0x0032, 0x1158, 0x00e6, 0x00f6, 0x2071, 0xc6a2, 0x2079,
++      0x0000, 0x080c, 0x3179, 0x00fe, 0x00ee, 0x0818, 0x6004, 0xa08e,
++      0x0021, 0x0d50, 0xa08e, 0x0022, 0x090c, 0x9c09, 0x0804, 0x9ae1,
++      0xa0b2, 0x0040, 0x1a04, 0x9beb, 0x2008, 0x0002, 0x9b70, 0x9b71,
++      0x9b74, 0x9b77, 0x9b7a, 0x9b7d, 0x9b6e, 0x9b6e, 0x9b6e, 0x9b6e,
++      0x9b6e, 0x9b6e, 0x9b6e, 0x9b6e, 0x9b6e, 0x9b6e, 0x9b6e, 0x9b6e,
++      0x9b6e, 0x9b6e, 0x9b6e, 0x9b6e, 0x9b6e, 0x9b6e, 0x9b6e, 0x9b6e,
++      0x9b6e, 0x9b6e, 0x9b6e, 0x9b6e, 0x9b80, 0x9b8f, 0x9b6e, 0x9b91,
++      0x9b8f, 0x9b6e, 0x9b6e, 0x9b6e, 0x9b6e, 0x9b6e, 0x9b8f, 0x9b8f,
++      0x9b6e, 0x9b6e, 0x9b6e, 0x9b6e, 0x9b6e, 0x9b6e, 0x9b6e, 0x9b6e,
++      0x9bcb, 0x9b8f, 0x9b6e, 0x9b8b, 0x9b6e, 0x9b6e, 0x9b6e, 0x9b8c,
++      0x9b6e, 0x9b6e, 0x9b6e, 0x9b8f, 0x9bc2, 0x9b6e, 0x080c, 0x1519,
++      0x00f0, 0x2001, 0x000b, 0x0460, 0x2001, 0x0003, 0x0448, 0x2001,
++      0x0005, 0x0430, 0x2001, 0x0001, 0x0418, 0x2001, 0x0009, 0x0400,
++      0x080c, 0x7db1, 0x6003, 0x0005, 0x2001, 0xc8ff, 0x2004, 0x603e,
++      0x080c, 0x7e94, 0x00a0, 0x0018, 0x0010, 0x080c, 0x5291, 0x0804,
++      0x9bdc, 0x080c, 0x7db1, 0x2001, 0xc8fd, 0x2004, 0x6016, 0x2001,
++      0xc8ff, 0x2004, 0x603e, 0x6003, 0x0004, 0x080c, 0x7e94, 0x0005,
++      0x080c, 0x5291, 0x080c, 0x7db1, 0x6003, 0x0002, 0x2001, 0xc8ff,
++      0x2004, 0x603e, 0x0036, 0x2019, 0xc65d, 0x2304, 0xa084, 0xff00,
++      0x1120, 0x2001, 0xc8fd, 0x201c, 0x0040, 0x8007, 0xa09a, 0x0004,
++      0x0ec0, 0x8003, 0x801b, 0x831b, 0xa318, 0x6316, 0x003e, 0x080c,
++      0x7e94, 0x08e8, 0x080c, 0x7db1, 0x080c, 0xb056, 0x080c, 0x95e3,
++      0x080c, 0x7e94, 0x08a0, 0x00e6, 0x00f6, 0x2071, 0xc6a2, 0x2079,
++      0x0000, 0x080c, 0x3179, 0x00fe, 0x00ee, 0x080c, 0x7db1, 0x080c,
++      0x95e3, 0x080c, 0x7e94, 0x0818, 0x080c, 0x7db1, 0x2001, 0xc8ff,
++      0x2004, 0x603e, 0x6003, 0x0002, 0x2001, 0xc8fd, 0x2004, 0x6016,
++      0x080c, 0x7e94, 0x0005, 0x2600, 0x2008, 0x0002, 0x9bf6, 0x9bdc,
++      0x9bf4, 0x9bdc, 0x9bdc, 0x9bf4, 0x080c, 0x1519, 0x080c, 0x7db1,
++      0x00d6, 0x6010, 0x2068, 0x080c, 0x768f, 0x1118, 0x080c, 0x1619,
++      0x0010, 0x080c, 0x580a, 0x00de, 0x080c, 0x95e3, 0x080c, 0x7e94,
++      0x0005, 0x00e6, 0x0026, 0x0016, 0x080c, 0xac91, 0x0508, 0x6010,
++      0x2070, 0x7034, 0xa086, 0x0139, 0x1148, 0x2001, 0x0030, 0x2009,
++      0x0000, 0x2011, 0x4005, 0x080c, 0xb10d, 0x0090, 0x7038, 0xd0fc,
++      0x0178, 0x7007, 0x0000, 0x0016, 0x6004, 0xa08e, 0x0021, 0x0160,
++      0xa08e, 0x003d, 0x0148, 0x001e, 0x7037, 0x0103, 0x7033, 0x0100,
++      0x001e, 0x002e, 0x00ee, 0x0005, 0x001e, 0x0009, 0x0cc8, 0x00e6,
++      0xacf0, 0x0004, 0x2e74, 0x7000, 0x2070, 0x7037, 0x0103, 0x7023,
++      0x8001, 0x00ee, 0x0005, 0x00d6, 0x6618, 0x2668, 0x6804, 0xa084,
++      0x00ff, 0x00de, 0xa0b2, 0x000c, 0x1a0c, 0x1519, 0x6604, 0xa6b6,
++      0x0043, 0x1120, 0x080c, 0xb0c9, 0x0804, 0x9cb0, 0x6604, 0xa6b6,
++      0x0033, 0x1120, 0x080c, 0xb079, 0x0804, 0x9cb0, 0x6604, 0xa6b6,
++      0x0028, 0x1120, 0x080c, 0xaebf, 0x0804, 0x9cb0, 0x6604, 0xa6b6,
++      0x0029, 0x1120, 0x080c, 0xaed6, 0x0804, 0x9cb0, 0x6604, 0xa6b6,
++      0x001f, 0x1118, 0x080c, 0x974d, 0x04d8, 0x6604, 0xa6b6, 0x0000,
++      0x1118, 0x080c, 0x99b7, 0x04a0, 0x6604, 0xa6b6, 0x0022, 0x1118,
++      0x080c, 0x9775, 0x0468, 0x6604, 0xa6b6, 0x0035, 0x1118, 0x080c,
++      0x97f2, 0x0430, 0x6604, 0xa6b6, 0x0039, 0x1118, 0x080c, 0x9953,
++      0x00f8, 0x6604, 0xa6b6, 0x003d, 0x1118, 0x080c, 0x978f, 0x00c0,
++      0x6604, 0xa6b6, 0x0044, 0x1118, 0x080c, 0x97af, 0x0088, 0x6604,
++      0xa6b6, 0x0041, 0x1118, 0x080c, 0x97dc, 0x0050, 0xa1b6, 0x0015,
++      0x1110, 0x0053, 0x0028, 0xa1b6, 0x0016, 0x1118, 0x0804, 0x9e93,
++      0x0005, 0x080c, 0x962a, 0x0ce0, 0x9cda, 0x9cdd, 0x9cda, 0x9d21,
++      0x9cda, 0x9e1a, 0x9ea1, 0x9cda, 0x9cda, 0x9e6b, 0x9cda, 0x9e81,
++      0xa1b6, 0x0048, 0x0140, 0x20e1, 0x0005, 0x3d18, 0x3e20, 0x2c10,
++      0x080c, 0x1870, 0x0005, 0x00e6, 0xacf0, 0x0004, 0x2e74, 0x7000,
++      0x2070, 0x7037, 0x0103, 0x00ee, 0x080c, 0x95e3, 0x0005, 0x080c,
++      0x95e3, 0x0005, 0xe000, 0xe000, 0x0005, 0x00e6, 0x2071, 0xc600,
++      0x7084, 0xa086, 0x0074, 0x1530, 0x080c, 0xbece, 0x11b0, 0x00d6,
++      0x6018, 0x2068, 0x7030, 0xd08c, 0x0128, 0x6800, 0xd0bc, 0x0110,
++      0xc0c5, 0x6802, 0x00e9, 0x00de, 0x2001, 0x0006, 0x080c, 0x5291,
++      0x080c, 0x2e6c, 0x080c, 0x95e3, 0x0088, 0x2001, 0x000a, 0x080c,
++      0x5291, 0x080c, 0x2e6c, 0x6003, 0x0001, 0x6007, 0x0001, 0x080c,
++      0x79df, 0x0020, 0x2001, 0x0001, 0x080c, 0x9df5, 0x00ee, 0x0005,
++      0x6800, 0xd084, 0x0168, 0x2001, 0x0000, 0x080c, 0x527f, 0x2069,
++      0xc652, 0x6804, 0xd0a4, 0x0120, 0x2001, 0x0006, 0x080c, 0x52be,
++      0x0005, 0x00d6, 0x2011, 0xc621, 0x2204, 0xa086, 0x0074, 0x1904,
++      0x9df0, 0x6018, 0x2068, 0x6aa0, 0xa286, 0x007e, 0x1120, 0x080c,
++      0x9fc3, 0x0804, 0x9d8f, 0x080c, 0x9fb9, 0x6018, 0x2068, 0xa080,
++      0x0028, 0x2014, 0xa286, 0x0080, 0x11c0, 0x6813, 0x00ff, 0x6817,
++      0xfffc, 0x6010, 0xa005, 0x0138, 0x2068, 0x6807, 0x0000, 0x6837,
++      0x0103, 0x6833, 0x0200, 0x2001, 0x0006, 0x080c, 0x5291, 0x080c,
++      0x2e6c, 0x080c, 0x95e3, 0x0804, 0x9df3, 0x00e6, 0x2071, 0xc635,
++      0x2e04, 0xd09c, 0x0188, 0x2071, 0xcc80, 0x7108, 0x720c, 0xa18c,
++      0x00ff, 0x1118, 0xa284, 0xff00, 0x0138, 0x6018, 0x2070, 0x70a0,
++      0xd0bc, 0x1110, 0x7112, 0x7216, 0x00ee, 0x6010, 0xa005, 0x0198,
++      0x2068, 0x6838, 0xd0f4, 0x0178, 0x6834, 0xa084, 0x00ff, 0xa086,
++      0x0039, 0x1958, 0x2001, 0x0000, 0x2009, 0x0000, 0x2011, 0x4000,
++      0x080c, 0xb10d, 0x0840, 0x2001, 0x0004, 0x080c, 0x5291, 0x6003,
++      0x0001, 0x6007, 0x0003, 0x080c, 0x79df, 0x0804, 0x9df3, 0x685c,
++      0xd0e4, 0x01d8, 0x080c, 0xb009, 0x080c, 0x5f22, 0x0118, 0xd0dc,
++      0x1904, 0x9d4b, 0x2011, 0xc635, 0x2204, 0xc0ad, 0x2012, 0x2001,
++      0xc8d6, 0x2004, 0x00f6, 0x2079, 0x0100, 0x78e3, 0x0000, 0x080c,
++      0x2a1c, 0x78e2, 0x00fe, 0x0804, 0x9d4b, 0x080c, 0xb03f, 0x2011,
++      0xc635, 0x2204, 0xc0a5, 0x2012, 0x0006, 0x080c, 0xc023, 0x000e,
++      0x1904, 0x9d4b, 0xc0b5, 0x2012, 0x2001, 0x0006, 0x080c, 0x5291,
++      0x2001, 0x0000, 0x080c, 0x527f, 0x00c6, 0x2009, 0x00ef, 0x00f6,
++      0x2079, 0x0100, 0x79ea, 0x7932, 0x7936, 0x00fe, 0x080c, 0x29f1,
++      0x00f6, 0x2079, 0xc600, 0x7976, 0x2100, 0x2009, 0x0000, 0x080c,
++      0x29c7, 0x7952, 0x00fe, 0x8108, 0x080c, 0x52e1, 0x2c00, 0x00ce,
++      0x1904, 0x9d4b, 0x601a, 0x2001, 0x0002, 0x080c, 0x5291, 0x601f,
++      0x0001, 0x6003, 0x0001, 0x6007, 0x0002, 0x080c, 0x79df, 0x0018,
++      0x2001, 0x0001, 0x0011, 0x00de, 0x0005, 0x0066, 0x2030, 0xa005,
++      0x0170, 0x2001, 0x0007, 0x080c, 0x5291, 0x2001, 0xc600, 0x2004,
++      0xa086, 0x0003, 0x1120, 0x2001, 0x0007, 0x080c, 0x52be, 0x2600,
++      0xa005, 0x1150, 0x6010, 0xa080, 0x000e, 0x2004, 0xd0fc, 0x1120,
++      0x2011, 0x8014, 0x080c, 0x407d, 0x080c, 0x2e6c, 0x080c, 0x95e3,
++      0x006e, 0x0005, 0x00e6, 0x0026, 0x0016, 0x2071, 0xc600, 0x7084,
++      0xa086, 0x0014, 0x15f0, 0x7000, 0xa086, 0x0003, 0x1128, 0x6010,
++      0xa005, 0x1110, 0x080c, 0x40ef, 0x00d6, 0x6018, 0x2068, 0x080c,
++      0x53df, 0x080c, 0x9d10, 0x00de, 0x080c, 0xa072, 0x1550, 0x00d6,
++      0x6018, 0x2068, 0x6890, 0x00de, 0xa005, 0x0518, 0x2001, 0x0006,
++      0x080c, 0x5291, 0x00e6, 0x6010, 0xa075, 0x01a8, 0x7034, 0xa084,
++      0x00ff, 0xa086, 0x0039, 0x1148, 0x2001, 0x0000, 0x2009, 0x0000,
++      0x2011, 0x4000, 0x080c, 0xb10d, 0x0030, 0x7007, 0x0000, 0x7037,
++      0x0103, 0x7033, 0x0200, 0x00ee, 0x080c, 0x2e6c, 0x080c, 0x95e3,
++      0x0030, 0x080c, 0x9c09, 0x2001, 0x0000, 0x080c, 0x9df5, 0x001e,
++      0x002e, 0x00ee, 0x0005, 0x2011, 0xc621, 0x2204, 0xa086, 0x0014,
++      0x1158, 0x2001, 0x0002, 0x080c, 0x5291, 0x6003, 0x0001, 0x6007,
++      0x0001, 0x080c, 0x79df, 0x0020, 0x2001, 0x0001, 0x080c, 0x9df5,
++      0x0005, 0x2011, 0xc621, 0x2204, 0xa086, 0x0004, 0x1138, 0x2001,
++      0x0007, 0x080c, 0x5291, 0x080c, 0x95e3, 0x0020, 0x2001, 0x0001,
++      0x080c, 0x9df5, 0x0005, 0x000b, 0x0005, 0x9cda, 0x9eac, 0x9cda,
++      0x9ee2, 0x9cda, 0x9f6f, 0x9ea1, 0x9cd7, 0x9cda, 0x9f84, 0x9cda,
++      0x9f96, 0x6604, 0xa686, 0x0003, 0x0904, 0x9e1a, 0xa6b6, 0x001e,
++      0x1110, 0x080c, 0x95e3, 0x0005, 0x00d6, 0x00c6, 0x080c, 0x9fa8,
++      0x1178, 0x2001, 0x0000, 0x080c, 0x527f, 0x2001, 0x0002, 0x080c,
++      0x5291, 0x6003, 0x0001, 0x6007, 0x0002, 0x080c, 0x79df, 0x00f8,
++      0x2009, 0xcc8e, 0x2104, 0xa086, 0x0009, 0x1160, 0x6018, 0x2068,
++      0x6840, 0xa084, 0x00ff, 0xa005, 0x0170, 0x8001, 0x6842, 0x6017,
++      0x000a, 0x0068, 0x2009, 0xcc8f, 0x2104, 0xa084, 0xff00, 0xa086,
++      0x1900, 0x1108, 0x08d0, 0x2001, 0x0001, 0x080c, 0x9df5, 0x00ce,
++      0x00de, 0x0005, 0x0026, 0x2011, 0x0000, 0x080c, 0x9fb6, 0x00d6,
++      0x2069, 0xc8e5, 0x2d04, 0xa005, 0x0168, 0x6018, 0x2068, 0x68a0,
++      0xa086, 0x007e, 0x1138, 0x2069, 0xc61d, 0x2d04, 0x8000, 0x206a,
++      0x00de, 0x0010, 0x00de, 0x0078, 0x2001, 0x0000, 0x080c, 0x527f,
++      0x2001, 0x0002, 0x080c, 0x5291, 0x6003, 0x0001, 0x6007, 0x0002,
++      0x080c, 0x79df, 0x0490, 0x00d6, 0x6010, 0x2068, 0x080c, 0xac91,
++      0x00de, 0x0108, 0x6a34, 0x080c, 0x9c09, 0x2009, 0xcc8e, 0x2134,
++      0xa6b4, 0x00ff, 0xa686, 0x0005, 0x0510, 0xa686, 0x000b, 0x01c8,
++      0x2009, 0xcc8f, 0x2104, 0xa084, 0xff00, 0x1118, 0xa686, 0x0009,
++      0x01b0, 0xa086, 0x1900, 0x1168, 0xa686, 0x0009, 0x0180, 0x2001,
++      0x0004, 0x080c, 0x5291, 0x2001, 0x0028, 0x6016, 0x6007, 0x004b,
++      0x0020, 0x2001, 0x0001, 0x080c, 0x9df5, 0x002e, 0x0005, 0x00d6,
++      0xa286, 0x0139, 0x0160, 0x6010, 0x2068, 0x080c, 0xac91, 0x0148,
++      0x6834, 0xa086, 0x0139, 0x0118, 0x6838, 0xd0fc, 0x0110, 0x00de,
++      0x0c40, 0x6018, 0x2068, 0x6840, 0xa084, 0x00ff, 0xa005, 0x0140,
++      0x8001, 0x6842, 0x6017, 0x000a, 0x6007, 0x0016, 0x00de, 0x08e8,
++      0x68a0, 0xa086, 0x007e, 0x1138, 0x00e6, 0x2071, 0xc600, 0x080c,
++      0x4f02, 0x00ee, 0x0010, 0x080c, 0x2e46, 0x00de, 0x0850, 0x080c,
++      0x9fb6, 0x1158, 0x2001, 0x0004, 0x080c, 0x5291, 0x6003, 0x0001,
++      0x6007, 0x0003, 0x080c, 0x79df, 0x0030, 0x080c, 0x9c09, 0x2001,
++      0x0000, 0x080c, 0x9df5, 0x0005, 0x0489, 0x1158, 0x2001, 0x0008,
++      0x080c, 0x5291, 0x6003, 0x0001, 0x6007, 0x0005, 0x080c, 0x79df,
++      0x0020, 0x2001, 0x0001, 0x080c, 0x9df5, 0x0005, 0x00f9, 0x1158,
++      0x2001, 0x000a, 0x080c, 0x5291, 0x6003, 0x0001, 0x6007, 0x0001,
++      0x080c, 0x79df, 0x0020, 0x2001, 0x0001, 0x080c, 0x9df5, 0x0005,
++      0x2009, 0xcc8e, 0x2104, 0xa086, 0x0003, 0x1138, 0x2009, 0xcc8f,
++      0x2104, 0xa084, 0xff00, 0xa086, 0x2a00, 0x0005, 0xa085, 0x0001,
++      0x0005, 0x00c6, 0x0016, 0xac88, 0x0006, 0x2164, 0x080c, 0x534c,
++      0x001e, 0x00ce, 0x0005, 0x00f6, 0x00e6, 0x00d6, 0x0036, 0x0016,
++      0x6018, 0x2068, 0x2071, 0xc635, 0x2e04, 0xa085, 0x0003, 0x2072,
++      0x080c, 0xa047, 0x0560, 0x2009, 0xc635, 0x2104, 0xc0cd, 0x200a,
++      0x2001, 0xc653, 0x2004, 0xd0a4, 0x0158, 0xa006, 0x2020, 0x2009,
++      0x002a, 0x080c, 0xc190, 0x2001, 0xc60c, 0x200c, 0xc195, 0x2102,
++      0x2019, 0x002a, 0x2009, 0x0001, 0x080c, 0x2e19, 0x2071, 0xc600,
++      0x080c, 0x2c62, 0x00c6, 0x0156, 0x20a9, 0x0081, 0x2009, 0x007f,
++      0x080c, 0x2f41, 0x8108, 0x1f04, 0x9ff8, 0x015e, 0x00ce, 0x080c,
++      0x9fb9, 0x6813, 0x00ff, 0x6817, 0xfffe, 0x2071, 0xcc80, 0x2079,
++      0x0100, 0x2e04, 0xa084, 0x00ff, 0x2069, 0xc61c, 0x206a, 0x78e6,
++      0x0006, 0x8e70, 0x2e04, 0x2069, 0xc61d, 0x206a, 0x78ea, 0x7832,
++      0x7836, 0x2010, 0xa084, 0xff00, 0x001e, 0xa105, 0x2009, 0xc628,
++      0x200a, 0x2200, 0xa084, 0x00ff, 0x2008, 0x080c, 0x29f1, 0x080c,
++      0x5f22, 0x0170, 0x2069, 0xcc8e, 0x2071, 0xc8f9, 0x6810, 0x2072,
++      0x6814, 0x7006, 0x6818, 0x700a, 0x681c, 0x700e, 0x080c, 0xb009,
++      0x0040, 0x2001, 0x0006, 0x080c, 0x5291, 0x080c, 0x2e6c, 0x080c,
++      0x95e3, 0x001e, 0x003e, 0x00de, 0x00ee, 0x00fe, 0x0005, 0x0026,
++      0x0036, 0x00e6, 0x0156, 0x2019, 0xc628, 0x231c, 0x83ff, 0x01e8,
++      0x2071, 0xcc80, 0x2e14, 0xa294, 0x00ff, 0x7004, 0xa084, 0xff00,
++      0xa205, 0xa306, 0x1190, 0x2011, 0xcc96, 0xad98, 0x000a, 0x20a9,
++      0x0004, 0x080c, 0xa103, 0x1148, 0x2011, 0xcc9a, 0xad98, 0x0006,
++      0x20a9, 0x0004, 0x080c, 0xa103, 0x1100, 0x015e, 0x00ee, 0x003e,
++      0x002e, 0x0005, 0x00e6, 0x2071, 0xcc8c, 0x7004, 0xa086, 0x0014,
++      0x11a8, 0x7008, 0xa086, 0x0800, 0x1188, 0x700c, 0xd0ec, 0x0160,
++      0xa084, 0x0f00, 0xa086, 0x0100, 0x1138, 0x7024, 0xd0a4, 0x1110,
++      0xd0ac, 0x0110, 0xa006, 0x0010, 0xa085, 0x0001, 0x00ee, 0x0005,
++      0x00e6, 0x00d6, 0x00c6, 0x0076, 0x0056, 0x0046, 0x0026, 0x0006,
++      0x0126, 0x2091, 0x8000, 0x2029, 0xc930, 0x252c, 0x2021, 0xc936,
++      0x2424, 0x2061, 0xce00, 0x2071, 0xc600, 0x7248, 0x7068, 0xa202,
++      0x16f0, 0x080c, 0xc1b8, 0x05a0, 0x671c, 0xa786, 0x0001, 0x0580,
++      0xa786, 0x0007, 0x0568, 0x2500, 0xac06, 0x0550, 0x2400, 0xac06,
++      0x0538, 0x00c6, 0x6000, 0xa086, 0x0004, 0x1110, 0x080c, 0x1953,
++      0xa786, 0x0008, 0x1148, 0x080c, 0xae8f, 0x1130, 0x00ce, 0x080c,
++      0x9c09, 0x080c, 0xae54, 0x00a0, 0x6010, 0x2068, 0x080c, 0xac91,
++      0x0160, 0xa786, 0x0003, 0x11e8, 0x6837, 0x0103, 0x6b4a, 0x6847,
++      0x0000, 0x080c, 0x580a, 0x080c, 0xae48, 0x080c, 0xae54, 0x00ce,
++      0xace0, 0x0018, 0x705c, 0xac02, 0x1210, 0x0804, 0xa0a5, 0x012e,
++      0x000e, 0x002e, 0x004e, 0x005e, 0x007e, 0x00ce, 0x00de, 0x00ee,
++      0x0005, 0xa786, 0x0006, 0x1118, 0x080c, 0xc141, 0x0c30, 0xa786,
++      0x0009, 0x1128, 0x2009, 0x0106, 0x080c, 0x9613, 0x0c00, 0xa786,
++      0x000a, 0x09a0, 0x0888, 0x220c, 0x2304, 0xa106, 0x1130, 0x8210,
++      0x8318, 0x1f04, 0xa103, 0xa006, 0x0005, 0x2304, 0xa102, 0x0218,
++      0x2001, 0x0001, 0x0010, 0x2001, 0x0000, 0xa18d, 0x0001, 0x0005,
++      0x220c, 0x810f, 0x2304, 0xa106, 0x1130, 0x8210, 0x8318, 0x1f04,
++      0xa118, 0xa006, 0x0005, 0xa18d, 0x0001, 0x0005, 0x6004, 0xa08a,
++      0x0080, 0x1a0c, 0x1519, 0x080c, 0xae7e, 0x0120, 0x080c, 0xae8f,
++      0x0168, 0x0028, 0x080c, 0x2e6c, 0x080c, 0xae8f, 0x0138, 0x080c,
++      0x7db1, 0x080c, 0x95e3, 0x080c, 0x7e94, 0x0005, 0x080c, 0x9c09,
++      0x0cb0, 0xa182, 0x0040, 0x0002, 0xa157, 0xa157, 0xa157, 0xa157,
++      0xa157, 0xa157, 0xa157, 0xa157, 0xa157, 0xa157, 0xa157, 0xa159,
++      0xa159, 0xa159, 0xa159, 0xa157, 0xa157, 0xa157, 0xa159, 0x080c,
++      0x1519, 0x600b, 0xffff, 0x6003, 0x0001, 0x6106, 0x080c, 0x7999,
++      0x0126, 0x2091, 0x8000, 0x080c, 0x7e94, 0x012e, 0x0005, 0xa186,
++      0x0013, 0x1128, 0x6004, 0xa082, 0x0040, 0x0804, 0xa1f3, 0xa186,
++      0x0027, 0x11e8, 0x080c, 0x7db1, 0x080c, 0x2e46, 0x00d6, 0x6110,
++      0x2168, 0x080c, 0xac91, 0x0168, 0x6837, 0x0103, 0x684b, 0x0029,
++      0x6847, 0x0000, 0x694c, 0xc1c5, 0x694e, 0x080c, 0x580a, 0x080c,
++      0xae48, 0x00de, 0x080c, 0x95e3, 0x080c, 0x7e94, 0x0005, 0xa186,
++      0x0014, 0x1120, 0x6004, 0xa082, 0x0040, 0x0428, 0xa186, 0x0046,
++      0x0138, 0xa186, 0x0045, 0x0120, 0xa186, 0x0047, 0x190c, 0x1519,
++      0x2001, 0x0109, 0x2004, 0xd084, 0x0198, 0x0126, 0x2091, 0x2800,
++      0x0006, 0x0016, 0x0026, 0x080c, 0x7873, 0x002e, 0x001e, 0x000e,
++      0x012e, 0xe000, 0x6000, 0xa086, 0x0002, 0x1110, 0x0804, 0xa231,
++      0x080c, 0x962a, 0x0005, 0x0002, 0xa1d1, 0xa1cf, 0xa1cf, 0xa1cf,
++      0xa1cf, 0xa1cf, 0xa1cf, 0xa1cf, 0xa1cf, 0xa1cf, 0xa1cf, 0xa1ec,
++      0xa1ec, 0xa1ec, 0xa1ec, 0xa1cf, 0xa1ec, 0xa1cf, 0xa1ec, 0x080c,
++      0x1519, 0x080c, 0x7db1, 0x00d6, 0x6110, 0x2168, 0x080c, 0xac91,
++      0x0168, 0x6837, 0x0103, 0x684b, 0x0006, 0x6847, 0x0000, 0x6850,
++      0xc0ec, 0x6852, 0x080c, 0x580a, 0x080c, 0xae48, 0x00de, 0x080c,
++      0x95e3, 0x080c, 0x7e94, 0x0005, 0x080c, 0x7db1, 0x080c, 0x95e3,
++      0x080c, 0x7e94, 0x0005, 0x0002, 0xa209, 0xa207, 0xa207, 0xa207,
++      0xa207, 0xa207, 0xa207, 0xa207, 0xa207, 0xa207, 0xa207, 0xa21b,
++      0xa21b, 0xa21b, 0xa21b, 0xa207, 0xa22a, 0xa207, 0xa21b, 0x080c,
++      0x1519, 0x080c, 0x7db1, 0x2001, 0xc8ff, 0x2004, 0x603e, 0x6003,
++      0x0002, 0x080c, 0x7e94, 0x6010, 0xa088, 0x0013, 0x2104, 0xa085,
++      0x0400, 0x200a, 0x0005, 0x080c, 0x7db1, 0x2001, 0xc8fd, 0x2004,
++      0x6016, 0x2001, 0xc8ff, 0x2004, 0x603e, 0x6003, 0x000f, 0x080c,
++      0x7e94, 0x0005, 0x080c, 0x7db1, 0x080c, 0x95e3, 0x080c, 0x7e94,
++      0x0005, 0xa182, 0x0040, 0x0002, 0xa247, 0xa247, 0xa247, 0xa247,
++      0xa247, 0xa249, 0xa32e, 0xa35d, 0xa247, 0xa247, 0xa247, 0xa247,
++      0xa247, 0xa247, 0xa247, 0xa247, 0xa247, 0xa247, 0xa247, 0x080c,
++      0x1519, 0x00e6, 0x00d6, 0x603f, 0x0000, 0x2071, 0xcc80, 0x7124,
++      0x610a, 0x2071, 0xcc8c, 0x6110, 0x2168, 0x7614, 0xa6b4, 0x0fff,
++      0x86ff, 0x0904, 0xa2f7, 0xa68c, 0x0c00, 0x0518, 0x00f6, 0x2c78,
++      0x080c, 0x56c3, 0x00fe, 0x01c8, 0x684c, 0xd0ac, 0x01b0, 0x6020,
++      0xd0dc, 0x1198, 0x6850, 0xd0bc, 0x1180, 0x7318, 0x6814, 0xa306,
++      0x1904, 0xa30a, 0x731c, 0x6810, 0xa31e, 0x0138, 0xd6d4, 0x0904,
++      0xa30a, 0x6b14, 0xa305, 0x1904, 0xa30a, 0x7318, 0x6b62, 0x731c,
++      0x6b5e, 0xa68c, 0x00ff, 0xa186, 0x0002, 0x0518, 0xa186, 0x0028,
++      0x1128, 0x080c, 0xae6d, 0x684b, 0x001c, 0x00e8, 0xd6dc, 0x01a0,
++      0x684b, 0x0015, 0x684c, 0xd0ac, 0x0170, 0x6914, 0x6a10, 0x2100,
++      0xa205, 0x0148, 0x7018, 0xa106, 0x1118, 0x701c, 0xa206, 0x0118,
++      0x6962, 0x6a5e, 0xc6dc, 0x0038, 0xd6d4, 0x0118, 0x684b, 0x0007,
++      0x0010, 0x684b, 0x0000, 0x6837, 0x0103, 0x6e46, 0xa01e, 0xd6c4,
++      0x01f0, 0xa686, 0x0100, 0x1140, 0x2001, 0xcc99, 0x2004, 0xa005,
++      0x1118, 0xc6c4, 0x0804, 0xa258, 0x7328, 0x732c, 0x6b56, 0x83ff,
++      0x0170, 0xa38a, 0x0009, 0x0210, 0x2019, 0x0008, 0x0036, 0x2308,
++      0x2019, 0xcc98, 0xad90, 0x0019, 0x080c, 0xa944, 0x003e, 0xd6cc,
++      0x0904, 0xa31d, 0x7124, 0x695a, 0x81ff, 0x0904, 0xa31d, 0xa192,
++      0x0021, 0x1260, 0x2071, 0xcc98, 0x831c, 0x2300, 0xae18, 0xad90,
++      0x001d, 0x080c, 0xa944, 0x080c, 0xb16e, 0x04b8, 0x6838, 0xd0fc,
++      0x0120, 0x2009, 0x0020, 0x695a, 0x0c68, 0x00f6, 0x2d78, 0x080c,
++      0xa8e9, 0x00fe, 0x080c, 0xb16e, 0x080c, 0xa934, 0x0440, 0x00f6,
++      0x2c78, 0x080c, 0x56c3, 0x00fe, 0x0190, 0x684c, 0xd0ac, 0x0178,
++      0x6020, 0xd0dc, 0x1160, 0x6850, 0xd0bc, 0x1148, 0x6810, 0x6914,
++      0xa105, 0x0128, 0x080c, 0xaf6c, 0x00de, 0x00ee, 0x00f0, 0x684b,
++      0x0000, 0x6837, 0x0103, 0x6e46, 0x684c, 0xd0ac, 0x0130, 0x6810,
++      0x6914, 0xa115, 0x0110, 0x080c, 0xa4ba, 0x080c, 0x580a, 0x6218,
++      0x2268, 0x6a3c, 0x82ff, 0x0110, 0x8211, 0x6a3e, 0x080c, 0xaf3a,
++      0x00de, 0x00ee, 0x1110, 0x080c, 0x95e3, 0x0005, 0x00f6, 0x6003,
++      0x0003, 0x2079, 0xcc8c, 0x7c04, 0x7b00, 0x7e0c, 0x7d08, 0x6010,
++      0x2078, 0x784c, 0xd0ac, 0x0138, 0x6003, 0x0002, 0x00fe, 0x0005,
++      0x2130, 0x2228, 0x0058, 0x2400, 0x797c, 0xa10a, 0x2300, 0x7a80,
++      0xa213, 0x2600, 0xa102, 0x2500, 0xa203, 0x0e90, 0x7c12, 0x7b16,
++      0x7e0a, 0x7d0e, 0x00fe, 0x603f, 0x0000, 0x2c10, 0x080c, 0x2068,
++      0x080c, 0x79fc, 0x080c, 0x7f6e, 0x0005, 0x2001, 0xc8ff, 0x2004,
++      0x603e, 0x6003, 0x0004, 0x6110, 0x20e1, 0x0005, 0x3d18, 0x3e20,
++      0x2c10, 0x080c, 0x1870, 0x0005, 0xa182, 0x0040, 0x0002, 0xa382,
++      0xa382, 0xa382, 0xa382, 0xa382, 0xa384, 0xa417, 0xa382, 0xa382,
++      0xa42d, 0xa491, 0xa382, 0xa382, 0xa382, 0xa382, 0xa4a0, 0xa382,
++      0xa382, 0xa382, 0x080c, 0x1519, 0x0076, 0x00f6, 0x00e6, 0x00d6,
++      0x2071, 0xcc8c, 0x6110, 0x2178, 0x7614, 0xa6b4, 0x0fff, 0x7e46,
++      0x7f4c, 0xc7e5, 0x7f4e, 0x6218, 0x2268, 0x6a3c, 0x82ff, 0x0110,
++      0x8211, 0x6a3e, 0x86ff, 0x0904, 0xa412, 0xa694, 0xff00, 0xa284,
++      0x0c00, 0x0120, 0x7018, 0x7862, 0x701c, 0x785e, 0xa284, 0x0300,
++      0x0904, 0xa412, 0x080c, 0x1602, 0x090c, 0x1519, 0x2d00, 0x784a,
++      0x7f4c, 0xc7cd, 0x7f4e, 0x6837, 0x0103, 0x7838, 0x683a, 0x783c,
++      0x683e, 0x7840, 0x6842, 0x6e46, 0xa68c, 0x0c00, 0x0120, 0x7318,
++      0x6b62, 0x731c, 0x6b5e, 0xa68c, 0x00ff, 0xa186, 0x0002, 0x0180,
++      0xa186, 0x0028, 0x1118, 0x684b, 0x001c, 0x0060, 0xd6dc, 0x0118,
++      0x684b, 0x0015, 0x0038, 0xd6d4, 0x0118, 0x684b, 0x0007, 0x0010,
++      0x684b, 0x0000, 0x6f4e, 0x7850, 0x6852, 0x7854, 0x6856, 0xa01e,
++      0xd6c4, 0x0198, 0x7328, 0x732c, 0x6b56, 0x83ff, 0x0170, 0xa38a,
++      0x0009, 0x0210, 0x2019, 0x0008, 0x0036, 0x2308, 0x2019, 0xcc98,
++      0xad90, 0x0019, 0x080c, 0xa944, 0x003e, 0xd6cc, 0x01d8, 0x7124,
++      0x695a, 0x81ff, 0x01b8, 0xa192, 0x0021, 0x1250, 0x2071, 0xcc98,
++      0x831c, 0x2300, 0xae18, 0xad90, 0x001d, 0x080c, 0xa944, 0x0050,
++      0x7838, 0xd0fc, 0x0120, 0x2009, 0x0020, 0x695a, 0x0c78, 0x2d78,
++      0x080c, 0xa8e9, 0x00de, 0x00ee, 0x00fe, 0x007e, 0x0005, 0x00f6,
++      0x6003, 0x0003, 0x2079, 0xcc8c, 0x7c04, 0x7b00, 0x7e0c, 0x7d08,
++      0x6010, 0x2078, 0x7c12, 0x7b16, 0x7e0a, 0x7d0e, 0x00fe, 0x2c10,
++      0x080c, 0x2068, 0x080c, 0x8bdb, 0x0005, 0x00d6, 0x00f6, 0x2c78,
++      0x080c, 0x56c3, 0x00fe, 0x0120, 0x2001, 0xc8ff, 0x2004, 0x603e,
++      0x6003, 0x0002, 0x080c, 0x7e47, 0x080c, 0x7f6e, 0x6110, 0x2168,
++      0x694c, 0xd1e4, 0x0904, 0xa48f, 0xd1cc, 0x0540, 0x6948, 0x6838,
++      0xd0fc, 0x01e8, 0x0016, 0x684c, 0x0006, 0x6850, 0x0006, 0xad90,
++      0x000d, 0xa198, 0x000d, 0x2009, 0x0020, 0x0156, 0x21a8, 0x2304,
++      0x2012, 0x8318, 0x8210, 0x1f04, 0xa457, 0x015e, 0x000e, 0x6852,
++      0x000e, 0x684e, 0x001e, 0x2168, 0x080c, 0x1629, 0x0418, 0x0016,
++      0x080c, 0x1629, 0x00de, 0x080c, 0xa934, 0x00e0, 0x6837, 0x0103,
++      0x6944, 0xa184, 0x00ff, 0xa0b6, 0x0002, 0x0180, 0xa086, 0x0028,
++      0x1118, 0x684b, 0x001c, 0x0060, 0xd1dc, 0x0118, 0x684b, 0x0015,
++      0x0038, 0xd1d4, 0x0118, 0x684b, 0x0007, 0x0010, 0x684b, 0x0000,
++      0x080c, 0x580a, 0x080c, 0xaf3a, 0x1110, 0x080c, 0x95e3, 0x00de,
++      0x0005, 0x2019, 0x0001, 0x080c, 0x8e79, 0x6003, 0x0002, 0x2001,
++      0xc8ff, 0x2004, 0x603e, 0x080c, 0x7e47, 0x080c, 0x7f6e, 0x0005,
++      0x080c, 0x7e47, 0x080c, 0x2e46, 0x00d6, 0x6110, 0x2168, 0x080c,
++      0xac91, 0x0150, 0x6837, 0x0103, 0x684b, 0x0029, 0x6847, 0x0000,
++      0x080c, 0x580a, 0x080c, 0xae48, 0x00de, 0x080c, 0x95e3, 0x080c,
++      0x7f6e, 0x0005, 0x684b, 0x0015, 0xd1fc, 0x0138, 0x684b, 0x0007,
++      0x8002, 0x8000, 0x810a, 0xa189, 0x0000, 0x6962, 0x685e, 0x0005,
++      0xa182, 0x0040, 0x0002, 0xa4de, 0xa4de, 0xa4de, 0xa4de, 0xa4de,
++      0xa4e0, 0xa4de, 0xa59b, 0xa5a7, 0xa4de, 0xa4de, 0xa4de, 0xa4de,
++      0xa4de, 0xa4de, 0xa4de, 0xa4de, 0xa4de, 0xa4de, 0x080c, 0x1519,
++      0x0076, 0x00f6, 0x00e6, 0x00d6, 0x2071, 0xcc8c, 0x6110, 0x2178,
++      0x7614, 0xa6b4, 0x0fff, 0x00f6, 0x2c78, 0x080c, 0x56c3, 0x00fe,
++      0x0150, 0xa684, 0x00ff, 0x1138, 0x6020, 0xd0f4, 0x0120, 0x080c,
++      0xaf6c, 0x0804, 0xa596, 0x7e46, 0x7f4c, 0xc7e5, 0x7f4e, 0x6218,
++      0x2268, 0x6a3c, 0x82ff, 0x0110, 0x8211, 0x6a3e, 0x86ff, 0x0904,
++      0xa58c, 0xa694, 0xff00, 0xa284, 0x0c00, 0x0120, 0x7018, 0x7862,
++      0x701c, 0x785e, 0xa284, 0x0300, 0x0904, 0xa58a, 0xa686, 0x0100,
++      0x1140, 0x2001, 0xcc99, 0x2004, 0xa005, 0x1118, 0xc6c4, 0x7e46,
++      0x0c28, 0x080c, 0x1602, 0x090c, 0x1519, 0x2d00, 0x784a, 0x7f4c,
++      0xa7bd, 0x0200, 0x7f4e, 0x6837, 0x0103, 0x7838, 0x683a, 0x783c,
++      0x683e, 0x7840, 0x6842, 0x6e46, 0xa68c, 0x0c00, 0x0120, 0x7318,
++      0x6b62, 0x731c, 0x6b5e, 0xa68c, 0x00ff, 0xa186, 0x0002, 0x0180,
++      0xa186, 0x0028, 0x1118, 0x684b, 0x001c, 0x0060, 0xd6dc, 0x0118,
++      0x684b, 0x0015, 0x0038, 0xd6d4, 0x0118, 0x684b, 0x0007, 0x0010,
++      0x684b, 0x0000, 0x6f4e, 0x7850, 0x6852, 0x7854, 0x6856, 0xa01e,
++      0xd6c4, 0x0198, 0x7328, 0x732c, 0x6b56, 0x83ff, 0x0170, 0xa38a,
++      0x0009, 0x0210, 0x2019, 0x0008, 0x0036, 0x2308, 0x2019, 0xcc98,
++      0xad90, 0x0019, 0x080c, 0xa944, 0x003e, 0xd6cc, 0x01d8, 0x7124,
++      0x695a, 0x81ff, 0x01b8, 0xa192, 0x0021, 0x1250, 0x2071, 0xcc98,
++      0x831c, 0x2300, 0xae18, 0xad90, 0x001d, 0x080c, 0xa944, 0x0050,
++      0x7838, 0xd0fc, 0x0120, 0x2009, 0x0020, 0x695a, 0x0c78, 0x2d78,
++      0x080c, 0xa8e9, 0xd6dc, 0x1110, 0xa006, 0x0030, 0x2001, 0x0001,
++      0x2071, 0xcc8c, 0x7218, 0x731c, 0x080c, 0x18b8, 0x00de, 0x00ee,
++      0x00fe, 0x007e, 0x0005, 0x2001, 0xc8ff, 0x2004, 0x603e, 0x20e1,
++      0x0005, 0x3d18, 0x3e20, 0x2c10, 0x080c, 0x1870, 0x0005, 0x2001,
++      0xc8ff, 0x2004, 0x603e, 0x00d6, 0x6003, 0x0002, 0x6110, 0x2168,
++      0x694c, 0xd1e4, 0x0904, 0xa6b2, 0x603f, 0x0000, 0x00f6, 0x2c78,
++      0x080c, 0x56c3, 0x00fe, 0x0560, 0x6814, 0x6910, 0xa115, 0x0540,
++      0x6a60, 0xa206, 0x1118, 0x685c, 0xa106, 0x0510, 0x684c, 0xc0e4,
++      0x684e, 0x6847, 0x0000, 0x6863, 0x0000, 0x685f, 0x0000, 0x6020,
++      0xd0f4, 0x1158, 0x697c, 0x6810, 0xa102, 0x603a, 0x6980, 0x6814,
++      0xa103, 0x6036, 0x6020, 0xc0f5, 0x6022, 0x00d6, 0x6018, 0x2068,
++      0x683c, 0x8000, 0x683e, 0x00de, 0x080c, 0xaf6c, 0x0804, 0xa6b2,
++      0x694c, 0xd1cc, 0x0904, 0xa682, 0x6948, 0x6838, 0xd0fc, 0x0904,
++      0xa645, 0x0016, 0x684c, 0x0006, 0x6850, 0x0006, 0x00f6, 0x2178,
++      0x7944, 0xa184, 0x00ff, 0xa0b6, 0x0002, 0x01e0, 0xa086, 0x0028,
++      0x1128, 0x684b, 0x001c, 0x784b, 0x001c, 0x00e8, 0xd1dc, 0x0158,
++      0x684b, 0x0015, 0x784b, 0x0015, 0x080c, 0xb0f6, 0x0118, 0x7944,
++      0xc1dc, 0x7946, 0x0080, 0xd1d4, 0x0128, 0x684b, 0x0007, 0x784b,
++      0x0007, 0x0048, 0x684c, 0xd0ac, 0x0130, 0x6810, 0x6914, 0xa115,
++      0x0110, 0x080c, 0xa4ba, 0x6848, 0x784a, 0x6860, 0x7862, 0x685c,
++      0x785e, 0xad90, 0x000d, 0xaf98, 0x000d, 0x2009, 0x0020, 0x0156,
++      0x21a8, 0x2304, 0x2012, 0x8318, 0x8210, 0x1f04, 0xa631, 0x015e,
++      0x00fe, 0x000e, 0x6852, 0x000e, 0x684e, 0x080c, 0xb16e, 0x001e,
++      0x2168, 0x080c, 0x1629, 0x0804, 0xa6ad, 0x0016, 0x00f6, 0x2178,
++      0x7944, 0xa184, 0x00ff, 0xa0b6, 0x0002, 0x01e0, 0xa086, 0x0028,
++      0x1128, 0x684b, 0x001c, 0x784b, 0x001c, 0x00e8, 0xd1dc, 0x0158,
++      0x684b, 0x0015, 0x784b, 0x0015, 0x080c, 0xb0f6, 0x0118, 0x7944,
++      0xc1dc, 0x7946, 0x0080, 0xd1d4, 0x0128, 0x684b, 0x0007, 0x784b,
++      0x0007, 0x0048, 0x684c, 0xd0ac, 0x0130, 0x6810, 0x6914, 0xa115,
++      0x0110, 0x080c, 0xa4ba, 0x6860, 0x7862, 0x685c, 0x785e, 0x684c,
++      0x784e, 0x00fe, 0x080c, 0x1629, 0x00de, 0x080c, 0xb16e, 0x080c,
++      0xa934, 0x0458, 0x6837, 0x0103, 0x6944, 0xa184, 0x00ff, 0xa0b6,
++      0x0002, 0x01b0, 0xa086, 0x0028, 0x1118, 0x684b, 0x001c, 0x00d8,
++      0xd1dc, 0x0148, 0x684b, 0x0015, 0x080c, 0xb0f6, 0x0118, 0x6944,
++      0xc1dc, 0x6946, 0x0080, 0xd1d4, 0x0118, 0x684b, 0x0007, 0x0058,
++      0x684b, 0x0000, 0x684c, 0xd0ac, 0x0130, 0x6810, 0x6914, 0xa115,
++      0x0110, 0x080c, 0xa4ba, 0x080c, 0x580a, 0x080c, 0xaf3a, 0x1110,
++      0x080c, 0x95e3, 0x00de, 0x0005, 0x080c, 0x7db1, 0x0010, 0x080c,
++      0x7e47, 0x080c, 0xac91, 0x01c0, 0x00d6, 0x6110, 0x2168, 0x6837,
++      0x0103, 0x2009, 0xc60c, 0x210c, 0xd18c, 0x11c0, 0xd184, 0x1198,
++      0x6108, 0x694a, 0xa18e, 0x0029, 0x1110, 0x080c, 0xc4d7, 0x6847,
++      0x0000, 0x080c, 0x580a, 0x00de, 0x080c, 0x95e3, 0x080c, 0x7e94,
++      0x080c, 0x7f6e, 0x0005, 0x684b, 0x0004, 0x0c88, 0x684b, 0x0004,
++      0x0c70, 0xa182, 0x0040, 0x0002, 0xa6f7, 0xa6f7, 0xa6f7, 0xa6f7,
++      0xa6f7, 0xa6f9, 0xa6f7, 0xa6fc, 0xa6f7, 0xa6f7, 0xa6f7, 0xa6f7,
++      0xa6f7, 0xa6f7, 0xa6f7, 0xa6f7, 0xa6f7, 0xa6f7, 0xa6f7, 0x080c,
++      0x1519, 0x080c, 0x95e3, 0x0005, 0x0006, 0x0026, 0xa016, 0x080c,
++      0x1870, 0x002e, 0x000e, 0x0005, 0xa182, 0x0085, 0x0002, 0xa710,
++      0xa70e, 0xa70e, 0xa71c, 0xa70e, 0xa70e, 0xa70e, 0x080c, 0x1519,
++      0x6003, 0x0001, 0x6106, 0x080c, 0x7999, 0x0126, 0x2091, 0x8000,
++      0x080c, 0x7e94, 0x012e, 0x0005, 0x0026, 0x0056, 0x00d6, 0x00e6,
++      0x2071, 0xcc80, 0x7224, 0x6212, 0x7220, 0x080c, 0xac81, 0x01a0,
++      0x2268, 0x6800, 0xa086, 0x0000, 0x0178, 0x6018, 0x6d18, 0xa52e,
++      0x1158, 0x00c6, 0x2d60, 0x080c, 0xa954, 0x00ce, 0x0128, 0x6803,
++      0x0002, 0x6007, 0x0086, 0x0010, 0x6007, 0x0087, 0x6003, 0x0001,
++      0x080c, 0x7999, 0x080c, 0x7e94, 0x00f6, 0x2278, 0x080c, 0x56c3,
++      0x00fe, 0x0150, 0x6820, 0xd0ec, 0x0138, 0x00c6, 0x2260, 0x603f,
++      0x0000, 0x080c, 0xaf6c, 0x00ce, 0x00ee, 0x00de, 0x005e, 0x002e,
++      0x0005, 0xa186, 0x0013, 0x1160, 0x6004, 0xa08a, 0x0085, 0x0a0c,
++      0x1519, 0xa08a, 0x008c, 0x1a0c, 0x1519, 0xa082, 0x0085, 0x0072,
++      0xa186, 0x0027, 0x0120, 0xa186, 0x0014, 0x190c, 0x1519, 0x080c,
++      0x7db1, 0x080c, 0xae54, 0x080c, 0x7e94, 0x0005, 0xa77d, 0xa77f,
++      0xa77f, 0xa77d, 0xa77d, 0xa77d, 0xa77d, 0x080c, 0x1519, 0x080c,
++      0x7db1, 0x080c, 0xae54, 0x080c, 0x7e94, 0x0005, 0xa186, 0x0013,
++      0x1128, 0x6004, 0xa082, 0x0085, 0x2008, 0x04a8, 0xa186, 0x0027,
++      0x11e8, 0x080c, 0x7db1, 0x080c, 0x2e46, 0x00d6, 0x6010, 0x2068,
++      0x080c, 0xac91, 0x0150, 0x6837, 0x0103, 0x6847, 0x0000, 0x684b,
++      0x0029, 0x080c, 0x580a, 0x080c, 0xae48, 0x00de, 0x080c, 0x95e3,
++      0x080c, 0x7e94, 0x0005, 0x080c, 0x962a, 0x0ce0, 0xa186, 0x0014,
++      0x1dd0, 0x080c, 0x7db1, 0x00d6, 0x6010, 0x2068, 0x080c, 0xac91,
++      0x0d60, 0x6837, 0x0103, 0x6847, 0x0000, 0x684b, 0x0006, 0x6850,
++      0xc0ec, 0x6852, 0x08f0, 0x0002, 0xa7cd, 0xa7cb, 0xa7cb, 0xa7cb,
++      0xa7cb, 0xa7cb, 0xa7e5, 0x080c, 0x1519, 0x080c, 0x7db1, 0x6030,
++      0xa08c, 0xff00, 0x810f, 0xa186, 0x0039, 0x0118, 0xa186, 0x0035,
++      0x1118, 0x2001, 0xc8fd, 0x0010, 0x2001, 0xc8fe, 0x2004, 0x6016,
++      0x6003, 0x000c, 0x080c, 0x7e94, 0x0005, 0x080c, 0x7db1, 0x6030,
++      0xa08c, 0xff00, 0x810f, 0xa186, 0x0039, 0x0118, 0xa186, 0x0035,
++      0x1118, 0x2001, 0xc8fd, 0x0010, 0x2001, 0xc8fe, 0x2004, 0x6016,
++      0x6003, 0x000e, 0x080c, 0x7e94, 0x0005, 0xa182, 0x008c, 0x1220,
++      0xa182, 0x0085, 0x0208, 0x001a, 0x080c, 0x962a, 0x0005, 0xa80e,
++      0xa80e, 0xa80e, 0xa80e, 0xa810, 0xa869, 0xa80e, 0x080c, 0x1519,
++      0x00d6, 0x00f6, 0x2c78, 0x080c, 0x56c3, 0x00fe, 0x0168, 0x6030,
++      0xa08c, 0xff00, 0x810f, 0xa186, 0x0039, 0x0118, 0xa186, 0x0035,
++      0x1118, 0x00de, 0x0804, 0xa87c, 0x080c, 0xac91, 0x1118, 0x080c,
++      0xae48, 0x00f0, 0x6010, 0x2068, 0x684c, 0xd0e4, 0x1110, 0x080c,
++      0xae48, 0x6837, 0x0103, 0x6850, 0xd0b4, 0x0128, 0x684b, 0x0006,
++      0xc0ec, 0x6852, 0x0048, 0xd0bc, 0x0118, 0x684b, 0x0002, 0x0020,
++      0x684b, 0x0005, 0x080c, 0xaf09, 0x6847, 0x0000, 0x080c, 0x580a,
++      0x2c68, 0x080c, 0x958d, 0x01c0, 0x6003, 0x0001, 0x6007, 0x001e,
++      0x600b, 0xffff, 0x2009, 0xcc8e, 0x210c, 0x6136, 0x2009, 0xcc8f,
++      0x210c, 0x613a, 0x6918, 0x611a, 0x080c, 0xb05e, 0x6950, 0x6152,
++      0x601f, 0x0001, 0x080c, 0x7999, 0x2d60, 0x080c, 0x95e3, 0x00de,
++      0x0005, 0x00f6, 0x2c78, 0x080c, 0x56c3, 0x00fe, 0x0598, 0x6030,
++      0xa08c, 0xff00, 0x810f, 0xa186, 0x0035, 0x0130, 0xa186, 0x001e,
++      0x0118, 0xa186, 0x0039, 0x1530, 0x00d6, 0x2c68, 0x080c, 0xb141,
++      0x1904, 0xa8c1, 0x080c, 0x958d, 0x01d8, 0x6106, 0x6003, 0x0001,
++      0x601f, 0x0001, 0x6918, 0x611a, 0x6928, 0x612a, 0x692c, 0x612e,
++      0x6930, 0xa18c, 0x00ff, 0x6132, 0x6934, 0x6136, 0x6938, 0x613a,
++      0x6950, 0x6152, 0x080c, 0xb05e, 0x080c, 0x7999, 0x080c, 0x7e94,
++      0x2d60, 0x00f8, 0x00d6, 0x6010, 0x2068, 0x080c, 0xac91, 0x01c8,
++      0x6837, 0x0103, 0x6850, 0xd0b4, 0x0128, 0xc0ec, 0x6852, 0x684b,
++      0x0006, 0x0048, 0xd0bc, 0x0118, 0x684b, 0x0002, 0x0020, 0x684b,
++      0x0005, 0x080c, 0xaf09, 0x6847, 0x0000, 0x080c, 0x580a, 0x080c,
++      0xae48, 0x00de, 0x080c, 0x95e3, 0x0005, 0x0016, 0x00d6, 0x6010,
++      0x2068, 0x080c, 0xac91, 0x0140, 0x6837, 0x0103, 0x684b, 0x0028,
++      0x6847, 0x0000, 0x080c, 0x580a, 0x00de, 0x001e, 0xa186, 0x0013,
++      0x0148, 0xa186, 0x0014, 0x0130, 0xa186, 0x0027, 0x0118, 0x080c,
++      0x962a, 0x0030, 0x080c, 0x7db1, 0x080c, 0xae54, 0x080c, 0x7e94,
++      0x0005, 0x0056, 0x0066, 0x00d6, 0x00f6, 0x2029, 0x0001, 0xa182,
++      0x0101, 0x1208, 0x0010, 0x2009, 0x0100, 0x2130, 0x2069, 0xcc98,
++      0x831c, 0x2300, 0xad18, 0x2009, 0x0020, 0xaf90, 0x001d, 0x080c,
++      0xa944, 0xa6b2, 0x0020, 0x7804, 0xa06d, 0x0110, 0x080c, 0x1629,
++      0x080c, 0x1602, 0x0500, 0x8528, 0x6837, 0x0110, 0x683b, 0x0000,
++      0x2d20, 0x7c06, 0xa68a, 0x003d, 0x1228, 0x2608, 0xad90, 0x000f,
++      0x0459, 0x0088, 0xa6b2, 0x003c, 0x2009, 0x003c, 0x2d78, 0xad90,
++      0x000f, 0x0411, 0x0c28, 0x00fe, 0x852f, 0xa5ad, 0x0003, 0x7d36,
++      0xa5ac, 0x0000, 0x0028, 0x00fe, 0x852f, 0xa5ad, 0x0003, 0x7d36,
++      0x00de, 0x006e, 0x005e, 0x0005, 0x00f6, 0x8dff, 0x0158, 0x6804,
++      0xa07d, 0x0130, 0x6807, 0x0000, 0x080c, 0x580a, 0x2f68, 0x0cb8,
++      0x080c, 0x580a, 0x00fe, 0x0005, 0x0156, 0xa184, 0x0001, 0x0108,
++      0x8108, 0x810c, 0x21a8, 0x2304, 0x8007, 0x2012, 0x8318, 0x8210,
++      0x1f04, 0xa94b, 0x015e, 0x0005, 0x0066, 0x0126, 0x2091, 0x8000,
++      0x2031, 0x0001, 0x601c, 0xa084, 0x000f, 0x0083, 0x012e, 0x006e,
++      0x0005, 0x0126, 0x2091, 0x8000, 0x0066, 0x2031, 0x0000, 0x601c,
++      0xa084, 0x000f, 0x001b, 0x006e, 0x012e, 0x0005, 0xa98b, 0xa98b,
++      0xa986, 0xa9ad, 0xa979, 0xa986, 0xa9ad, 0xa986, 0xa979, 0x77f4,
++      0xa986, 0x080c, 0x1519, 0x0036, 0x2019, 0x0010, 0x080c, 0xbd55,
++      0x601f, 0x0006, 0x6003, 0x0007, 0x003e, 0x0005, 0xa006, 0x0005,
++      0xa085, 0x0001, 0x0005, 0x00d6, 0x86ff, 0x11d8, 0x6010, 0x2068,
++      0x080c, 0xac91, 0x01c0, 0x6834, 0xa086, 0x0139, 0x1128, 0x684b,
++      0x0005, 0x6853, 0x0000, 0x0028, 0xa00e, 0x2001, 0x0005, 0x080c,
++      0x592e, 0x080c, 0xaf09, 0x080c, 0x580a, 0x080c, 0x95e3, 0xa085,
++      0x0001, 0x00de, 0x0005, 0xa006, 0x0ce0, 0x6000, 0xa08a, 0x0010,
++      0x1a0c, 0x1519, 0x000b, 0x0005, 0xa9c4, 0xa9e5, 0xa9c6, 0xaa04,
++      0xa9e2, 0xa9c4, 0xa986, 0xa98b, 0xa98b, 0xa986, 0xa986, 0xa986,
++      0xa986, 0xa986, 0xa986, 0xa986, 0x080c, 0x1519, 0x86ff, 0x11b8,
++      0x601c, 0xa086, 0x0006, 0x0198, 0x00d6, 0x6010, 0x2068, 0x080c,
++      0xac91, 0x0110, 0x080c, 0xaf09, 0x00de, 0x6007, 0x0085, 0x6003,
++      0x000b, 0x601f, 0x0002, 0x080c, 0x7999, 0x080c, 0x7e94, 0xa085,
++      0x0001, 0x0005, 0x080c, 0x1953, 0x0c08, 0x00e6, 0x2071, 0xc927,
++      0x7024, 0xac06, 0x1110, 0x080c, 0x8dee, 0x601c, 0xa084, 0x000f,
++      0xa086, 0x0006, 0x1150, 0x0086, 0x0096, 0x2049, 0x0001, 0x2c40,
++      0x080c, 0x8fc9, 0x009e, 0x008e, 0x0010, 0x080c, 0x8ced, 0x00ee,
++      0x1928, 0x080c, 0xa986, 0x0005, 0x0036, 0x00e6, 0x2071, 0xc927,
++      0x703c, 0xac06, 0x1140, 0x2019, 0x0000, 0x080c, 0x8e79, 0x00ee,
++      0x003e, 0x0804, 0xa9c6, 0x080c, 0x90f6, 0x00ee, 0x003e, 0x1904,
++      0xa9c6, 0x080c, 0xa986, 0x0005, 0x00c6, 0x601c, 0xa084, 0x000f,
++      0x0013, 0x00ce, 0x0005, 0xaa35, 0xaaa2, 0xabf0, 0xaa40, 0xae54,
++      0xaa35, 0xbd47, 0xb185, 0xaaa2, 0x77c3, 0xac5b, 0x080c, 0x1519,
++      0x080c, 0xae8f, 0x1110, 0x080c, 0x9c09, 0x0005, 0x080c, 0x7db1,
++      0x080c, 0x7e94, 0x080c, 0x95e3, 0x0005, 0x6017, 0x0001, 0x0005,
++      0x080c, 0xac91, 0x0120, 0x6010, 0xa080, 0x0019, 0x2c02, 0x6000,
++      0xa08a, 0x0010, 0x1a0c, 0x1519, 0x000b, 0x0005, 0xaa5e, 0xaa60,
++      0xaa80, 0xaa92, 0xaa9f, 0xaa5e, 0xaa35, 0xaa35, 0xaa35, 0xaa92,
++      0xaa92, 0xaa5e, 0xaa5e, 0xaa5e, 0xaa5e, 0xaa9c, 0x080c, 0x1519,
++      0x00e6, 0x6010, 0x2070, 0x7050, 0xc0b5, 0x7052, 0x2071, 0xc927,
++      0x7024, 0xac06, 0x0190, 0x080c, 0x8ced, 0x6007, 0x0085, 0x6003,
++      0x000b, 0x601f, 0x0002, 0x2001, 0xc8fe, 0x2004, 0x6016, 0x080c,
++      0x7999, 0x080c, 0x7e94, 0x00ee, 0x0005, 0x6017, 0x0001, 0x0cd8,
++      0x00d6, 0x6010, 0x2068, 0x6850, 0xc0b5, 0x6852, 0x00de, 0x6007,
++      0x0085, 0x6003, 0x000b, 0x601f, 0x0002, 0x080c, 0x7999, 0x080c,
++      0x7e94, 0x0005, 0x00d6, 0x6017, 0x0001, 0x6010, 0x2068, 0x6850,
++      0xc0b5, 0x6852, 0x00de, 0x0005, 0x080c, 0x95e3, 0x0005, 0x080c,
++      0x1953, 0x08f0, 0x6000, 0xa08a, 0x0010, 0x1a0c, 0x1519, 0x000b,
++      0x0005, 0xaab9, 0xaa3d, 0xaabb, 0xaab9, 0xaabb, 0xaabb, 0xaa36,
++      0xaab9, 0xaa30, 0xaa30, 0xaab9, 0xaab9, 0xaab9, 0xaab9, 0xaab9,
++      0xaab9, 0x080c, 0x1519, 0x00d6, 0x6018, 0x2068, 0x6804, 0xa084,
++      0x00ff, 0x00de, 0xa08a, 0x000c, 0x1a0c, 0x1519, 0x000b, 0x0005,
++      0xaad4, 0xab96, 0xaad6, 0xab14, 0xaad6, 0xab14, 0xaad6, 0xaae4,
++      0xaad4, 0xab14, 0xaad4, 0xab00, 0x080c, 0x1519, 0x6004, 0xa08e,
++      0x0016, 0x05a8, 0xa08e, 0x0004, 0x0590, 0xa08e, 0x0002, 0x0578,
++      0xa08e, 0x004b, 0x0904, 0xab92, 0x6004, 0x080c, 0xae8f, 0x0904,
++      0xabaf, 0xa08e, 0x0021, 0x0904, 0xabb3, 0xa08e, 0x0022, 0x0904,
++      0xabaf, 0xa08e, 0x003d, 0x0904, 0xabb3, 0xa08e, 0x0039, 0x0904,
++      0xabb7, 0xa08e, 0x0035, 0x0904, 0xabb7, 0xa08e, 0x001e, 0x0188,
++      0xa08e, 0x0001, 0x1150, 0x00d6, 0x6018, 0x2068, 0x6804, 0xa084,
++      0x00ff, 0x00de, 0xa086, 0x0006, 0x0110, 0x080c, 0x2e46, 0x080c,
++      0x9c09, 0x080c, 0xae54, 0x0005, 0x00c6, 0x00d6, 0x6104, 0xa186,
++      0x0016, 0x0904, 0xab83, 0xa186, 0x0002, 0x15d8, 0x2001, 0xc635,
++      0x2004, 0xd08c, 0x1198, 0x080c, 0x5f22, 0x1180, 0x2001, 0xc8e6,
++      0x2003, 0x0001, 0x2001, 0xc600, 0x2003, 0x0001, 0xa085, 0x0001,
++      0x080c, 0x5f66, 0x080c, 0x5e5a, 0x0804, 0xabd9, 0x6018, 0x2068,
++      0x2001, 0xc635, 0x2004, 0xd0ac, 0x1904, 0xabd9, 0x68a0, 0xd0bc,
++      0x1904, 0xabd9, 0x6840, 0xa084, 0x00ff, 0xa005, 0x0190, 0x8001,
++      0x6842, 0x6013, 0x0000, 0x601f, 0x0007, 0x6017, 0x0398, 0x603f,
++      0x0000, 0x080c, 0x958d, 0x0128, 0x2d00, 0x601a, 0x601f, 0x0001,
++      0x0450, 0x00de, 0x00ce, 0x6004, 0xa08e, 0x0002, 0x11a8, 0x6018,
++      0xa080, 0x0028, 0x2004, 0xa086, 0x007e, 0x1170, 0x2009, 0xc635,
++      0x2104, 0xc085, 0x200a, 0x00e6, 0x2071, 0xc600, 0x080c, 0x4f02,
++      0x00ee, 0x080c, 0x9c09, 0x0020, 0x080c, 0x9c09, 0x080c, 0x2e46,
++      0x00e6, 0x0126, 0x2091, 0x8000, 0x080c, 0x2e6c, 0x012e, 0x00ee,
++      0x080c, 0xae54, 0x0005, 0x2001, 0x0002, 0x080c, 0x5291, 0x6003,
++      0x0001, 0x6007, 0x0002, 0x080c, 0x79df, 0x080c, 0x7e94, 0x00de,
++      0x00ce, 0x0c80, 0x080c, 0x2e6c, 0x0804, 0xab0f, 0x00c6, 0x00d6,
++      0x6104, 0xa186, 0x0016, 0x0d38, 0x6018, 0x2068, 0x6840, 0xa084,
++      0x00ff, 0xa005, 0x0904, 0xab59, 0x8001, 0x6842, 0x6003, 0x0001,
++      0x080c, 0x79df, 0x080c, 0x7e94, 0x00de, 0x00ce, 0x0898, 0x080c,
++      0x9c09, 0x0804, 0xab11, 0x080c, 0x9c37, 0x0804, 0xab11, 0x00d6,
++      0x2c68, 0x6104, 0x080c, 0xb141, 0x00de, 0x0118, 0x080c, 0x95e3,
++      0x00b8, 0x6004, 0x8007, 0x6130, 0xa18c, 0x00ff, 0xa105, 0x6032,
++      0x6007, 0x0085, 0x6003, 0x000b, 0x601f, 0x0002, 0x6038, 0x600a,
++      0x2001, 0xc8fe, 0x2004, 0x6016, 0x080c, 0x7999, 0x080c, 0x7e94,
++      0x0005, 0x00de, 0x00ce, 0x080c, 0x9c09, 0x080c, 0x2e46, 0x00e6,
++      0x0126, 0x2091, 0x8000, 0x080c, 0x2e6c, 0x6013, 0x0000, 0x601f,
++      0x0007, 0x6017, 0x0398, 0x603f, 0x0000, 0x012e, 0x00ee, 0x0005,
++      0x6000, 0xa08a, 0x0010, 0x1a0c, 0x1519, 0x000b, 0x0005, 0xac07,
++      0xac07, 0xac07, 0xac07, 0xac07, 0xac07, 0xac07, 0xac07, 0xac07,
++      0xaa35, 0xac07, 0xaa3d, 0xac09, 0xaa3d, 0xac16, 0xac07, 0x080c,
++      0x1519, 0x6004, 0xa086, 0x008b, 0x0148, 0x6007, 0x008b, 0x6003,
++      0x000d, 0x080c, 0x7999, 0x080c, 0x7e94, 0x0005, 0x080c, 0xae48,
++      0x080c, 0xac91, 0x0580, 0x080c, 0x2e46, 0x00d6, 0x080c, 0xac91,
++      0x0168, 0x6010, 0x2068, 0x6837, 0x0103, 0x684b, 0x0006, 0x6847,
++      0x0000, 0x6850, 0xc0ed, 0x6852, 0x080c, 0x580a, 0x2c68, 0x080c,
++      0x958d, 0x0150, 0x6818, 0x601a, 0x080c, 0xb05e, 0x00c6, 0x2d60,
++      0x080c, 0xae54, 0x00ce, 0x0008, 0x2d60, 0x00de, 0x6013, 0x0000,
++      0x601f, 0x0001, 0x6007, 0x0001, 0x6003, 0x0001, 0x080c, 0x79df,
++      0x080c, 0x7e94, 0x0078, 0x6030, 0xa08c, 0xff00, 0x810f, 0xa186,
++      0x0039, 0x0118, 0xa186, 0x0035, 0x1118, 0x080c, 0x2e46, 0x08b0,
++      0x080c, 0xae54, 0x0005, 0x6000, 0xa08a, 0x0010, 0x1a0c, 0x1519,
++      0x000b, 0x0005, 0xac72, 0xac72, 0xac72, 0xac74, 0xac74, 0xac72,
++      0xac72, 0xac72, 0xac72, 0xac72, 0xac72, 0xac72, 0xac72, 0xac72,
++      0xac72, 0xac72, 0x080c, 0x1519, 0x080c, 0x90f6, 0x190c, 0x1519,
++      0x6110, 0x2168, 0x684b, 0x0006, 0x080c, 0x580a, 0x080c, 0x95e3,
++      0x0005, 0xa284, 0x0007, 0x1158, 0xa282, 0xce00, 0x0240, 0x2001,
++      0xc617, 0x2004, 0xa202, 0x1218, 0xa085, 0x0001, 0x0005, 0xa006,
++      0x0ce8, 0x0026, 0x6210, 0xa294, 0xf000, 0x002e, 0x0005, 0x00e6,
++      0x00c6, 0x0036, 0x0006, 0x0126, 0x2091, 0x8000, 0x2061, 0xce00,
++      0x2071, 0xc600, 0x7348, 0x7068, 0xa302, 0x12a8, 0x601c, 0xa206,
++      0x1160, 0x080c, 0xafe9, 0x0148, 0x080c, 0xae8f, 0x1110, 0x080c,
++      0x9c09, 0x00c6, 0x080c, 0x95e3, 0x00ce, 0xace0, 0x0018, 0x705c,
++      0xac02, 0x1208, 0x0c38, 0x012e, 0x000e, 0x003e, 0x00ce, 0x00ee,
++      0x0005, 0x00e6, 0x00c6, 0x0016, 0xa188, 0xc77b, 0x210c, 0x81ff,
++      0x0128, 0x2061, 0xca3c, 0x611a, 0x080c, 0x2e46, 0xa006, 0x0010,
++      0xa085, 0x0001, 0x001e, 0x00ce, 0x00ee, 0x0005, 0x00c6, 0x0056,
++      0x0126, 0x2091, 0x8000, 0x00c6, 0x080c, 0x958d, 0x005e, 0x0180,
++      0x6612, 0x651a, 0x080c, 0xb05e, 0x601f, 0x0003, 0x2009, 0x004b,
++      0x080c, 0x9613, 0xa085, 0x0001, 0x012e, 0x005e, 0x00ce, 0x0005,
++      0xa006, 0x0cd0, 0x00c6, 0x0056, 0x0126, 0x2091, 0x8000, 0x62a0,
++      0x00c6, 0x080c, 0xaf0d, 0x005e, 0x0550, 0x6013, 0x0000, 0x651a,
++      0x080c, 0xb05e, 0x601f, 0x0003, 0x0016, 0x00c6, 0x2560, 0x080c,
++      0x553e, 0x00ce, 0x080c, 0x7b16, 0x0076, 0x2039, 0x0000, 0x080c,
++      0x7a0e, 0x2c08, 0x080c, 0xbef7, 0x007e, 0x001e, 0xd184, 0x0128,
++      0x080c, 0x95e3, 0xa085, 0x0001, 0x0030, 0x2009, 0x004c, 0x080c,
++      0x9613, 0xa085, 0x0001, 0x012e, 0x005e, 0x00ce, 0x0005, 0xa006,
++      0x0cd0, 0x00f6, 0x00c6, 0x0046, 0x00c6, 0x080c, 0x958d, 0x2c78,
++      0x00ce, 0x0180, 0x7e12, 0x2c00, 0x781a, 0x781f, 0x0003, 0x2021,
++      0x0005, 0x080c, 0xad87, 0x2f60, 0x2009, 0x004d, 0x080c, 0x9613,
++      0xa085, 0x0001, 0x004e, 0x00ce, 0x00fe, 0x0005, 0x00f6, 0x00c6,
++      0x0046, 0x00c6, 0x080c, 0x958d, 0x2c78, 0x00ce, 0x0178, 0x7e12,
++      0x2c00, 0x781a, 0x781f, 0x0003, 0x2021, 0x0005, 0x0481, 0x2f60,
++      0x2009, 0x004e, 0x080c, 0x9613, 0xa085, 0x0001, 0x004e, 0x00ce,
++      0x00fe, 0x0005, 0x00f6, 0x00c6, 0x0046, 0x00c6, 0x080c, 0x958d,
++      0x2c78, 0x00ce, 0x01c0, 0x7e12, 0x2c00, 0x781a, 0x781f, 0x0003,
++      0x2021, 0x0004, 0x00a1, 0x2001, 0xc8e7, 0x2004, 0xd0fc, 0x0120,
++      0x2f60, 0x080c, 0x95e3, 0x0028, 0x2f60, 0x2009, 0x0052, 0x080c,
++      0x9613, 0xa085, 0x0001, 0x004e, 0x00ce, 0x00fe, 0x0005, 0x0096,
++      0x0076, 0x0126, 0x2091, 0x8000, 0x080c, 0x54e0, 0x0118, 0x2001,
++      0xad8c, 0x0028, 0x080c, 0x54b0, 0x0158, 0x2001, 0xad92, 0x0006,
++      0xa00e, 0x2400, 0x080c, 0x592e, 0x080c, 0x580a, 0x000e, 0x0807,
++      0x2418, 0x080c, 0x7d50, 0x62a0, 0x0086, 0x2041, 0x0001, 0x2039,
++      0x0001, 0x2608, 0x080c, 0x7b2f, 0x008e, 0x080c, 0x7a0e, 0x2f08,
++      0x2648, 0x080c, 0xbef7, 0x613c, 0x81ff, 0x090c, 0x7be4, 0x080c,
++      0x7e94, 0x012e, 0x007e, 0x009e, 0x0005, 0x00c6, 0x0126, 0x2091,
++      0x8000, 0x00c6, 0x080c, 0x958d, 0x001e, 0x0188, 0x660a, 0x611a,
++      0x080c, 0xb05e, 0x601f, 0x0001, 0x2d00, 0x6012, 0x2009, 0x001f,
++      0x080c, 0x9613, 0xa085, 0x0001, 0x012e, 0x00ce, 0x0005, 0xa006,
++      0x0cd8, 0x00c6, 0x0126, 0x2091, 0x8000, 0x00c6, 0x080c, 0x958d,
++      0x001e, 0x0188, 0x660a, 0x611a, 0x080c, 0xb05e, 0x601f, 0x0008,
++      0x2d00, 0x6012, 0x2009, 0x0021, 0x080c, 0x9613, 0xa085, 0x0001,
++      0x012e, 0x00ce, 0x0005, 0xa006, 0x0cd8, 0x00c6, 0x0126, 0x2091,
++      0x8000, 0x00c6, 0x080c, 0x958d, 0x001e, 0x0188, 0x660a, 0x611a,
++      0x080c, 0xb05e, 0x601f, 0x0001, 0x2d00, 0x6012, 0x2009, 0x003d,
++      0x080c, 0x9613, 0xa085, 0x0001, 0x012e, 0x00ce, 0x0005, 0xa006,
++      0x0cd8, 0x00c6, 0x0126, 0x2091, 0x8000, 0x00c6, 0x080c, 0xaf0d,
++      0x001e, 0x0180, 0x611a, 0x080c, 0xb05e, 0x601f, 0x0001, 0x2d00,
++      0x6012, 0x2009, 0x0000, 0x080c, 0x9613, 0xa085, 0x0001, 0x012e,
++      0x00ce, 0x0005, 0xa006, 0x0cd8, 0x00c6, 0x0126, 0x2091, 0x8000,
++      0x00c6, 0x080c, 0x958d, 0x001e, 0x0188, 0x660a, 0x611a, 0x080c,
++      0xb05e, 0x601f, 0x0001, 0x2d00, 0x6012, 0x2009, 0x0044, 0x080c,
++      0x9613, 0xa085, 0x0001, 0x012e, 0x00ce, 0x0005, 0xa006, 0x0cd8,
++      0x0026, 0x00d6, 0x6218, 0x2268, 0x6a3c, 0x82ff, 0x0110, 0x8211,
++      0x6a3e, 0x00de, 0x002e, 0x0005, 0x0006, 0x6000, 0xa086, 0x0000,
++      0x0190, 0x6013, 0x0000, 0x601f, 0x0007, 0x2001, 0xc8fd, 0x2004,
++      0x0006, 0xa082, 0x0051, 0x000e, 0x0208, 0x8004, 0x6016, 0x080c,
++      0xc3e2, 0x603f, 0x0000, 0x000e, 0x0005, 0x0066, 0x00c6, 0x00d6,
++      0x2031, 0xc653, 0x2634, 0xd6e4, 0x0128, 0x6618, 0x2660, 0x6e48,
++      0x080c, 0x5469, 0x00de, 0x00ce, 0x006e, 0x0005, 0x0006, 0x0016,
++      0x6004, 0xa08e, 0x0002, 0x0140, 0xa08e, 0x0003, 0x0128, 0xa08e,
++      0x0004, 0x0110, 0xa085, 0x0001, 0x001e, 0x000e, 0x0005, 0x0006,
++      0x00d6, 0x6010, 0xa06d, 0x0148, 0x6834, 0xa086, 0x0139, 0x0138,
++      0x6838, 0xd0fc, 0x0110, 0xa006, 0x0010, 0xa085, 0x0001, 0x00de,
++      0x000e, 0x0005, 0x00c6, 0x0126, 0x2091, 0x8000, 0x00c6, 0x080c,
++      0x958d, 0x001e, 0x0190, 0x611a, 0x080c, 0xb05e, 0x601f, 0x0001,
++      0x2d00, 0x6012, 0x080c, 0x2e46, 0x2009, 0x0028, 0x080c, 0x9613,
++      0xa085, 0x0001, 0x012e, 0x00ce, 0x0005, 0xa006, 0x0cd8, 0xa186,
++      0x0015, 0x1178, 0x2011, 0xc621, 0x2204, 0xa086, 0x0074, 0x1148,
++      0x080c, 0x9fb9, 0x6003, 0x0001, 0x6007, 0x0029, 0x080c, 0x79df,
++      0x0020, 0x080c, 0x9c09, 0x080c, 0x95e3, 0x0005, 0xa186, 0x0016,
++      0x1128, 0x2001, 0x0004, 0x080c, 0x5291, 0x00e8, 0xa186, 0x0015,
++      0x11e8, 0x2011, 0xc621, 0x2204, 0xa086, 0x0014, 0x11b8, 0x00d6,
++      0x6018, 0x2068, 0x080c, 0x53df, 0x00de, 0x080c, 0xa072, 0x1170,
++      0x00d6, 0x6018, 0x2068, 0x6890, 0x00de, 0xa005, 0x0138, 0x2001,
++      0x0006, 0x080c, 0x5291, 0x080c, 0x9767, 0x0020, 0x080c, 0x9c09,
++      0x080c, 0x95e3, 0x0005, 0x6848, 0xa086, 0x0005, 0x1108, 0x0009,
++      0x0005, 0x6850, 0xc0ad, 0x6852, 0x0005, 0x00e6, 0x0126, 0x2071,
++      0xc600, 0x2091, 0x8000, 0x7548, 0xa582, 0x0001, 0x0608, 0x704c,
++      0x2060, 0x6000, 0xa086, 0x0000, 0x0148, 0xace0, 0x0018, 0x705c,
++      0xac02, 0x1208, 0x0cb0, 0x2061, 0xce00, 0x0c98, 0x6003, 0x0008,
++      0x8529, 0x754a, 0xaca8, 0x0018, 0x705c, 0xa502, 0x1230, 0x754e,
++      0xa085, 0x0001, 0x012e, 0x00ee, 0x0005, 0x704f, 0xce00, 0x0cc0,
++      0xa006, 0x0cc0, 0x00e6, 0x2071, 0xcc8c, 0x7014, 0xd0e4, 0x0150,
++      0x6013, 0x0000, 0x6003, 0x0001, 0x6007, 0x0050, 0x080c, 0x7999,
++      0x080c, 0x7e94, 0x00ee, 0x0005, 0x00c6, 0x00f6, 0x2c78, 0x080c,
++      0x56c3, 0x00fe, 0x0120, 0x601c, 0xa084, 0x000f, 0x0013, 0x00ce,
++      0x0005, 0xaa35, 0xaf64, 0xaf67, 0xaf6a, 0xc1cf, 0xc1ea, 0xc1ed,
++      0xaa35, 0xaa35, 0x080c, 0x1519, 0xe000, 0xe000, 0x0005, 0xe000,
++      0xe000, 0x0005, 0x0009, 0x0005, 0x00f6, 0x2c78, 0x080c, 0x56c3,
++      0x0538, 0x080c, 0x958d, 0x1128, 0x2001, 0xc8ff, 0x2004, 0x783e,
++      0x00f8, 0x7818, 0x601a, 0x080c, 0xb05e, 0x781c, 0xa086, 0x0003,
++      0x0128, 0x7808, 0x6036, 0x2f00, 0x603a, 0x0020, 0x7808, 0x603a,
++      0x2f00, 0x6036, 0x602a, 0x601f, 0x0001, 0x6007, 0x0035, 0x6003,
++      0x0001, 0x7950, 0x6152, 0x080c, 0x7999, 0x080c, 0x7e94, 0x2f60,
++      0x00fe, 0x0005, 0x0016, 0x00f6, 0x682c, 0x6032, 0xa08e, 0x0001,
++      0x0138, 0xa086, 0x0005, 0x0140, 0xa006, 0x602a, 0x602e, 0x00a0,
++      0x6820, 0xc0f4, 0xc0d5, 0x6822, 0x6810, 0x2078, 0x787c, 0x6938,
++      0xa102, 0x7880, 0x6934, 0xa103, 0x1e78, 0x6834, 0x602a, 0x6838,
++      0xa084, 0xfffc, 0x683a, 0x602e, 0x2d00, 0x6036, 0x6808, 0x603a,
++      0x6918, 0x611a, 0x6950, 0x6152, 0x601f, 0x0001, 0x6007, 0x0039,
++      0x6003, 0x0001, 0x080c, 0x7999, 0x6803, 0x0002, 0x00fe, 0x001e,
++      0x0005, 0x00f6, 0x2c78, 0x080c, 0x56c3, 0x1118, 0xa085, 0x0001,
++      0x0070, 0x6020, 0xd0f4, 0x1150, 0xc0f5, 0x6022, 0x6010, 0x2078,
++      0x7828, 0x603a, 0x782c, 0x6036, 0x080c, 0x1953, 0xa006, 0x00fe,
++      0x0005, 0x0006, 0x0016, 0x6004, 0xa08e, 0x0034, 0x01b8, 0xa08e,
++      0x0035, 0x01a0, 0xa08e, 0x0036, 0x0188, 0xa08e, 0x0037, 0x0170,
++      0xa08e, 0x0038, 0x0158, 0xa08e, 0x0039, 0x0140, 0xa08e, 0x003a,
++      0x0128, 0xa08e, 0x003b, 0x0110, 0xa085, 0x0001, 0x001e, 0x000e,
++      0x0005, 0x0006, 0x0016, 0x0026, 0x0036, 0x00e6, 0x2001, 0xc8f9,
++      0x200c, 0x8000, 0x2014, 0x2001, 0x0032, 0x080c, 0x783f, 0x2001,
++      0xc8fd, 0x82ff, 0x1110, 0x2011, 0x0014, 0x2202, 0x2001, 0xc8fb,
++      0x200c, 0x8000, 0x2014, 0x2071, 0xc8d5, 0x711a, 0x721e, 0x2001,
++      0x0064, 0x080c, 0x783f, 0x2001, 0xc8fe, 0x82ff, 0x1110, 0x2011,
++      0x0014, 0x2202, 0x2009, 0xc8ff, 0xa280, 0x000a, 0x200a, 0x080c,
++      0x572c, 0x00ee, 0x003e, 0x002e, 0x001e, 0x000e, 0x0005, 0x0006,
++      0x00e6, 0x2001, 0xc8fd, 0x2003, 0x0028, 0x2001, 0xc8fe, 0x2003,
++      0x0014, 0x2071, 0xc8d5, 0x701b, 0x0000, 0x701f, 0x07d0, 0x2001,
++      0xc8ff, 0x2003, 0x001e, 0x00ee, 0x000e, 0x0005, 0x00d6, 0x6054,
++      0xa06d, 0x0110, 0x080c, 0x1619, 0x00de, 0x0005, 0x0005, 0x00c6,
++      0x0126, 0x2091, 0x8000, 0x00c6, 0x080c, 0x958d, 0x001e, 0x0178,
++      0x611a, 0x0ca1, 0x601f, 0x0001, 0x2d00, 0x6012, 0x2009, 0x0033,
++      0x080c, 0x9613, 0xa085, 0x0001, 0x012e, 0x00ce, 0x0005, 0xa006,
++      0x0cd8, 0x00d6, 0x00e6, 0x00f6, 0x2071, 0xc600, 0xa186, 0x0015,
++      0x1500, 0x7084, 0xa086, 0x0018, 0x11e0, 0x6010, 0x2068, 0x6a3c,
++      0xd2e4, 0x1160, 0x2c78, 0x080c, 0x80af, 0x01d8, 0x7070, 0x6a50,
++      0xa206, 0x1160, 0x7074, 0x6a54, 0xa206, 0x1140, 0x6218, 0xa290,
++      0x0028, 0x2214, 0x2009, 0x0000, 0x080c, 0x2e8b, 0x080c, 0x9767,
++      0x0020, 0x080c, 0x9c09, 0x080c, 0x95e3, 0x00fe, 0x00ee, 0x00de,
++      0x0005, 0x7054, 0x6a54, 0xa206, 0x0d48, 0x0c80, 0x00c6, 0x0126,
++      0x2091, 0x8000, 0x00c6, 0x080c, 0x958d, 0x001e, 0x0180, 0x611a,
++      0x080c, 0xb05e, 0x601f, 0x0001, 0x2d00, 0x6012, 0x2009, 0x0043,
++      0x080c, 0x9613, 0xa085, 0x0001, 0x012e, 0x00ce, 0x0005, 0xa006,
++      0x0cd8, 0x00d6, 0x00e6, 0x00f6, 0x2071, 0xc600, 0xa186, 0x0015,
++      0x11c0, 0x7084, 0xa086, 0x0004, 0x11a0, 0x6010, 0xa0e8, 0x000f,
++      0x2c78, 0x080c, 0x80af, 0x01a8, 0x7070, 0x6a08, 0xa206, 0x1130,
++      0x7074, 0x6a0c, 0xa206, 0x1110, 0x080c, 0x2e46, 0x080c, 0x9767,
++      0x0020, 0x080c, 0x9c09, 0x080c, 0x95e3, 0x00fe, 0x00ee, 0x00de,
++      0x0005, 0x7054, 0x6a0c, 0xa206, 0x0d78, 0x0c80, 0x0016, 0x0026,
++      0x684c, 0xd0ac, 0x0178, 0x6914, 0x6a10, 0x2100, 0xa205, 0x0150,
++      0x6860, 0xa106, 0x1118, 0x685c, 0xa206, 0x0120, 0x6962, 0x6a5e,
++      0xa085, 0x0001, 0x002e, 0x001e, 0x0005, 0x00d6, 0x0036, 0x6310,
++      0x2368, 0x684a, 0x6952, 0xa29e, 0x4000, 0x11a0, 0x00c6, 0x6318,
++      0x2360, 0x2009, 0x0000, 0x6838, 0xd0f4, 0x1140, 0x080c, 0x55de,
++      0x1108, 0xc185, 0x6000, 0xd0bc, 0x0108, 0xc18d, 0x6a66, 0x696a,
++      0x00ce, 0x0080, 0x6a66, 0x3918, 0xa398, 0x0006, 0x231c, 0x686b,
++      0x0004, 0x6b72, 0x00c6, 0x6318, 0x2360, 0x6004, 0xa084, 0x00ff,
++      0x686e, 0x00ce, 0x080c, 0x580a, 0x6013, 0x0000, 0x003e, 0x00de,
++      0x0005, 0x00c6, 0x0026, 0x0016, 0xa186, 0x0035, 0x0110, 0x6a34,
++      0x0008, 0x6a28, 0x080c, 0xac81, 0x01f0, 0x2260, 0x611c, 0xa186,
++      0x0003, 0x0118, 0xa186, 0x0006, 0x1190, 0x6834, 0xa206, 0x0140,
++      0x6838, 0xa206, 0x1160, 0x6108, 0x6834, 0xa106, 0x1140, 0x0020,
++      0x6008, 0x6938, 0xa106, 0x1118, 0x6018, 0x6918, 0xa106, 0x001e,
++      0x002e, 0x00ce, 0x0005, 0xa085, 0x0001, 0x0cc8, 0x6944, 0xd1cc,
++      0x0198, 0xa18c, 0x00ff, 0xa18e, 0x0002, 0x1170, 0xad88, 0x001e,
++      0x210c, 0xa18c, 0x0f00, 0x810f, 0xa18e, 0x0001, 0x1128, 0x6810,
++      0x6914, 0xa115, 0x190c, 0xa4ba, 0x0005, 0x080c, 0x95e3, 0x0804,
++      0x7e94, 0x0066, 0x6000, 0xa0b2, 0x0010, 0x1a0c, 0x1519, 0x0013,
++      0x006e, 0x0005, 0xb1a2, 0xb6b9, 0xb7e1, 0xb1a2, 0xb1a2, 0xb1a2,
++      0xb1a2, 0xb1a2, 0xb1da, 0xb865, 0xb1a2, 0xb1a2, 0xb1a2, 0xb1a2,
++      0xb1a2, 0xb1a2, 0x080c, 0x1519, 0x0066, 0x6000, 0xa0b2, 0x0010,
++      0x1a0c, 0x1519, 0x0013, 0x006e, 0x0005, 0xb1bd, 0xbcec, 0xb1bd,
++      0xb1bd, 0xb1bd, 0xb1bd, 0xb1bd, 0xb1bd, 0xbcae, 0xbd34, 0xb1bd,
++      0xc314, 0xc344, 0xc314, 0xc344, 0xb1bd, 0x080c, 0x1519, 0x0066,
++      0x6000, 0xa0b2, 0x0010, 0x1a0c, 0x1519, 0x0013, 0x006e, 0x0005,
++      0xb1d8, 0xb9b5, 0xba82, 0xbaaf, 0xbb33, 0xb1d8, 0xbc20, 0xbbcb,
++      0xb871, 0xbc84, 0xbc99, 0xb1d8, 0xb1d8, 0xb1d8, 0xb1d8, 0xb1d8,
++      0x080c, 0x1519, 0xa1b2, 0x0080, 0x1a0c, 0x1519, 0x2100, 0xa1b2,
++      0x0040, 0x1a04, 0xb5f1, 0x0002, 0xb224, 0xb3ef, 0xb224, 0xb224,
++      0xb224, 0xb3f6, 0xb224, 0xb224, 0xb224, 0xb224, 0xb224, 0xb224,
++      0xb224, 0xb224, 0xb224, 0xb224, 0xb224, 0xb224, 0xb224, 0xb224,
++      0xb224, 0xb224, 0xb224, 0xb226, 0xb284, 0xb293, 0xb2e1, 0xb2ff,
++      0xb37d, 0xb3dc, 0xb224, 0xb224, 0xb3f9, 0xb224, 0xb224, 0xb40c,
++      0xb417, 0xb224, 0xb224, 0xb224, 0xb224, 0xb224, 0xb4a2, 0xb224,
++      0xb224, 0xb4b5, 0xb224, 0xb224, 0xb46d, 0xb224, 0xb224, 0xb224,
++      0xb4cd, 0xb224, 0xb224, 0xb224, 0xb547, 0xb224, 0xb224, 0xb224,
++      0xb224, 0xb224, 0xb224, 0xb5b8, 0x080c, 0x1519, 0x080c, 0x570b,
++      0x1150, 0x2001, 0xc635, 0x2004, 0xd0cc, 0x1128, 0xa084, 0x0009,
++      0xa086, 0x0008, 0x1140, 0x6007, 0x0009, 0x602b, 0x0009, 0x6013,
++      0x0000, 0x0804, 0xb3ea, 0x080c, 0x568d, 0x00e6, 0x00c6, 0x0036,
++      0x0026, 0x0016, 0x6218, 0x2270, 0x72a0, 0x0026, 0x2019, 0x0029,
++      0x080c, 0x7b16, 0x0076, 0x2039, 0x0000, 0x080c, 0x7a0e, 0x2c08,
++      0x080c, 0xbef7, 0x007e, 0x001e, 0x2e60, 0x080c, 0x553e, 0x001e,
++      0x002e, 0x003e, 0x00ce, 0x00ee, 0x6618, 0x00c6, 0x2660, 0x080c,
++      0x534c, 0x00ce, 0xa6b0, 0x0001, 0x2634, 0xa684, 0x00ff, 0xa082,
++      0x0006, 0x0278, 0x080c, 0xbe3b, 0x1904, 0xb2db, 0x080c, 0xbddb,
++      0x1120, 0x6007, 0x0008, 0x0804, 0xb3ea, 0x6007, 0x0009, 0x0804,
++      0xb3ea, 0x080c, 0xc023, 0x0128, 0x080c, 0xbe3b, 0x0d78, 0x0804,
++      0xb2db, 0x6013, 0x1900, 0x0c88, 0x080c, 0x2f69, 0x1904, 0xb5ee,
++      0x6106, 0x080c, 0xbd95, 0x6007, 0x0006, 0x0804, 0xb3ea, 0x6007,
++      0x0007, 0x0804, 0xb3ea, 0x080c, 0xc378, 0x1904, 0xb5ee, 0x080c,
++      0x2f69, 0x1904, 0xb5ee, 0x00d6, 0x6618, 0x2668, 0x6e04, 0xa684,
++      0x00ff, 0xa082, 0x0006, 0x1220, 0x2001, 0x0001, 0x080c, 0x527f,
++      0xa6b4, 0xff00, 0x8637, 0xa686, 0x0006, 0x0188, 0xa686, 0x0004,
++      0x0170, 0x6e04, 0xa6b4, 0x00ff, 0xa686, 0x0006, 0x0140, 0xa686,
++      0x0004, 0x0128, 0xa686, 0x0005, 0x0110, 0x00de, 0x00e0, 0x080c,
++      0xbe99, 0x11a0, 0xa686, 0x0006, 0x1150, 0x0026, 0x6218, 0xa290,
++      0x0028, 0x2214, 0x2009, 0x0000, 0x080c, 0x2e8b, 0x002e, 0x080c,
++      0x53df, 0x6007, 0x000a, 0x00de, 0x0804, 0xb3ea, 0x6007, 0x000b,
++      0x00de, 0x0804, 0xb3ea, 0x080c, 0x2e46, 0x6007, 0x0001, 0x0804,
++      0xb3ea, 0x080c, 0xc378, 0x1904, 0xb5ee, 0x080c, 0x2f69, 0x1904,
++      0xb5ee, 0x6618, 0x00d6, 0x2668, 0x6e04, 0x00de, 0xa686, 0x0707,
++      0x0d50, 0x0026, 0x6218, 0xa290, 0x0028, 0x2214, 0x2009, 0x0000,
++      0x080c, 0x2e8b, 0x002e, 0x6007, 0x000c, 0x0804, 0xb3ea, 0x080c,
++      0x570b, 0x1140, 0x2001, 0xc635, 0x2004, 0xa084, 0x0009, 0xa086,
++      0x0008, 0x1110, 0x0804, 0xb233, 0x080c, 0x568d, 0x6618, 0xa6b0,
++      0x0001, 0x2634, 0xa684, 0x00ff, 0xa082, 0x0006, 0x06e8, 0x1138,
++      0x0026, 0x2001, 0x0006, 0x080c, 0x52be, 0x002e, 0x0050, 0xa6b4,
++      0xff00, 0x8637, 0xa686, 0x0004, 0x0120, 0xa686, 0x0006, 0x1904,
++      0xb2db, 0x080c, 0xbea6, 0x1120, 0x6007, 0x000e, 0x0804, 0xb3ea,
++      0x0046, 0x6418, 0xa4a0, 0x0028, 0x2424, 0xa4a4, 0x00ff, 0x8427,
++      0x0046, 0x080c, 0x2e46, 0x004e, 0x0016, 0xa006, 0x2009, 0xc653,
++      0x210c, 0xd1a4, 0x0158, 0x2009, 0x0029, 0x080c, 0xc190, 0x6018,
++      0x00d6, 0x2068, 0x6800, 0xc0e5, 0x6802, 0x00de, 0x001e, 0x004e,
++      0x6007, 0x0001, 0x0804, 0xb3ea, 0x2001, 0x0001, 0x080c, 0x527f,
++      0x0156, 0x0016, 0x0026, 0x0036, 0x20a9, 0x0004, 0x2019, 0xc605,
++      0x2011, 0xcc90, 0x080c, 0xa103, 0x003e, 0x002e, 0x001e, 0x015e,
++      0xa005, 0x0168, 0xa6b4, 0xff00, 0x8637, 0xa682, 0x0004, 0x0a04,
++      0xb2db, 0xa682, 0x0007, 0x0a04, 0xb329, 0x0804, 0xb2db, 0x6013,
++      0x1900, 0x6007, 0x0009, 0x0804, 0xb3ea, 0x080c, 0x570b, 0x1140,
++      0x2001, 0xc635, 0x2004, 0xa084, 0x0009, 0xa086, 0x0008, 0x1110,
++      0x0804, 0xb233, 0x080c, 0x568d, 0x6618, 0xa6b0, 0x0001, 0x2634,
++      0xa684, 0x00ff, 0xa082, 0x0006, 0x06b8, 0xa6b4, 0xff00, 0x8637,
++      0xa686, 0x0004, 0x0120, 0xa686, 0x0006, 0x1904, 0xb2db, 0x080c,
++      0xbece, 0x1138, 0x080c, 0xbddb, 0x1120, 0x6007, 0x0010, 0x0804,
++      0xb3ea, 0x0046, 0x6418, 0xa4a0, 0x0028, 0x2424, 0xa4a4, 0x00ff,
++      0x8427, 0x0046, 0x080c, 0x2e46, 0x004e, 0x0016, 0xa006, 0x2009,
++      0xc653, 0x210c, 0xd1a4, 0x0158, 0x2009, 0x0029, 0x080c, 0xc190,
++      0x6018, 0x00d6, 0x2068, 0x6800, 0xc0e5, 0x6802, 0x00de, 0x001e,
++      0x004e, 0x6007, 0x0001, 0x00f0, 0x080c, 0xc023, 0x0140, 0xa6b4,
++      0xff00, 0x8637, 0xa686, 0x0006, 0x0950, 0x0804, 0xb2db, 0x6013,
++      0x1900, 0x6007, 0x0009, 0x0070, 0x080c, 0x2f69, 0x1904, 0xb5ee,
++      0x080c, 0xc378, 0x1904, 0xb5ee, 0x080c, 0xb652, 0x1904, 0xb2db,
++      0x6007, 0x0012, 0x6003, 0x0001, 0x080c, 0x79df, 0x0005, 0x6007,
++      0x0001, 0x6003, 0x0001, 0x080c, 0x79df, 0x0cc0, 0x6007, 0x0005,
++      0x0cc0, 0x080c, 0xc378, 0x1904, 0xb5ee, 0x080c, 0x2f69, 0x1904,
++      0xb5ee, 0x080c, 0xb652, 0x1904, 0xb2db, 0x6007, 0x0020, 0x6003,
++      0x0001, 0x080c, 0x79df, 0x0005, 0x080c, 0x2f69, 0x1904, 0xb5ee,
++      0x6007, 0x0023, 0x6003, 0x0001, 0x080c, 0x79df, 0x0005, 0x080c,
++      0xc378, 0x1904, 0xb5ee, 0x080c, 0x2f69, 0x1904, 0xb5ee, 0x080c,
++      0xb652, 0x1904, 0xb2db, 0x0016, 0x0026, 0x2011, 0xcc91, 0x2214,
++      0xa286, 0xffff, 0x0190, 0x2c08, 0x080c, 0xac81, 0x01e0, 0x2260,
++      0x2011, 0xcc90, 0x2214, 0x6008, 0xa206, 0x11a8, 0x6018, 0xa190,
++      0x0006, 0x2214, 0xa206, 0x01e8, 0x0070, 0x2011, 0xcc90, 0x2214,
++      0x2c08, 0xa006, 0x080c, 0xc162, 0x11a0, 0x2011, 0xcc91, 0x2214,
++      0xa286, 0xffff, 0x01c0, 0x2160, 0x6007, 0x0026, 0x6013, 0x1700,
++      0x2011, 0xcc89, 0x2214, 0xa296, 0xffff, 0x1180, 0x6007, 0x0025,
++      0x0068, 0x601c, 0xa086, 0x0007, 0x1d70, 0x6004, 0xa086, 0x0024,
++      0x1110, 0x080c, 0x95e3, 0x2160, 0x6007, 0x0025, 0x6003, 0x0001,
++      0x080c, 0x79df, 0x002e, 0x001e, 0x0005, 0x2001, 0x0001, 0x080c,
++      0x527f, 0x0156, 0x0016, 0x0026, 0x0036, 0x20a9, 0x0004, 0x2019,
++      0xc605, 0x2011, 0xcc96, 0x080c, 0xa103, 0x003e, 0x002e, 0x001e,
++      0x015e, 0x0120, 0x6007, 0x0031, 0x0804, 0xb3ea, 0x080c, 0x9df5,
++      0x080c, 0x5f22, 0x11b0, 0x0006, 0x0026, 0x0036, 0x080c, 0x5f3e,
++      0x1158, 0x2001, 0xc8e6, 0x2003, 0x0001, 0x2001, 0xc600, 0x2003,
++      0x0001, 0x080c, 0x5e5a, 0x0010, 0x080c, 0x5ef9, 0x003e, 0x002e,
++      0x000e, 0x0005, 0x080c, 0x2f69, 0x1904, 0xb5ee, 0x080c, 0xb652,
++      0x1904, 0xb2db, 0x6106, 0x080c, 0xb66e, 0x6007, 0x002b, 0x0804,
++      0xb3ea, 0x6007, 0x002c, 0x0804, 0xb3ea, 0x080c, 0xc378, 0x1904,
++      0xb5ee, 0x080c, 0x2f69, 0x1904, 0xb5ee, 0x080c, 0xb652, 0x1904,
++      0xb2db, 0x6106, 0x080c, 0xb672, 0x1120, 0x6007, 0x002e, 0x0804,
++      0xb3ea, 0x6007, 0x002f, 0x0804, 0xb3ea, 0x080c, 0x2f69, 0x1904,
++      0xb5ee, 0x00e6, 0x00d6, 0x00c6, 0x6018, 0xa080, 0x0001, 0x200c,
++      0xa184, 0x00ff, 0xa086, 0x0006, 0x0158, 0xa184, 0xff00, 0x8007,
++      0xa086, 0x0006, 0x0128, 0x00ce, 0x00de, 0x00ee, 0x0804, 0xb3ef,
++      0x2001, 0xc672, 0x2004, 0xd0e4, 0x0904, 0xb544, 0x2071, 0xcc8c,
++      0x7010, 0x6036, 0x7014, 0x603a, 0x7108, 0x720c, 0x2001, 0xc653,
++      0x2004, 0xd0a4, 0x0140, 0x6018, 0x2068, 0x6810, 0xa106, 0x1118,
++      0x6814, 0xa206, 0x01f8, 0x2001, 0xc653, 0x2004, 0xd0ac, 0x1590,
++      0x2069, 0xc600, 0x6874, 0xa206, 0x1568, 0x6870, 0xa106, 0x1550,
++      0x7210, 0x080c, 0xac81, 0x0558, 0x080c, 0xc1fc, 0x0540, 0x622a,
++      0x6007, 0x0036, 0x6003, 0x0001, 0x080c, 0x7999, 0x00ce, 0x00de,
++      0x00ee, 0x0005, 0x7214, 0xa286, 0xffff, 0x0150, 0x080c, 0xac81,
++      0x01b0, 0xa280, 0x0002, 0x2004, 0x7110, 0xa106, 0x1180, 0x0c08,
++      0x7210, 0x2c08, 0xa085, 0x0001, 0x080c, 0xc162, 0x2c10, 0x2160,
++      0x0130, 0x08b8, 0x6007, 0x0037, 0x6013, 0x1500, 0x08d8, 0x6007,
++      0x0037, 0x6013, 0x1700, 0x08b0, 0x6007, 0x0012, 0x0898, 0x080c,
++      0x2f69, 0x1904, 0xb5ee, 0x6018, 0xa080, 0x0001, 0x2004, 0xa084,
++      0xff00, 0x8007, 0xa086, 0x0006, 0x1904, 0xb3ef, 0x00e6, 0x00d6,
++      0x00c6, 0x2001, 0xc672, 0x2004, 0xd0e4, 0x0904, 0xb5b0, 0x2069,
++      0xc600, 0x2071, 0xcc8c, 0x7008, 0x6036, 0x720c, 0x623a, 0xa286,
++      0xffff, 0x1150, 0x7208, 0x00c6, 0x2c08, 0xa085, 0x0001, 0x080c,
++      0xc162, 0x2c10, 0x00ce, 0x0588, 0x080c, 0xac81, 0x0570, 0x00c6,
++      0x0026, 0x2260, 0x080c, 0xa954, 0x002e, 0x00ce, 0x7118, 0xa18c,
++      0xff00, 0x810f, 0xa186, 0x0001, 0x0158, 0xa186, 0x0005, 0x0118,
++      0xa186, 0x0007, 0x1178, 0xa280, 0x0004, 0x2004, 0xa005, 0x0150,
++      0x0056, 0x7510, 0x7614, 0x080c, 0xc213, 0x005e, 0x00ce, 0x00de,
++      0x00ee, 0x0005, 0x6007, 0x003b, 0x602b, 0x0009, 0x6013, 0x2a00,
++      0x6003, 0x0001, 0x080c, 0x7999, 0x0c88, 0x6007, 0x003b, 0x602b,
++      0x0009, 0x6013, 0x1700, 0x6003, 0x0001, 0x080c, 0x7999, 0x0c30,
++      0x6007, 0x003b, 0x602b, 0x000b, 0x6013, 0x0000, 0x0804, 0xb51a,
++      0x00e6, 0x0026, 0x080c, 0x570b, 0x0558, 0x080c, 0x568d, 0x080c,
++      0xc3f3, 0x1520, 0x2071, 0xc600, 0x70d4, 0xc085, 0x70d6, 0x00f6,
++      0x2079, 0x0100, 0x72a0, 0xa284, 0x00ff, 0x7072, 0x78e6, 0xa284,
++      0xff00, 0x7274, 0xa205, 0x7076, 0x78ea, 0x00fe, 0x70df, 0x0000,
++      0x2001, 0xc653, 0x2004, 0xd0a4, 0x0120, 0x2011, 0xc940, 0x2013,
++      0x07d0, 0xd0ac, 0x1128, 0x080c, 0x2c62, 0x0010, 0x080c, 0xc41f,
++      0x002e, 0x00ee, 0x080c, 0x95e3, 0x0804, 0xb3ee, 0x080c, 0x95e3,
++      0x0005, 0x2600, 0x0002, 0xb5fc, 0xb630, 0xb641, 0xb5fc, 0xb5fc,
++      0xb5fe, 0xb617, 0xb5fc, 0xb5fc, 0x080c, 0x1519, 0x080c, 0xc378,
++      0x1d68, 0x080c, 0x2f69, 0x1d50, 0x080c, 0xb652, 0x1138, 0x6007,
++      0x0045, 0x6003, 0x0001, 0x080c, 0x79df, 0x0005, 0x080c, 0x2e46,
++      0x6007, 0x0001, 0x6003, 0x0001, 0x080c, 0x79df, 0x0005, 0x080c,
++      0x2f69, 0x19a0, 0x080c, 0x768f, 0x1160, 0x2e00, 0xa080, 0x0010,
++      0x2004, 0x8007, 0xd084, 0x0110, 0x080c, 0xc428, 0x080c, 0x95e3,
++      0x0005, 0x2009, 0x0046, 0x080c, 0xc44e, 0x080c, 0x95e3, 0x0005,
++      0x080c, 0x2f69, 0x1904, 0xb5ee, 0x2009, 0x0041, 0x080c, 0xc44e,
++      0x6007, 0x0047, 0x6003, 0x0001, 0x080c, 0x79df, 0x080c, 0x7e94,
++      0x0005, 0x080c, 0x2f69, 0x1904, 0xb5ee, 0x2009, 0x0042, 0x080c,
++      0xc44e, 0x6007, 0x0047, 0x6003, 0x0001, 0x080c, 0x79df, 0x080c,
++      0x7e94, 0x0005, 0x00d6, 0x0066, 0x6618, 0x2668, 0x6e04, 0xa6b4,
++      0xff00, 0x8637, 0xa686, 0x0006, 0x0170, 0xa686, 0x0004, 0x0158,
++      0x6e04, 0xa6b4, 0x00ff, 0xa686, 0x0006, 0x0128, 0xa686, 0x0004,
++      0x0110, 0xa085, 0x0001, 0x006e, 0x00de, 0x0005, 0x00d6, 0x0449,
++      0x00de, 0x0005, 0x00d6, 0x0491, 0x11f0, 0x680c, 0xa08c, 0xff00,
++      0x6820, 0xa084, 0x00ff, 0xa115, 0x6212, 0x6824, 0x602a, 0xd1e4,
++      0x0118, 0x2009, 0x0001, 0x0060, 0xd1ec, 0x0168, 0x6920, 0xa18c,
++      0x00ff, 0x6824, 0x080c, 0x29c7, 0x1130, 0x2110, 0x2009, 0x0000,
++      0x080c, 0x2e8b, 0x0018, 0xa085, 0x0001, 0x0008, 0xa006, 0x00de,
++      0x0005, 0x2069, 0xcc8d, 0x6800, 0xa082, 0x0010, 0x1228, 0x6013,
++      0x0000, 0xa085, 0x0001, 0x0008, 0xa006, 0x0005, 0x6013, 0x0000,
++      0x2069, 0xcc8c, 0x6808, 0xa084, 0xff00, 0xa086, 0x0800, 0x1140,
++      0x6800, 0xa084, 0x00ff, 0xa08e, 0x0014, 0x0110, 0xa08e, 0x0010,
++      0x0005, 0x6004, 0xa0b2, 0x0080, 0x1a0c, 0x1519, 0xa1b6, 0x0013,
++      0x1130, 0x2008, 0xa1b2, 0x0040, 0x1a04, 0xb7bb, 0x0092, 0xa1b6,
++      0x0027, 0x0120, 0xa1b6, 0x0014, 0x190c, 0x1519, 0x2001, 0x0007,
++      0x080c, 0x52be, 0x080c, 0x7db1, 0x080c, 0xae54, 0x080c, 0x7e94,
++      0x0005, 0xb719, 0xb71b, 0xb719, 0xb719, 0xb719, 0xb71b, 0xb72d,
++      0xb7b4, 0xb77d, 0xb7b4, 0xb790, 0xb7b4, 0xb72d, 0xb7b4, 0xb7ac,
++      0xb7b4, 0xb7ac, 0xb7b4, 0xb7b4, 0xb719, 0xb719, 0xb719, 0xb719,
++      0xb719, 0xb719, 0xb719, 0xb719, 0xb719, 0xb719, 0xb719, 0xb71b,
++      0xb719, 0xb7b4, 0xb719, 0xb719, 0xb7b4, 0xb719, 0xb7b1, 0xb7b4,
++      0xb719, 0xb719, 0xb719, 0xb719, 0xb7b4, 0xb7b4, 0xb719, 0xb7b4,
++      0xb7b4, 0xb719, 0xb727, 0xb719, 0xb719, 0xb719, 0xb719, 0xb7b0,
++      0xb7b4, 0xb719, 0xb719, 0xb7b4, 0xb7b4, 0xb719, 0xb719, 0xb719,
++      0xb719, 0x080c, 0x1519, 0x080c, 0x7db1, 0x2001, 0xc8fd, 0x2004,
++      0x6016, 0x6003, 0x0002, 0x080c, 0x7e94, 0x0804, 0xb7ba, 0x2001,
++      0x0000, 0x080c, 0x527f, 0x0804, 0xb7b4, 0x00f6, 0x2079, 0xc652,
++      0x7804, 0x00fe, 0xd0ac, 0x1904, 0xb7b4, 0x2001, 0x0000, 0x080c,
++      0x527f, 0x6018, 0xa080, 0x0004, 0x2004, 0xa086, 0x00ff, 0x1140,
++      0x00f6, 0x2079, 0xc600, 0x7898, 0x8000, 0x789a, 0x00fe, 0x00e0,
++      0x00c6, 0x6018, 0x2060, 0x6000, 0xd0f4, 0x1140, 0x6010, 0xa005,
++      0x0128, 0x00ce, 0x080c, 0x40ef, 0x0804, 0xb7b4, 0x00ce, 0x2001,
++      0xc600, 0x2004, 0xa086, 0x0002, 0x1138, 0x00f6, 0x2079, 0xc600,
++      0x7898, 0x8000, 0x789a, 0x00fe, 0x2001, 0x0002, 0x080c, 0x5291,
++      0x080c, 0x7db1, 0x601f, 0x0001, 0x6003, 0x0001, 0x6007, 0x0002,
++      0x080c, 0x79df, 0x080c, 0x7e94, 0x00c6, 0x6118, 0x2160, 0x2009,
++      0x0001, 0x080c, 0x6fb9, 0x00ce, 0x04e8, 0x6618, 0x00d6, 0x2668,
++      0x6e04, 0x00de, 0xa6b4, 0xff00, 0x8637, 0xa686, 0x0006, 0x0560,
++      0xa686, 0x0004, 0x0548, 0x080c, 0x7669, 0x2001, 0x0004, 0x0410,
++      0x2001, 0xc600, 0x2004, 0xa086, 0x0003, 0x1110, 0x080c, 0x40ef,
++      0x2001, 0x0006, 0x04a1, 0x6618, 0x00d6, 0x2668, 0x6e04, 0x00de,
++      0xa6b4, 0xff00, 0x8637, 0xa686, 0x0006, 0x0170, 0x2001, 0x0006,
++      0x0048, 0x2001, 0x0004, 0x0030, 0x2001, 0x0006, 0x0401, 0x0020,
++      0x0018, 0x0010, 0x080c, 0x52be, 0x080c, 0x7db1, 0x080c, 0x95e3,
++      0x080c, 0x7e94, 0x0005, 0x2600, 0x0002, 0xb7c6, 0xb7c6, 0xb7c6,
++      0xb7c6, 0xb7c6, 0xb7c8, 0xb7c6, 0xb7c8, 0xb7c6, 0x080c, 0x1519,
++      0x080c, 0x7db1, 0x080c, 0x95e3, 0x080c, 0x7e94, 0x0005, 0x0016,
++      0x00d6, 0x6118, 0x2168, 0x6900, 0xd184, 0x0140, 0x080c, 0x5291,
++      0x2001, 0x0000, 0x080c, 0x527f, 0x080c, 0x2e6c, 0x00de, 0x001e,
++      0x0005, 0x00d6, 0x6618, 0x2668, 0x6804, 0xa084, 0xff00, 0x8007,
++      0x00de, 0xa0b2, 0x000c, 0x1a0c, 0x1519, 0xa1b6, 0x0015, 0x1110,
++      0x003b, 0x0028, 0xa1b6, 0x0016, 0x190c, 0x1519, 0x006b, 0x0005,
++      0x9cda, 0x9cda, 0x9cda, 0x9cda, 0x9cda, 0x9cda, 0xb851, 0xb810,
++      0x9cda, 0x9cda, 0x9cda, 0x9cda, 0x9cda, 0x9cda, 0x9cda, 0x9cda,
++      0x9cda, 0x9cda, 0xb851, 0xb858, 0x9cda, 0x9cda, 0x9cda, 0x9cda,
++      0x00f6, 0x2079, 0xc652, 0x7804, 0xd0ac, 0x11e0, 0x6018, 0xa07d,
++      0x01c8, 0x7800, 0xd0f4, 0x1118, 0x7810, 0xa005, 0x1198, 0x2001,
++      0x0000, 0x080c, 0x527f, 0x2001, 0x0002, 0x080c, 0x5291, 0x601f,
++      0x0001, 0x6003, 0x0001, 0x6007, 0x0002, 0x080c, 0x79df, 0x080c,
++      0x7e94, 0x00e8, 0x2011, 0xcc83, 0x2204, 0x8211, 0x220c, 0x080c,
++      0x29c7, 0x11a8, 0x00c6, 0x080c, 0x533d, 0x0120, 0x00ce, 0x080c,
++      0x95e3, 0x0068, 0x6010, 0x0006, 0x6014, 0x0006, 0x080c, 0x4f47,
++      0x000e, 0x6016, 0x000e, 0x6012, 0x00ce, 0x080c, 0x95e3, 0x00fe,
++      0x0005, 0x6604, 0xa6b6, 0x001e, 0x1110, 0x080c, 0x95e3, 0x0005,
++      0x080c, 0x9fb6, 0x1138, 0x6003, 0x0001, 0x6007, 0x0001, 0x080c,
++      0x79df, 0x0010, 0x080c, 0x95e3, 0x0005, 0x6004, 0xa08a, 0x0080,
++      0x1a0c, 0x1519, 0x080c, 0x7db1, 0x080c, 0xae54, 0x080c, 0x7e94,
++      0x0005, 0xa182, 0x0040, 0x0002, 0xb887, 0xb887, 0xb887, 0xb887,
++      0xb889, 0xb887, 0xb887, 0xb887, 0xb887, 0xb887, 0xb887, 0xb887,
++      0xb887, 0xb887, 0xb887, 0xb887, 0xb887, 0xb887, 0xb887, 0x080c,
++      0x1519, 0x00d6, 0x00e6, 0x00f6, 0x0156, 0x0046, 0x0026, 0x6218,
++      0xa280, 0x002f, 0x2004, 0xa005, 0x0120, 0x2021, 0x0000, 0x080c,
++      0xc3c4, 0x6106, 0x2071, 0xcc80, 0x7444, 0xa4a4, 0xff00, 0x0904,
++      0xb8ed, 0xa486, 0x2000, 0x1130, 0x2009, 0x0001, 0x2011, 0x0200,
++      0x080c, 0x712e, 0x080c, 0x1602, 0x090c, 0x1519, 0x6003, 0x0007,
++      0x2d00, 0x6837, 0x010d, 0x6803, 0x0000, 0x683b, 0x0000, 0x6c5a,
++      0x2c00, 0x685e, 0x6008, 0x68b2, 0x6018, 0x2078, 0x78a0, 0x8007,
++      0x7130, 0x694a, 0x0016, 0xa084, 0xff00, 0x6846, 0x684f, 0x0000,
++      0x6853, 0x0000, 0x6857, 0x0036, 0x080c, 0x580a, 0x001e, 0xa486,
++      0x2000, 0x1130, 0x2019, 0x0017, 0x080c, 0xc10d, 0x0804, 0xb94a,
++      0xa486, 0x0400, 0x1130, 0x2019, 0x0002, 0x080c, 0xc0bf, 0x0804,
++      0xb94a, 0xa486, 0x0200, 0x1110, 0x080c, 0xc0a4, 0xa486, 0x1000,
++      0x1110, 0x080c, 0xc0f2, 0x0804, 0xb94a, 0x2069, 0xc9bc, 0x6a00,
++      0xd284, 0x0904, 0xb9b1, 0xa284, 0x0300, 0x1904, 0xb9aa, 0x6804,
++      0xa005, 0x0904, 0xb992, 0x2d78, 0x6003, 0x0007, 0x080c, 0x15e5,
++      0x0904, 0xb951, 0x7800, 0xd08c, 0x1118, 0x7804, 0x8001, 0x7806,
++      0x6013, 0x0000, 0x6803, 0x0000, 0x6837, 0x0116, 0x683b, 0x0000,
++      0x6008, 0x68b2, 0x2c00, 0x684a, 0x6018, 0x2078, 0x78a0, 0x8007,
++      0x7130, 0x6986, 0x6846, 0x7928, 0x698a, 0x792c, 0x698e, 0x7930,
++      0x6992, 0x7934, 0x6996, 0x6853, 0x003d, 0x7244, 0xa294, 0x0003,
++      0xa286, 0x0002, 0x1118, 0x684f, 0x0040, 0x0040, 0xa286, 0x0001,
++      0x1118, 0x684f, 0x0080, 0x0010, 0x684f, 0x0000, 0x20a9, 0x000a,
++      0x2001, 0xcc90, 0xad90, 0x0015, 0x200c, 0x810f, 0x2112, 0x8000,
++      0x8210, 0x1f04, 0xb93c, 0x200c, 0x6982, 0x8000, 0x200c, 0x697e,
++      0x080c, 0x580a, 0x002e, 0x004e, 0x015e, 0x00fe, 0x00ee, 0x00de,
++      0x0005, 0x2001, 0xc60e, 0x2004, 0xd084, 0x0120, 0x080c, 0x1602,
++      0x1904, 0xb902, 0x6013, 0x0100, 0x6003, 0x0001, 0x6007, 0x0041,
++      0x080c, 0x7999, 0x080c, 0x7e94, 0x0c28, 0x2069, 0xcc92, 0x2d04,
++      0xa084, 0xff00, 0xa086, 0x1200, 0x11a8, 0x2069, 0xcc80, 0x686c,
++      0xa084, 0x00ff, 0x0016, 0x6110, 0xa18c, 0x0700, 0xa10d, 0x6112,
++      0x001e, 0x6003, 0x0001, 0x6007, 0x0043, 0x080c, 0x7999, 0x080c,
++      0x7e94, 0x0840, 0x6868, 0x602a, 0x686c, 0x602e, 0x6013, 0x0200,
++      0x6003, 0x0001, 0x6007, 0x0041, 0x080c, 0x7999, 0x080c, 0x7e94,
++      0x0804, 0xb94a, 0x2001, 0xc60d, 0x2004, 0xd0ec, 0x0120, 0x2011,
++      0x8049, 0x080c, 0x407d, 0x6013, 0x0300, 0x0010, 0x6013, 0x0100,
++      0x6003, 0x0001, 0x6007, 0x0041, 0x080c, 0x7999, 0x080c, 0x7e94,
++      0x0804, 0xb94a, 0x6013, 0x0500, 0x0c98, 0x6013, 0x0600, 0x0804,
++      0xb965, 0x6013, 0x0200, 0x0804, 0xb965, 0xa186, 0x0013, 0x1170,
++      0x6004, 0xa08a, 0x0040, 0x0a0c, 0x1519, 0xa08a, 0x0053, 0x1a0c,
++      0x1519, 0xa082, 0x0040, 0x2008, 0x0804, 0xba3f, 0xa186, 0x0051,
++      0x0138, 0xa186, 0x0047, 0x11d8, 0x6004, 0xa086, 0x0041, 0x0518,
++      0x2001, 0x0109, 0x2004, 0xd084, 0x01f0, 0x0126, 0x2091, 0x2800,
++      0x0006, 0x0016, 0x0026, 0x080c, 0x7873, 0x002e, 0x001e, 0x000e,
++      0x012e, 0x6000, 0xa086, 0x0002, 0x1170, 0x0804, 0xba82, 0xa186,
++      0x0027, 0x0120, 0xa186, 0x0014, 0x190c, 0x1519, 0x6004, 0xa082,
++      0x0040, 0x2008, 0x001a, 0x080c, 0x962a, 0x0005, 0xba09, 0xba0b,
++      0xba0b, 0xba2f, 0xba09, 0xba09, 0xba09, 0xba09, 0xba09, 0xba09,
++      0xba09, 0xba09, 0xba09, 0xba09, 0xba09, 0xba09, 0xba09, 0xba09,
++      0xba09, 0x080c, 0x1519, 0x080c, 0x7db1, 0x080c, 0x7e94, 0x0036,
++      0x00d6, 0x6010, 0xa06d, 0x01c0, 0xad84, 0xf000, 0x01a8, 0x6003,
++      0x0002, 0x6018, 0x2004, 0xd0bc, 0x1178, 0x2019, 0x0004, 0x080c,
++      0xc141, 0x6013, 0x0000, 0x6014, 0xa005, 0x1120, 0x2001, 0xc8fe,
++      0x2004, 0x6016, 0x6003, 0x0007, 0x00de, 0x003e, 0x0005, 0x00d6,
++      0x080c, 0x7db1, 0x080c, 0x7e94, 0x080c, 0xac91, 0x0120, 0x6010,
++      0x2068, 0x080c, 0x1619, 0x080c, 0xae54, 0x00de, 0x0005, 0x0002,
++      0xba53, 0xba70, 0xba5c, 0xba7c, 0xba53, 0xba53, 0xba53, 0xba53,
++      0xba53, 0xba53, 0xba53, 0xba53, 0xba53, 0xba53, 0xba53, 0xba53,
++      0xba53, 0xba53, 0xba53, 0x080c, 0x1519, 0x6010, 0xa088, 0x0013,
++      0x2104, 0xa085, 0x0400, 0x200a, 0x080c, 0x7db1, 0x6010, 0xa080,
++      0x0013, 0x2004, 0xd0b4, 0x0138, 0x6003, 0x0007, 0x2009, 0x0043,
++      0x080c, 0x9613, 0x0010, 0x6003, 0x0002, 0x080c, 0x7e94, 0x0005,
++      0x080c, 0x7db1, 0x080c, 0xc37f, 0x1120, 0x080c, 0x7103, 0x080c,
++      0x95e3, 0x080c, 0x7e94, 0x0005, 0x080c, 0x7db1, 0x2009, 0x0041,
++      0x0804, 0xbbcb, 0xa182, 0x0040, 0x0002, 0xba98, 0xba9a, 0xba98,
++      0xba98, 0xba98, 0xba98, 0xba98, 0xba9b, 0xba98, 0xba98, 0xba98,
++      0xba98, 0xba98, 0xba98, 0xba98, 0xba98, 0xba98, 0xbaa6, 0xba98,
++      0x080c, 0x1519, 0x0005, 0x6003, 0x0004, 0x6110, 0x20e1, 0x0005,
++      0x3d18, 0x3e20, 0x2c10, 0x080c, 0x1870, 0x0005, 0x00d6, 0x080c,
++      0x7103, 0x00de, 0x080c, 0xc3e2, 0x080c, 0x95e3, 0x0005, 0xa182,
++      0x0040, 0x0002, 0xbac5, 0xbac5, 0xbac5, 0xbac5, 0xbac5, 0xbac5,
++      0xbac5, 0xbac7, 0xbac5, 0xbaca, 0xbb03, 0xbac5, 0xbac5, 0xbac5,
++      0xbac5, 0xbb03, 0xbac5, 0xbac5, 0xbac5, 0x080c, 0x1519, 0x080c,
++      0x962a, 0x0005, 0x2001, 0xc672, 0x2004, 0xd0e4, 0x0158, 0x2001,
++      0x0100, 0x2004, 0xa082, 0x0005, 0x0228, 0x2001, 0x011f, 0x2004,
++      0x6036, 0x0010, 0x6037, 0x0000, 0x080c, 0x7e47, 0x080c, 0x7f6e,
++      0x6010, 0x00d6, 0x2068, 0x684c, 0xd0fc, 0x0150, 0xa08c, 0x0003,
++      0xa18e, 0x0002, 0x0168, 0x2009, 0x0041, 0x00de, 0x0804, 0xbbcb,
++      0x6003, 0x0007, 0x6017, 0x0000, 0x080c, 0x7103, 0x00de, 0x0005,
++      0x080c, 0xc37f, 0x0110, 0x00de, 0x0005, 0x080c, 0x7103, 0x080c,
++      0x95e3, 0x00de, 0x0ca0, 0x0036, 0x080c, 0x7e47, 0x080c, 0x7f6e,
++      0x6010, 0x00d6, 0x2068, 0x6018, 0x2004, 0xd0bc, 0x0188, 0x684c,
++      0xa084, 0x0003, 0xa086, 0x0002, 0x0140, 0x687c, 0x632c, 0xa31a,
++      0x632e, 0x6880, 0x6328, 0xa31b, 0x632a, 0x6003, 0x0002, 0x0080,
++      0x2019, 0x0004, 0x080c, 0xc141, 0x6014, 0xa005, 0x1128, 0x2001,
++      0xc8fe, 0x2004, 0x8003, 0x6016, 0x6013, 0x0000, 0x6003, 0x0007,
++      0x00de, 0x003e, 0x0005, 0xa186, 0x0013, 0x1150, 0x6004, 0xa086,
++      0x0042, 0x190c, 0x1519, 0x080c, 0x7db1, 0x080c, 0x7e94, 0x0005,
++      0xa186, 0x0027, 0x0118, 0xa186, 0x0014, 0x1180, 0x6004, 0xa086,
++      0x0042, 0x190c, 0x1519, 0x2001, 0x0007, 0x080c, 0x52be, 0x080c,
++      0x7db1, 0x080c, 0xae54, 0x080c, 0x7e94, 0x0005, 0xa182, 0x0040,
++      0x0002, 0xbb6c, 0xbb6c, 0xbb6c, 0xbb6c, 0xbb6c, 0xbb6c, 0xbb6c,
++      0xbb6e, 0xbb7a, 0xbb6c, 0xbb6c, 0xbb6c, 0xbb6c, 0xbb6c, 0xbb6c,
++      0xbb6c, 0xbb6c, 0xbb6c, 0xbb6c, 0x080c, 0x1519, 0x0036, 0x0046,
++      0x20e1, 0x0005, 0x3d18, 0x3e20, 0x2c10, 0x080c, 0x1870, 0x004e,
++      0x003e, 0x0005, 0x6010, 0x00d6, 0x2068, 0x6810, 0x6a14, 0x0006,
++      0x0046, 0x0056, 0x6c7c, 0xa422, 0x6d80, 0x2200, 0xa52b, 0x602c,
++      0xa420, 0x642e, 0x6028, 0xa529, 0x652a, 0x005e, 0x004e, 0x000e,
++      0xa20d, 0x1178, 0x684c, 0xd0fc, 0x0120, 0x2009, 0x0041, 0x00de,
++      0x0490, 0x6003, 0x0007, 0x6017, 0x0000, 0x080c, 0x7103, 0x00de,
++      0x0005, 0x0006, 0x00f6, 0x2c78, 0x080c, 0x56c3, 0x00fe, 0x000e,
++      0x0120, 0x6003, 0x0002, 0x00de, 0x0005, 0x2009, 0xc60d, 0x210c,
++      0xd19c, 0x0118, 0x6003, 0x0007, 0x0010, 0x6003, 0x0006, 0x0021,
++      0x080c, 0x7105, 0x00de, 0x0005, 0xd2fc, 0x0140, 0x8002, 0x8000,
++      0x8212, 0xa291, 0x0000, 0x2009, 0x0009, 0x0010, 0x2009, 0x0015,
++      0x6a6a, 0x6866, 0x0005, 0xa182, 0x0040, 0x0208, 0x0062, 0xa186,
++      0x0013, 0x0120, 0xa186, 0x0014, 0x190c, 0x1519, 0x6020, 0xd0dc,
++      0x090c, 0x1519, 0x0005, 0xbbee, 0xbbf5, 0xbc01, 0xbc0d, 0xbbee,
++      0xbbee, 0xbbee, 0xbc1c, 0xbbee, 0xbbf0, 0xbbf0, 0xbbee, 0xbbee,
++      0xbbee, 0xbbee, 0xbbf0, 0xbbee, 0xbbf0, 0xbbee, 0x080c, 0x1519,
++      0x6020, 0xd0dc, 0x090c, 0x1519, 0x0005, 0x6003, 0x0001, 0x6106,
++      0x080c, 0x7999, 0x0126, 0x2091, 0x8000, 0x080c, 0x7e94, 0x012e,
++      0x0005, 0x6003, 0x0001, 0x6106, 0x080c, 0x7999, 0x0126, 0x2091,
++      0x8000, 0x080c, 0x7e94, 0x012e, 0x0005, 0x6003, 0x0003, 0x6106,
++      0x2c10, 0x080c, 0x2068, 0x0126, 0x2091, 0x8000, 0x080c, 0x79fc,
++      0x080c, 0x7f6e, 0x012e, 0x0005, 0xa016, 0x080c, 0x1870, 0x0005,
++      0x0126, 0x2091, 0x8000, 0x0036, 0x00d6, 0xa182, 0x0040, 0x0023,
++      0x00de, 0x003e, 0x012e, 0x0005, 0xbc3c, 0xbc3e, 0xbc50, 0xbc6b,
++      0xbc3c, 0xbc3c, 0xbc3c, 0xbc80, 0xbc3c, 0xbc3c, 0xbc3c, 0xbc3c,
++      0xbc3c, 0xbc3c, 0xbc3c, 0xbc3c, 0x080c, 0x1519, 0x6010, 0x2068,
++      0x684c, 0xd0fc, 0x01f8, 0xa09c, 0x0003, 0xa39e, 0x0003, 0x01d0,
++      0x6003, 0x0001, 0x6106, 0x080c, 0x7999, 0x080c, 0x7e94, 0x0498,
++      0x6010, 0x2068, 0x684c, 0xd0fc, 0x0168, 0xa09c, 0x0003, 0xa39e,
++      0x0003, 0x0140, 0x6003, 0x0001, 0x6106, 0x080c, 0x7999, 0x080c,
++      0x7e94, 0x0408, 0x6013, 0x0000, 0x6017, 0x0000, 0x2019, 0x0004,
++      0x080c, 0xc141, 0x00c0, 0x6010, 0x2068, 0x684c, 0xd0fc, 0x0d90,
++      0xa09c, 0x0003, 0xa39e, 0x0003, 0x0d68, 0x6003, 0x0003, 0x6106,
++      0x2c10, 0x080c, 0x2068, 0x080c, 0x79fc, 0x080c, 0x7f6e, 0x0018,
++      0xa016, 0x080c, 0x1870, 0x0005, 0x080c, 0x7db1, 0x6110, 0x81ff,
++      0x0158, 0x00d6, 0x2168, 0x080c, 0xc4d7, 0x0036, 0x2019, 0x0029,
++      0x080c, 0xc141, 0x003e, 0x00de, 0x080c, 0xae54, 0x080c, 0x7e94,
++      0x0005, 0x080c, 0x7e47, 0x6110, 0x81ff, 0x0158, 0x00d6, 0x2168,
++      0x080c, 0xc4d7, 0x0036, 0x2019, 0x0029, 0x080c, 0xc141, 0x003e,
++      0x00de, 0x080c, 0xae54, 0x080c, 0x7f6e, 0x0005, 0xa182, 0x0085,
++      0x0002, 0xbcba, 0xbcb8, 0xbcb8, 0xbcc6, 0xbcb8, 0xbcb8, 0xbcb8,
++      0x080c, 0x1519, 0x6003, 0x000b, 0x6106, 0x080c, 0x7999, 0x0126,
++      0x2091, 0x8000, 0x080c, 0x7e94, 0x012e, 0x0005, 0x0026, 0x00e6,
++      0x080c, 0xc378, 0x0118, 0x080c, 0x95e3, 0x00d8, 0x2071, 0xcc80,
++      0x7224, 0x6212, 0x7220, 0x080c, 0xbfef, 0x0118, 0x6007, 0x0086,
++      0x0040, 0x6007, 0x0087, 0x7224, 0xa296, 0xffff, 0x1110, 0x6007,
++      0x0086, 0x6003, 0x0001, 0x080c, 0x7999, 0x080c, 0x7e94, 0x080c,
++      0x7f6e, 0x00ee, 0x002e, 0x0005, 0xa186, 0x0013, 0x1160, 0x6004,
++      0xa08a, 0x0085, 0x0a0c, 0x1519, 0xa08a, 0x008c, 0x1a0c, 0x1519,
++      0xa082, 0x0085, 0x00a2, 0xa186, 0x0027, 0x0130, 0xa186, 0x0014,
++      0x0118, 0x080c, 0x962a, 0x0050, 0x2001, 0x0007, 0x080c, 0x52be,
++      0x080c, 0x7db1, 0x080c, 0xae54, 0x080c, 0x7e94, 0x0005, 0xbd16,
++      0xbd18, 0xbd18, 0xbd16, 0xbd16, 0xbd16, 0xbd16, 0x080c, 0x1519,
++      0x080c, 0x7db1, 0x080c, 0xae54, 0x080c, 0x7e94, 0x0005, 0xa182,
++      0x0085, 0x0a0c, 0x1519, 0xa182, 0x008c, 0x1a0c, 0x1519, 0xa182,
++      0x0085, 0x0002, 0xbd31, 0xbd31, 0xbd31, 0xbd33, 0xbd31, 0xbd31,
++      0xbd31, 0x080c, 0x1519, 0x0005, 0xa186, 0x0013, 0x0148, 0xa186,
++      0x0014, 0x0130, 0xa186, 0x0027, 0x0118, 0x080c, 0x962a, 0x0030,
++      0x080c, 0x7db1, 0x080c, 0xae54, 0x080c, 0x7e94, 0x0005, 0x0036,
++      0x080c, 0xc3e2, 0x603f, 0x0000, 0x2019, 0x000b, 0x0031, 0x601f,
++      0x0006, 0x6003, 0x0007, 0x003e, 0x0005, 0x0126, 0x0036, 0x2091,
++      0x8000, 0x0086, 0x2c40, 0x0096, 0x2049, 0x0000, 0x080c, 0x8fc9,
++      0x009e, 0x008e, 0x1578, 0x0076, 0x2c38, 0x080c, 0x906f, 0x007e,
++      0x1548, 0x6000, 0xa086, 0x0000, 0x0528, 0x601c, 0xa086, 0x0007,
++      0x0508, 0x00d6, 0x6000, 0xa086, 0x0004, 0x1150, 0x080c, 0xc3e2,
++      0x601f, 0x0007, 0x2001, 0xc8fd, 0x2004, 0x6016, 0x080c, 0x1953,
++      0x6010, 0x2068, 0x080c, 0xac91, 0x0110, 0x080c, 0xc141, 0x00de,
++      0x6013, 0x0000, 0x080c, 0xc3e2, 0x601f, 0x0007, 0x2001, 0xc8fd,
++      0x2004, 0x6016, 0x003e, 0x012e, 0x0005, 0x00f6, 0x00c6, 0x0036,
++      0x0156, 0x2079, 0xcc80, 0x7938, 0x783c, 0x080c, 0x29c7, 0x15b0,
++      0x0016, 0x00c6, 0x080c, 0x533d, 0x1578, 0x001e, 0x002e, 0x0026,
++      0x0016, 0x2019, 0x0029, 0x080c, 0x9132, 0x080c, 0x7b16, 0x0076,
++      0x2039, 0x0000, 0x080c, 0x7a0e, 0x007e, 0x001e, 0x0076, 0x2039,
++      0x0000, 0x080c, 0xbef7, 0x007e, 0x080c, 0x553e, 0x0026, 0x6204,
++      0xa294, 0xff00, 0x8217, 0xa286, 0x0006, 0x0118, 0xa286, 0x0004,
++      0x1118, 0x62a0, 0x080c, 0x2eff, 0x002e, 0x001e, 0x080c, 0x4f47,
++      0x6612, 0x6516, 0xa006, 0x0010, 0x00ce, 0x001e, 0x015e, 0x003e,
++      0x00ce, 0x00fe, 0x0005, 0x00c6, 0x00d6, 0x00e6, 0x0016, 0x2009,
++      0xc621, 0x2104, 0xa086, 0x0074, 0x1904, 0xbe30, 0x2069, 0xcc8e,
++      0x690c, 0xa182, 0x0100, 0x06c0, 0x6908, 0xa184, 0x8000, 0x05e8,
++      0x2001, 0xc8e5, 0x2004, 0xa005, 0x1160, 0x6018, 0x2070, 0x7010,
++      0xa084, 0x00ff, 0x0118, 0x7000, 0xd0f4, 0x0118, 0xa184, 0x0800,
++      0x0560, 0x6910, 0xa18a, 0x0001, 0x0610, 0x6914, 0x2069, 0xccae,
++      0x6904, 0x81ff, 0x1198, 0x690c, 0xa182, 0x0100, 0x02a8, 0x6908,
++      0x81ff, 0x1178, 0x6910, 0xa18a, 0x0001, 0x0288, 0x6918, 0xa18a,
++      0x0001, 0x0298, 0x00d0, 0x6013, 0x0100, 0x00a0, 0x6013, 0x0300,
++      0x0088, 0x6013, 0x0500, 0x0070, 0x6013, 0x0700, 0x0058, 0x6013,
++      0x0900, 0x0040, 0x6013, 0x0b00, 0x0028, 0x6013, 0x0f00, 0x0010,
++      0x6013, 0x2d00, 0xa085, 0x0001, 0x0008, 0xa006, 0x001e, 0x00ee,
++      0x00de, 0x00ce, 0x0005, 0x00c6, 0x00d6, 0x0026, 0x0036, 0x0156,
++      0x6218, 0x2268, 0x6b04, 0xa394, 0x00ff, 0xa286, 0x0006, 0x0190,
++      0xa286, 0x0004, 0x0178, 0xa394, 0xff00, 0x8217, 0xa286, 0x0006,
++      0x0148, 0xa286, 0x0004, 0x0130, 0x00c6, 0x2d60, 0x080c, 0x534c,
++      0x00ce, 0x04c0, 0x2011, 0xcc96, 0xad98, 0x000a, 0x20a9, 0x0004,
++      0x080c, 0xa103, 0x1580, 0x2011, 0xcc9a, 0xad98, 0x0006, 0x20a9,
++      0x0004, 0x080c, 0xa103, 0x1538, 0x0046, 0x0016, 0x6aa0, 0xa294,
++      0x00ff, 0x8227, 0xa006, 0x2009, 0xc653, 0x210c, 0xd1a4, 0x0138,
++      0x2009, 0x0029, 0x080c, 0xc190, 0x6800, 0xc0e5, 0x6802, 0x2019,
++      0x0029, 0x080c, 0x7b16, 0x0076, 0x2039, 0x0000, 0x080c, 0x7a0e,
++      0x2c08, 0x080c, 0xbef7, 0x007e, 0x2001, 0x0007, 0x080c, 0x52be,
++      0x001e, 0x004e, 0xa006, 0x015e, 0x003e, 0x002e, 0x00de, 0x00ce,
++      0x0005, 0x00d6, 0x2069, 0xcc8e, 0x6800, 0xa086, 0x0800, 0x0118,
++      0x6013, 0x0000, 0x0008, 0xa006, 0x00de, 0x0005, 0x00c6, 0x00f6,
++      0x0016, 0x0026, 0x0036, 0x0156, 0x2079, 0xcc8c, 0x7930, 0x7834,
++      0x080c, 0x29c7, 0x11a0, 0x080c, 0x533d, 0x1188, 0x2011, 0xcc90,
++      0xac98, 0x000a, 0x20a9, 0x0004, 0x080c, 0xa103, 0x1140, 0x2011,
++      0xcc94, 0xac98, 0x0006, 0x20a9, 0x0004, 0x080c, 0xa103, 0x015e,
++      0x003e, 0x002e, 0x001e, 0x00fe, 0x00ce, 0x0005, 0x00c6, 0x0006,
++      0x0016, 0x0026, 0x0036, 0x0156, 0x2011, 0xcc83, 0x2204, 0x8211,
++      0x220c, 0x080c, 0x29c7, 0x11a0, 0x080c, 0x533d, 0x1188, 0x2011,
++      0xcc96, 0xac98, 0x000a, 0x20a9, 0x0004, 0x080c, 0xa103, 0x1140,
++      0x2011, 0xcc9a, 0xac98, 0x0006, 0x20a9, 0x0004, 0x080c, 0xa103,
++      0x015e, 0x003e, 0x002e, 0x001e, 0x000e, 0x00ce, 0x0005, 0x00e6,
++      0x00c6, 0x0086, 0x0076, 0x0066, 0x0056, 0x0046, 0x0026, 0x0126,
++      0x2091, 0x8000, 0x2740, 0x2029, 0xc930, 0x252c, 0x2021, 0xc936,
++      0x2424, 0x2061, 0xce00, 0x2071, 0xc600, 0x7648, 0x7068, 0x81ff,
++      0x0150, 0x0006, 0xa186, 0xca3c, 0x000e, 0x0128, 0x8001, 0xa602,
++      0x1a04, 0xbf78, 0x0018, 0xa606, 0x0904, 0xbf78, 0x2100, 0xac06,
++      0x0904, 0xbf6f, 0x080c, 0xc1b8, 0x0904, 0xbf6f, 0x671c, 0xa786,
++      0x0001, 0x0904, 0xbfc1, 0xa786, 0x0004, 0x0904, 0xbfc1, 0xa786,
++      0x0007, 0x05e8, 0x2500, 0xac06, 0x05d0, 0x2400, 0xac06, 0x05b8,
++      0x080c, 0xc1c8, 0x15a0, 0x88ff, 0x0118, 0x6050, 0xa906, 0x1578,
++      0x00d6, 0x6000, 0xa086, 0x0004, 0x1120, 0x0016, 0x080c, 0x1953,
++      0x001e, 0xa786, 0x0008, 0x1148, 0x080c, 0xae8f, 0x1130, 0x080c,
++      0x9c09, 0x00de, 0x080c, 0xae54, 0x00d0, 0x6010, 0x2068, 0x080c,
++      0xac91, 0x0190, 0xa786, 0x0003, 0x1528, 0x6837, 0x0103, 0x6b4a,
++      0x6847, 0x0000, 0x080c, 0xc4d7, 0x0016, 0x080c, 0xaf03, 0x080c,
++      0x580a, 0x001e, 0x080c, 0xae48, 0x00de, 0x080c, 0xae54, 0xace0,
++      0x0018, 0x2001, 0xc617, 0x2004, 0xac02, 0x1210, 0x0804, 0xbf0b,
++      0x012e, 0x002e, 0x004e, 0x005e, 0x006e, 0x007e, 0x008e, 0x00ce,
++      0x00ee, 0x0005, 0xa786, 0x0006, 0x1150, 0xa386, 0x0005, 0x0128,
++      0x080c, 0xc4d7, 0x080c, 0xc141, 0x08f8, 0x00de, 0x0c00, 0xa786,
++      0x0009, 0x1548, 0x6000, 0xa086, 0x0004, 0x1128, 0x00c6, 0x080c,
++      0x761a, 0x00ce, 0x00e8, 0x6000, 0xa086, 0x0003, 0x11c8, 0x080c,
++      0x7e47, 0x00e6, 0x00d6, 0x6110, 0x2168, 0x080c, 0xac91, 0x0140,
++      0x6018, 0x2070, 0x70b3, 0x0000, 0x70b7, 0x0000, 0x080c, 0x580a,
++      0x00de, 0x00ee, 0x00c6, 0x080c, 0x95e3, 0x00ce, 0x080c, 0x7f6e,
++      0x00de, 0x0804, 0xbf6f, 0xa786, 0x000a, 0x0904, 0xbf5f, 0x0804,
++      0xbf5d, 0x080c, 0xc1c8, 0x1904, 0xbf6f, 0x81ff, 0x0904, 0xbf6f,
++      0xa180, 0x0001, 0x2004, 0xa086, 0x0018, 0x0138, 0xa180, 0x0001,
++      0x2004, 0xa086, 0x002d, 0x1904, 0xbf6f, 0x6000, 0xa086, 0x0002,
++      0x1904, 0xbf6f, 0x080c, 0xae7e, 0x0138, 0x080c, 0xae8f, 0x1904,
++      0xbf6f, 0x080c, 0x9c09, 0x0038, 0x080c, 0x2e6c, 0x080c, 0xae8f,
++      0x1110, 0x080c, 0x9c09, 0x080c, 0xae54, 0x0804, 0xbf6f, 0x00c6,
++      0x00e6, 0x0016, 0x2c08, 0x2170, 0xa006, 0x080c, 0xc162, 0x001e,
++      0x0120, 0x601c, 0xa084, 0x000f, 0x001b, 0x00ee, 0x00ce, 0x0005,
++      0xc008, 0xc008, 0xc008, 0xc008, 0xc008, 0xc008, 0xc00a, 0xc008,
++      0xa006, 0x0005, 0x0046, 0x0016, 0x7018, 0xa080, 0x0028, 0x2024,
++      0xa4a4, 0x00ff, 0x8427, 0x2c00, 0x2009, 0x0020, 0x080c, 0xc190,
++      0x001e, 0x004e, 0x0036, 0x2019, 0x0002, 0x080c, 0xbd55, 0x003e,
++      0xa085, 0x0001, 0x0005, 0x2001, 0x0001, 0x080c, 0x527f, 0x0156,
++      0x0016, 0x0026, 0x0036, 0x20a9, 0x0004, 0x2019, 0xc605, 0x2011,
++      0xcc96, 0x080c, 0xa103, 0x003e, 0x002e, 0x001e, 0x015e, 0xa005,
++      0x0005, 0x00f6, 0x00e6, 0x00c6, 0x0086, 0x0076, 0x0066, 0x0026,
++      0x0126, 0x2091, 0x8000, 0x2740, 0x2061, 0xce00, 0x2079, 0x0001,
++      0x8fff, 0x0904, 0xc097, 0x2071, 0xc600, 0x7648, 0x7068, 0x8001,
++      0xa602, 0x1a04, 0xc097, 0x88ff, 0x0128, 0x2800, 0xac06, 0x15b0,
++      0x2079, 0x0000, 0x080c, 0xc1b8, 0x0588, 0x2400, 0xac06, 0x0570,
++      0x671c, 0xa786, 0x0006, 0x1550, 0xa786, 0x0007, 0x0538, 0x88ff,
++      0x1140, 0x6018, 0xa206, 0x1510, 0x85ff, 0x0118, 0x6050, 0xa106,
++      0x11e8, 0x00d6, 0x6000, 0xa086, 0x0004, 0x1150, 0x080c, 0xc3e2,
++      0x601f, 0x0007, 0x2001, 0xc8fd, 0x2004, 0x6016, 0x080c, 0x1953,
++      0x6010, 0x2068, 0x080c, 0xac91, 0x0120, 0x0046, 0x080c, 0xc141,
++      0x004e, 0x00de, 0x080c, 0xae54, 0x88ff, 0x1198, 0xace0, 0x0018,
++      0x2001, 0xc617, 0x2004, 0xac02, 0x1210, 0x0804, 0xc048, 0xa006,
++      0x012e, 0x002e, 0x006e, 0x007e, 0x008e, 0x00ce, 0x00ee, 0x00fe,
++      0x0005, 0xa8c5, 0x0001, 0x0ca0, 0x0076, 0x0056, 0x0086, 0x2041,
++      0x0000, 0x2029, 0x0001, 0x2c20, 0x2019, 0x0002, 0x6218, 0x0096,
++      0x2049, 0x0000, 0x080c, 0x8fc9, 0x009e, 0x008e, 0x2039, 0x0000,
++      0x080c, 0x906f, 0x080c, 0xc039, 0x005e, 0x007e, 0x0005, 0x0026,
++      0x0046, 0x0056, 0x0076, 0x00c6, 0x0156, 0x2c20, 0x2128, 0x20a9,
++      0x007f, 0x2009, 0x0000, 0x0016, 0x0036, 0x080c, 0x533d, 0x11b0,
++      0x2c10, 0x0056, 0x0086, 0x2041, 0x0000, 0x2508, 0x2029, 0x0001,
++      0x0096, 0x2049, 0x0000, 0x080c, 0x8fc9, 0x009e, 0x008e, 0x2039,
++      0x0000, 0x080c, 0x906f, 0x080c, 0xc039, 0x005e, 0x003e, 0x001e,
++      0x8108, 0x1f04, 0xc0cb, 0x015e, 0x00ce, 0x007e, 0x005e, 0x004e,
++      0x002e, 0x0005, 0x0076, 0x0056, 0x6218, 0x0086, 0x2041, 0x0000,
++      0x2029, 0x0001, 0x2019, 0x0048, 0x0096, 0x2049, 0x0000, 0x080c,
++      0x8fc9, 0x009e, 0x008e, 0x2039, 0x0000, 0x080c, 0x906f, 0x2c20,
++      0x080c, 0xc039, 0x005e, 0x007e, 0x0005, 0x0026, 0x0046, 0x0056,
++      0x0076, 0x00c6, 0x0156, 0x2c20, 0x20a9, 0x007f, 0x2009, 0x0000,
++      0x0016, 0x0036, 0x080c, 0x533d, 0x11c0, 0x2c10, 0x0086, 0x2041,
++      0x0000, 0x2828, 0x0046, 0x2021, 0x0001, 0x080c, 0xc3c4, 0x004e,
++      0x0096, 0x2049, 0x0000, 0x080c, 0x8fc9, 0x009e, 0x008e, 0x2039,
++      0x0000, 0x080c, 0x906f, 0x080c, 0xc039, 0x003e, 0x001e, 0x8108,
++      0x1f04, 0xc118, 0x015e, 0x00ce, 0x007e, 0x005e, 0x004e, 0x002e,
++      0x0005, 0x0016, 0x00f6, 0x3800, 0xd08c, 0x0130, 0xad82, 0x1000,
++      0x02b0, 0xad82, 0xc600, 0x0230, 0xad82, 0xfe00, 0x0280, 0xad82,
++      0xffff, 0x1268, 0x6800, 0xa07d, 0x0138, 0x6803, 0x0000, 0x6b52,
++      0x080c, 0x580a, 0x2f68, 0x0cb0, 0x6b52, 0x080c, 0x580a, 0x00fe,
++      0x001e, 0x0005, 0x00e6, 0x0046, 0x0036, 0x2061, 0xce00, 0xa005,
++      0x1138, 0x2071, 0xc600, 0x7448, 0x7068, 0x8001, 0xa402, 0x12d8,
++      0x2100, 0xac06, 0x0168, 0x6000, 0xa086, 0x0000, 0x0148, 0x6008,
++      0xa206, 0x1130, 0x6018, 0xa1a0, 0x0006, 0x2424, 0xa406, 0x0140,
++      0xace0, 0x0018, 0x2001, 0xc617, 0x2004, 0xac02, 0x1220, 0x0c40,
++      0xa085, 0x0001, 0x0008, 0xa006, 0x003e, 0x004e, 0x00ee, 0x0005,
++      0x00d6, 0x0006, 0x080c, 0x1602, 0x000e, 0x090c, 0x1519, 0x6837,
++      0x010d, 0x685e, 0x0026, 0x2010, 0x080c, 0xac81, 0x2001, 0x0000,
++      0x0120, 0x2200, 0xa080, 0x0014, 0x2004, 0x002e, 0x684a, 0x6956,
++      0x6c46, 0x684f, 0x0000, 0x2001, 0xc905, 0x2004, 0x6852, 0xa006,
++      0x68b2, 0x6802, 0x683a, 0x685a, 0x080c, 0x580a, 0x00de, 0x0005,
++      0x6700, 0xa786, 0x0000, 0x0158, 0xa786, 0x0001, 0x0140, 0xa786,
++      0x000a, 0x0128, 0xa786, 0x0009, 0x0110, 0xa085, 0x0001, 0x0005,
++      0x00e6, 0x6018, 0x2070, 0x70a0, 0xa206, 0x00ee, 0x0005, 0x0016,
++      0x6004, 0xa08e, 0x001e, 0x11a0, 0x8007, 0x6130, 0xa18c, 0x00ff,
++      0xa105, 0x6032, 0x6007, 0x0085, 0x6003, 0x000b, 0x601f, 0x0005,
++      0x2001, 0xc8fe, 0x2004, 0x6016, 0x080c, 0x7999, 0x080c, 0x7e94,
++      0x001e, 0x0005, 0xe000, 0xe000, 0x0005, 0x6020, 0xd0e4, 0x0158,
++      0xd0cc, 0x0118, 0x080c, 0xaf6c, 0x0030, 0x080c, 0xc3e2, 0x080c,
++      0x7103, 0x080c, 0x95e3, 0x0005, 0xa280, 0x0007, 0x2004, 0xa084,
++      0x000f, 0x0002, 0xc20b, 0xc20b, 0xc20b, 0xc210, 0xc20b, 0xc20d,
++      0xc20d, 0xc20b, 0xc20d, 0xa006, 0x0005, 0x00c6, 0x2260, 0x00ce,
++      0xa085, 0x0001, 0x0005, 0xa280, 0x0007, 0x2004, 0xa084, 0x000f,
++      0x0002, 0xc222, 0xc222, 0xc222, 0xc222, 0xc222, 0xc222, 0xc22d,
++      0xc222, 0xc222, 0x6007, 0x003b, 0x602b, 0x0009, 0x6013, 0x2a00,
++      0x6003, 0x0001, 0x080c, 0x7999, 0x0005, 0x00c6, 0x2260, 0x080c,
++      0xc3e2, 0x603f, 0x0000, 0x6020, 0xc0f4, 0xc0cc, 0x6022, 0x6037,
++      0x0000, 0x00ce, 0x00d6, 0x2268, 0xa186, 0x0007, 0x1904, 0xc288,
++      0x6810, 0xa005, 0x0138, 0xa080, 0x0013, 0x2004, 0xd0fc, 0x1110,
++      0x00de, 0x08c0, 0x6007, 0x003a, 0x6003, 0x0001, 0x080c, 0x7999,
++      0x080c, 0x7e94, 0x00c6, 0x2d60, 0x6100, 0xa186, 0x0002, 0x1904,
++      0xc311, 0x6010, 0xa005, 0x1138, 0x6000, 0xa086, 0x0007, 0x190c,
++      0x1519, 0x0804, 0xc311, 0xa08c, 0xf000, 0x1130, 0x0028, 0x2068,
++      0x6800, 0xa005, 0x1de0, 0x2d00, 0xa080, 0x0013, 0x2004, 0xa084,
++      0x0003, 0xa086, 0x0002, 0x1180, 0x6010, 0x2068, 0x684c, 0xc0dc,
++      0xc0f4, 0x684e, 0x6850, 0xc0f4, 0xc0fc, 0x6852, 0x2009, 0x0043,
++      0x080c, 0xbbcb, 0x0804, 0xc311, 0x2009, 0x0041, 0x0804, 0xc30b,
++      0xa186, 0x0005, 0x15f0, 0x6810, 0xa080, 0x0013, 0x2004, 0xd0bc,
++      0x1118, 0x00de, 0x0804, 0xc222, 0xd0b4, 0x0128, 0xd0fc, 0x090c,
++      0x1519, 0x0804, 0xc240, 0x6007, 0x003a, 0x6003, 0x0001, 0x080c,
++      0x7999, 0x080c, 0x7e94, 0x00c6, 0x2d60, 0x6100, 0xa186, 0x0002,
++      0x0120, 0xa186, 0x0004, 0x1904, 0xc311, 0x2071, 0xc96a, 0x7000,
++      0xa086, 0x0003, 0x1128, 0x7004, 0xac06, 0x1110, 0x7003, 0x0000,
++      0x6810, 0xa080, 0x0013, 0x200c, 0xc1f4, 0xc1dc, 0x2102, 0x8000,
++      0x200c, 0xc1f4, 0xc1fc, 0xc1bc, 0x2102, 0x2009, 0x0042, 0x0804,
++      0xc30b, 0x0036, 0x00d6, 0x00d6, 0x080c, 0x1602, 0x003e, 0x090c,
++      0x1519, 0x6837, 0x010d, 0x6803, 0x0000, 0x683b, 0x0000, 0x685b,
++      0x0000, 0x6b5e, 0x6857, 0x0045, 0x2c00, 0x6862, 0x6034, 0x6872,
++      0x2360, 0x6020, 0xc0dd, 0x6022, 0x6018, 0xa080, 0x0028, 0x2004,
++      0xa084, 0x00ff, 0x8007, 0x6350, 0x6b4a, 0x6846, 0x684f, 0x0000,
++      0x6853, 0x0000, 0x6d6a, 0x6e66, 0x686f, 0x0001, 0x080c, 0x580a,
++      0x2019, 0x0045, 0x6008, 0x2068, 0x080c, 0xbd55, 0x2d00, 0x600a,
++      0x601f, 0x0006, 0x6003, 0x0007, 0x6017, 0x0000, 0x603f, 0x0000,
++      0x00de, 0x003e, 0x0038, 0x603f, 0x0000, 0x6003, 0x0007, 0x080c,
++      0xbbcb, 0x00ce, 0x00de, 0x0005, 0xa186, 0x0013, 0x1128, 0x6004,
++      0xa082, 0x0085, 0x2008, 0x00c2, 0xa186, 0x0027, 0x1178, 0x080c,
++      0x7db1, 0x0036, 0x00d6, 0x6010, 0x2068, 0x2019, 0x0004, 0x080c,
++      0xc141, 0x00de, 0x003e, 0x080c, 0x7e94, 0x0005, 0xa186, 0x0014,
++      0x0d70, 0x080c, 0x962a, 0x0005, 0xc33d, 0xc33b, 0xc33b, 0xc33b,
++      0xc33b, 0xc33b, 0xc33d, 0x080c, 0x1519, 0x080c, 0x7db1, 0x6003,
++      0x000c, 0x080c, 0x7e94, 0x0005, 0xa182, 0x008c, 0x1220, 0xa182,
++      0x0085, 0x0208, 0x001a, 0x080c, 0x962a, 0x0005, 0xc355, 0xc355,
++      0xc355, 0xc355, 0xc357, 0xc375, 0xc355, 0x080c, 0x1519, 0x00d6,
++      0x2c68, 0x080c, 0x958d, 0x01a0, 0x6003, 0x0001, 0x6007, 0x001e,
++      0x2009, 0xcc8e, 0x210c, 0x6136, 0x2009, 0xcc8f, 0x210c, 0x613a,
++      0x600b, 0xffff, 0x6918, 0x611a, 0x601f, 0x0004, 0x080c, 0x7999,
++      0x2d60, 0x080c, 0x95e3, 0x00de, 0x0005, 0x080c, 0x95e3, 0x0005,
++      0x00e6, 0x6018, 0x2070, 0x7000, 0xd0ec, 0x00ee, 0x0005, 0x6010,
++      0xa08c, 0xf000, 0x0904, 0xc3c3, 0xa080, 0x0013, 0x200c, 0xd1ec,
++      0x05d0, 0x2001, 0xc672, 0x2004, 0xd0ec, 0x05a8, 0x6003, 0x0002,
++      0x6020, 0xc0e5, 0x6022, 0xd1ac, 0x0180, 0x00f6, 0x2c78, 0x080c,
++      0x56bf, 0x00fe, 0x0150, 0x2001, 0xc8ff, 0x2004, 0x603e, 0x2009,
++      0xc672, 0x210c, 0xd1f4, 0x11e8, 0x0080, 0x2009, 0xc672, 0x210c,
++      0xd1f4, 0x0128, 0x6020, 0xc0e4, 0x6022, 0xa006, 0x00a0, 0x2001,
++      0xc8ff, 0x200c, 0x8103, 0xa100, 0x603e, 0x6018, 0xa088, 0x002f,
++      0x2104, 0xa005, 0x0118, 0xa088, 0x0003, 0x0cd0, 0x2c0a, 0x600f,
++      0x0000, 0xa085, 0x0001, 0x0005, 0x0016, 0x00c6, 0x00e6, 0x6150,
++      0xa2f0, 0x002f, 0x2e04, 0x2060, 0x8cff, 0x0180, 0x84ff, 0x1118,
++      0x6050, 0xa106, 0x1138, 0x600c, 0x2072, 0x080c, 0x7103, 0x080c,
++      0x95e3, 0x0010, 0xacf0, 0x0003, 0x2e64, 0x0c70, 0x00ee, 0x00ce,
++      0x001e, 0x0005, 0x00d6, 0x6018, 0xa0e8, 0x002f, 0x2d04, 0xa005,
++      0x0140, 0xac06, 0x0120, 0x2d04, 0xa0e8, 0x0003, 0x0cb8, 0x600c,
++      0x206a, 0x00de, 0x0005, 0x0026, 0x0036, 0x0156, 0x2011, 0xc628,
++      0x2204, 0xa084, 0x00ff, 0x2019, 0xcc8e, 0x2334, 0xa636, 0x11d8,
++      0x8318, 0x2334, 0x2204, 0xa084, 0xff00, 0xa636, 0x11a0, 0x2011,
++      0xcc90, 0x6018, 0xa098, 0x000a, 0x20a9, 0x0004, 0x080c, 0xa103,
++      0x1150, 0x2011, 0xcc94, 0x6018, 0xa098, 0x0006, 0x20a9, 0x0004,
++      0x080c, 0xa103, 0x1100, 0x015e, 0x003e, 0x002e, 0x0005, 0x00e6,
++      0x2071, 0xc600, 0x080c, 0x4f02, 0x080c, 0x2c62, 0x00ee, 0x0005,
++      0x00d6, 0x080c, 0x15e5, 0x0500, 0x2d10, 0xa290, 0x000d, 0x2013,
++      0x0134, 0x8210, 0x2013, 0x0000, 0x8210, 0x703c, 0x2012, 0x8210,
++      0x7038, 0x2012, 0x8210, 0x2218, 0x7048, 0x2012, 0x8210, 0x704c,
++      0x2012, 0x8210, 0x7050, 0x2012, 0x8210, 0x7054, 0x2012, 0x2300,
++      0x080c, 0x3e8f, 0x080c, 0x580a, 0x00de, 0x0005, 0x00d6, 0x0026,
++      0x080c, 0x1602, 0x090c, 0x1519, 0xad90, 0x000e, 0x20a9, 0x000c,
++      0x22a0, 0xa016, 0x42a4, 0xa186, 0x0046, 0x1118, 0x6837, 0x0136,
++      0x0038, 0x6837, 0x0138, 0xa186, 0x0041, 0x0110, 0x684b, 0x0001,
++      0x7038, 0xa084, 0xff00, 0x7240, 0xa294, 0xff00, 0x8007, 0xa215,
++      0x6a6a, 0xa186, 0x0046, 0x1168, 0x7038, 0xa084, 0x00ff, 0x723c,
++      0xa294, 0xff00, 0xa215, 0x6a6e, 0x723c, 0xa294, 0x00ff, 0x6a72,
++      0x0060, 0x7040, 0xa084, 0x00ff, 0x7244, 0xa294, 0xff00, 0xa215,
++      0x6a6e, 0x7244, 0xa294, 0x00ff, 0x6a72, 0xa186, 0x0046, 0x1118,
++      0xae90, 0x0012, 0x0010, 0xae90, 0x001a, 0x2204, 0x8007, 0x6876,
++      0x8210, 0x2204, 0x8007, 0x687a, 0x8210, 0x2204, 0x8007, 0x687e,
++      0x8210, 0x2204, 0x8007, 0x6882, 0x8210, 0xa186, 0x0046, 0x1118,
++      0xae90, 0x0016, 0x0010, 0xae90, 0x001e, 0x2204, 0x8007, 0x6886,
++      0x8210, 0x2204, 0x8007, 0x688a, 0x8210, 0x2204, 0x8007, 0x688e,
++      0x8210, 0x2204, 0x8007, 0x6892, 0x8210, 0xa186, 0x0046, 0x1118,
++      0xae90, 0x0022, 0x0010, 0xae90, 0x002a, 0x00d6, 0xade8, 0x0025,
++      0x20a9, 0x0008, 0x2204, 0x8007, 0x206a, 0x8210, 0x8d68, 0x1f04,
++      0xc4ca, 0x00de, 0x002e, 0x080c, 0x580a, 0x00de, 0x0005, 0x00e6,
++      0x6018, 0x2070, 0x7000, 0xd0fc, 0x0108, 0x0011, 0x00ee, 0x0005,
++      0x6850, 0xc0e5, 0x6852, 0x0005, 0x00e6, 0x00c6, 0x0076, 0x0066,
++      0x0056, 0x0046, 0x0026, 0x0016, 0x0126, 0x2091, 0x8000, 0x2029,
++      0xc930, 0x252c, 0x2021, 0xc936, 0x2424, 0x2061, 0xce00, 0x2071,
++      0xc600, 0x7648, 0x7068, 0xa606, 0x0578, 0x671c, 0xa786, 0x0001,
++      0x0118, 0xa786, 0x0008, 0x1500, 0x2500, 0xac06, 0x01e8, 0x2400,
++      0xac06, 0x01d0, 0x080c, 0xc1b8, 0x01b8, 0x080c, 0xc1c8, 0x11a0,
++      0x6000, 0xa086, 0x0004, 0x1120, 0x0016, 0x080c, 0x1953, 0x001e,
++      0x080c, 0xae7e, 0x1110, 0x080c, 0x2e6c, 0x080c, 0xae8f, 0x1110,
++      0x080c, 0x9c09, 0x080c, 0xae54, 0xace0, 0x0018, 0x2001, 0xc617,
++      0x2004, 0xac02, 0x1208, 0x0858, 0x012e, 0x001e, 0x002e, 0x004e,
++      0x005e, 0x006e, 0x007e, 0x00ce, 0x00ee, 0x0005, 0x0126, 0x0006,
++      0x00e6, 0x0016, 0x2091, 0x8000, 0x2071, 0xc640, 0xd5a4, 0x0118,
++      0x7034, 0x8000, 0x7036, 0xd5b4, 0x0118, 0x7030, 0x8000, 0x7032,
++      0xd5ac, 0x0178, 0x2500, 0xa084, 0x0007, 0xa08e, 0x0003, 0x0148,
++      0xa08e, 0x0004, 0x0130, 0xa08e, 0x0005, 0x0118, 0x2071, 0xc64a,
++      0x04c9, 0x001e, 0x00ee, 0x000e, 0x012e, 0x0005, 0x0126, 0x0006,
++      0x00e6, 0x0016, 0x2091, 0x8000, 0x2071, 0xc640, 0xd5a4, 0x0118,
++      0x7034, 0x8000, 0x7036, 0xd5b4, 0x0118, 0x7030, 0x8000, 0x7032,
++      0xd5ac, 0x0178, 0x2500, 0xa084, 0x0007, 0xa08e, 0x0003, 0x0148,
++      0xa08e, 0x0004, 0x0130, 0xa08e, 0x0005, 0x0118, 0x2071, 0xc64a,
++      0x0089, 0x001e, 0x00ee, 0x000e, 0x012e, 0x0005, 0x0126, 0x0006,
++      0x00e6, 0x2091, 0x8000, 0x2071, 0xc642, 0x0021, 0x00ee, 0x000e,
++      0x012e, 0x0005, 0x2e04, 0x8000, 0x2072, 0x1220, 0x8e70, 0x2e04,
++      0x8000, 0x2072, 0x0005, 0x00e6, 0x2071, 0xc640, 0x0c99, 0x00ee,
++      0x0005, 0x00e6, 0x2071, 0xc644, 0x0c69, 0x00ee, 0x0005, 0x0126,
++      0x0006, 0x00e6, 0x2091, 0x8000, 0x2071, 0xc640, 0x7044, 0x8000,
++      0x7046, 0x00ee, 0x000e, 0x012e, 0x0005, 0x0001, 0x0002, 0x0004,
++      0x0008, 0x0010, 0x0020, 0x0040, 0x0080, 0x0100, 0x0200, 0x0400,
++      0x0800, 0x1000, 0x2000, 0x4000, 0x8000, 0xb0c4
++};
++#ifdef UNIQUE_FW_NAME
++unsigned short fw2200ip_length01 = 0xb5c6;
++#else
++unsigned short risc_code_length01 = 0xb5c6;
++#endif
++
+--- /dev/null  Thu Apr 11 07:25:15 2002
++++ linux-2.5.73-n9560/drivers/scsi/qla2xxx/ql2300tpx_fw.c     Thu Jul  3 15:34:42 2003
+@@ -0,0 +1,6494 @@
++/**************************************************************************
++ *                  QLOGIC LINUX SOFTWARE
++ *
++ * QLogic ISP2x00 device driver for Linux 2.5.x
++ * Copyright (C) 2003 Qlogic Corporation
++ * (www.qlogic.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, 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.
++ *
++ *************************************************************************/
++/*
++ *    Firmware Version 3.02.10 (14:20 Apr 17, 2003)
++ */
++
++#ifdef UNIQUE_FW_NAME
++unsigned short fw2300tpx_version = 3*1024+2;
++#else
++unsigned short risc_code_version = 3*1024+2;
++#endif
++
++#ifdef UNIQUE_FW_NAME
++unsigned char fw2300tpx_version_str[] = {3, 2,10};
++#else
++unsigned char firmware_version[] = {3, 2,10};
++#endif
++
++#ifdef UNIQUE_FW_NAME
++#define fw2300tpx_VERSION_STRING "3.02.10"
++#else
++#define FW_VERSION_STRING "3.02.10"
++#endif
++
++#ifdef UNIQUE_FW_NAME
++unsigned short fw2300tpx_addr01 = 0x0800 ;
++#else
++unsigned short risc_code_addr01 = 0x0800 ;
++#endif
++
++#ifdef UNIQUE_FW_NAME
++unsigned short fw2300tpx_code01[] = { 
++#else
++unsigned short risc_code01[] = { 
++#endif
++      0x0470, 0x0000, 0x0000, 0xc920, 0x0000, 0x0003, 0x0002, 0x000a,
++      0x0117, 0x2043, 0x4f50, 0x5952, 0x4947, 0x4854, 0x2032, 0x3030,
++      0x3120, 0x514c, 0x4f47, 0x4943, 0x2043, 0x4f52, 0x504f, 0x5241,
++      0x5449, 0x4f4e, 0x2049, 0x5350, 0x3233, 0x3030, 0x2046, 0x6972,
++      0x6d77, 0x6172, 0x6520, 0x2056, 0x6572, 0x7369, 0x6f6e, 0x2030,
++      0x332e, 0x3032, 0x2e31, 0x3020, 0x2020, 0x2020, 0x2400, 0x20a9,
++      0x000f, 0x2001, 0x0000, 0x400f, 0x2091, 0x2200, 0x20a9, 0x000f,
++      0x2001, 0x0000, 0x400f, 0x2091, 0x2400, 0x20a9, 0x000f, 0x2001,
++      0x0000, 0x400f, 0x2091, 0x2600, 0x20a9, 0x000f, 0x2001, 0x0000,
++      0x400f, 0x2091, 0x2800, 0x20a9, 0x000f, 0x2001, 0x0000, 0x400f,
++      0x2091, 0x2a00, 0x20a9, 0x000f, 0x2001, 0x0000, 0x400f, 0x2091,
++      0x2c00, 0x20a9, 0x000f, 0x2001, 0x0000, 0x400f, 0x2091, 0x2e00,
++      0x20a9, 0x000f, 0x2001, 0x0000, 0x400f, 0x2091, 0x2000, 0x2001,
++      0x0000, 0x20c1, 0x0004, 0x2001, 0x017f, 0x2003, 0x0000, 0x20c9,
++      0x1bff, 0x2059, 0x0000, 0x2b78, 0x7883, 0x0004, 0x2089, 0x28b1,
++      0x2051, 0x1800, 0x2a70, 0x20e1, 0x0001, 0x20e9, 0x0001, 0x2029,
++      0x4d00, 0x2031, 0xffff, 0x2039, 0x4cd0, 0x2021, 0x0200, 0x20e9,
++      0x0001, 0x20a1, 0x0000, 0x20a9, 0x0800, 0x900e, 0x4104, 0x20e9,
++      0x0001, 0x20a1, 0x1000, 0x900e, 0x2001, 0x0cc0, 0x9084, 0x0fff,
++      0x20a8, 0x4104, 0x2001, 0x0000, 0x9086, 0x0000, 0x0120, 0x21a8,
++      0x4104, 0x8001, 0x1de0, 0x7566, 0x766a, 0x7762, 0x746e, 0x7472,
++      0x00e6, 0x2071, 0x1a8a, 0x2472, 0x00ee, 0x20a1, 0x1cd0, 0x7168,
++      0x810d, 0x810d, 0x810d, 0x810d, 0x918c, 0x000f, 0x2001, 0x0001,
++      0x9112, 0x900e, 0x21a8, 0x4104, 0x8211, 0x1de0, 0x7168, 0x3400,
++      0x8001, 0x9102, 0x0120, 0x0218, 0x20a8, 0x900e, 0x4104, 0x2009,
++      0x1800, 0x810d, 0x810d, 0x810d, 0x810d, 0x810d, 0x918c, 0x001f,
++      0x2001, 0x0001, 0x9112, 0x20e9, 0x0001, 0x20a1, 0x0800, 0x900e,
++      0x20a9, 0x0800, 0x4104, 0x8211, 0x1dd8, 0x080c, 0x0ec6, 0x080c,
++      0x56e7, 0x080c, 0x94ea, 0x080c, 0x107b, 0x080c, 0x1245, 0x080c,
++      0x18ae, 0x080c, 0x0d1d, 0x080c, 0x1000, 0x080c, 0x2f6e, 0x080c,
++      0x6b54, 0x080c, 0x5f51, 0x080c, 0x774d, 0x080c, 0x20b6, 0x080c,
++      0x7a7b, 0x080c, 0x7190, 0x080c, 0x1ef3, 0x080c, 0x2027, 0x080c,
++      0x20ab, 0x2091, 0x3009, 0x7883, 0x0000, 0x1004, 0x091d, 0x7880,
++      0x9086, 0x0002, 0x1190, 0x7883, 0x4000, 0x7837, 0x4000, 0x7833,
++      0x0010, 0x0e04, 0x0911, 0x2091, 0x5000, 0x2091, 0x4080, 0x2001,
++      0x0089, 0x2004, 0xd084, 0x190c, 0x113e, 0x2071, 0x1800, 0x7003,
++      0x0000, 0x2071, 0x1800, 0x7000, 0x908e, 0x0003, 0x1168, 0x080c,
++      0x44bf, 0x080c, 0x2f92, 0x080c, 0x6bc5, 0x080c, 0x63e8, 0x080c,
++      0x7778, 0x080c, 0x2849, 0x0c68, 0x000b, 0x0c88, 0x0940, 0x0941,
++      0x0ab2, 0x093e, 0x0b69, 0x0d14, 0x0d14, 0x0d14, 0x080c, 0x0d84,
++      0x0005, 0x0126, 0x00f6, 0x2091, 0x8000, 0x7000, 0x9086, 0x0001,
++      0x1904, 0x0a90, 0x080c, 0x0e2c, 0x080c, 0x6877, 0x0150, 0x080c,
++      0x689a, 0x1580, 0x2079, 0x0100, 0x7828, 0x9085, 0x1800, 0x782a,
++      0x0448, 0x080c, 0x67be, 0x7000, 0x9086, 0x0001, 0x1904, 0x0a90,
++      0x7090, 0x9086, 0x0028, 0x1904, 0x0a90, 0x2001, 0x0161, 0x2003,
++      0x0001, 0x2079, 0x0100, 0x7827, 0xffff, 0x7a28, 0x9295, 0x5e2f,
++      0x7a2a, 0x2011, 0x6739, 0x080c, 0x781a, 0x2011, 0x672c, 0x080c,
++      0x78e7, 0x2011, 0x554d, 0x080c, 0x781a, 0x2011, 0x8030, 0x901e,
++      0x738e, 0x0460, 0x080c, 0x4e04, 0x2079, 0x0100, 0x7844, 0x9005,
++      0x1904, 0x0a90, 0x2011, 0x554d, 0x080c, 0x781a, 0x2001, 0x0265,
++      0x2001, 0x0205, 0x2003, 0x0000, 0x7840, 0x9084, 0xfffb, 0x7842,
++      0x2001, 0x1973, 0x2004, 0x9005, 0x1140, 0x00c6, 0x2061, 0x0100,
++      0x080c, 0x568f, 0x00ce, 0x0804, 0x0a90, 0x780f, 0x006b, 0x7a28,
++      0x9295, 0x5e2f, 0x7a2a, 0x2011, 0x8010, 0x73d4, 0x2001, 0x1974,
++      0x2003, 0x0001, 0x080c, 0x2718, 0x080c, 0x447f, 0x7240, 0xc284,
++      0x7242, 0x2001, 0x180c, 0x200c, 0xc1ac, 0xc1cc, 0x2102, 0x080c,
++      0x8d36, 0x2011, 0x0004, 0x080c, 0xb0b9, 0x080c, 0x5e30, 0x080c,
++      0x6877, 0x1120, 0x080c, 0x275c, 0x02e0, 0x0400, 0x080c, 0x5696,
++      0x0140, 0x708f, 0x0001, 0x70cf, 0x0000, 0x080c, 0x4fc7, 0x0804,
++      0x0a90, 0x080c, 0x4dea, 0xd094, 0x0188, 0x2011, 0x180c, 0x2204,
++      0xc0cd, 0x2012, 0x080c, 0x4dee, 0xd0d4, 0x1118, 0x080c, 0x275c,
++      0x1270, 0x2011, 0x180c, 0x2204, 0xc0bc, 0x00a8, 0x080c, 0x4dee,
++      0xd0d4, 0x1db8, 0x2011, 0x180c, 0x2204, 0xc0bd, 0x0060, 0x2011,
++      0x180c, 0x2204, 0xc0bd, 0x2012, 0x080c, 0x5f25, 0x1128, 0xd0a4,
++      0x0118, 0x2204, 0xc0fd, 0x2012, 0x080c, 0x5eeb, 0x0120, 0x7a0c,
++      0xc2b4, 0x7a0e, 0x00a8, 0x7077, 0x0000, 0x080c, 0x6877, 0x1130,
++      0x70a8, 0x9005, 0x1168, 0x080c, 0xb4bd, 0x0050, 0x080c, 0xb4bd,
++      0x70d8, 0xd09c, 0x1128, 0x70a8, 0x9005, 0x0110, 0x080c, 0x5677,
++      0x70e3, 0x0000, 0x70df, 0x0000, 0x709f, 0x0000, 0x72d8, 0x080c,
++      0x6877, 0x1170, 0x9016, 0x0016, 0x080c, 0x2515, 0x2019, 0x193c,
++      0x211a, 0x001e, 0x7057, 0xffff, 0x705b, 0x00ef, 0x707b, 0x0000,
++      0x2079, 0x1852, 0x7804, 0xd0ac, 0x0108, 0xc295, 0x72da, 0x080c,
++      0x6877, 0x0118, 0x9296, 0x0004, 0x0548, 0x2011, 0x0001, 0x080c,
++      0xb0b9, 0x70a3, 0x0000, 0x70a7, 0xffff, 0x7003, 0x0002, 0x2079,
++      0x0100, 0x7827, 0x0003, 0x7828, 0x9085, 0x0003, 0x782a, 0x00fe,
++      0x080c, 0x2b1e, 0x2011, 0x0005, 0x080c, 0x8e99, 0x080c, 0x8125,
++      0x080c, 0x6877, 0x0148, 0x00c6, 0x2061, 0x0100, 0x0016, 0x080c,
++      0x2515, 0x61e2, 0x001e, 0x00ce, 0x012e, 0x0420, 0x70a3, 0x0000,
++      0x70a7, 0xffff, 0x7003, 0x0002, 0x00f6, 0x2079, 0x0100, 0x7827,
++      0x0003, 0x7828, 0x9085, 0x0003, 0x782a, 0x00fe, 0x2011, 0x0005,
++      0x080c, 0x8e99, 0x080c, 0x8125, 0x080c, 0x6877, 0x0148, 0x00c6,
++      0x2061, 0x0100, 0x0016, 0x080c, 0x2515, 0x61e2, 0x001e, 0x00ce,
++      0x00fe, 0x012e, 0x0005, 0x00c6, 0x080c, 0x6877, 0x1118, 0x20a9,
++      0x0800, 0x0010, 0x20a9, 0x0782, 0x080c, 0x6877, 0x1110, 0x900e,
++      0x0010, 0x2009, 0x007e, 0x080c, 0x2e11, 0x8108, 0x1f04, 0x0aa3,
++      0x7077, 0x0000, 0x7078, 0x9084, 0x00ff, 0x707a, 0x70ab, 0x0000,
++      0x00ce, 0x0005, 0x00b6, 0x0126, 0x2091, 0x8000, 0x7000, 0x9086,
++      0x0002, 0x1904, 0x0b66, 0x70a4, 0x9086, 0xffff, 0x0130, 0x080c,
++      0x2b1e, 0x080c, 0x8125, 0x0804, 0x0b66, 0x70d8, 0xd0ac, 0x1110,
++      0xd09c, 0x0540, 0xd084, 0x0530, 0x0006, 0x2001, 0x0103, 0x2003,
++      0x002b, 0x000e, 0xd08c, 0x01f0, 0x70dc, 0x9086, 0xffff, 0x01b0,
++      0x080c, 0x2c86, 0x080c, 0x8125, 0x70d8, 0xd094, 0x1904, 0x0b66,
++      0x2011, 0x0001, 0x080c, 0xb759, 0x0110, 0x2011, 0x0003, 0x901e,
++      0x080c, 0x2cc0, 0x080c, 0x8125, 0x0804, 0x0b66, 0x70e0, 0x9005,
++      0x1904, 0x0b66, 0x70a0, 0x9005, 0x1904, 0x0b66, 0x70d8, 0xd0a4,
++      0x0118, 0xd0b4, 0x0904, 0x0b66, 0x080c, 0x5eeb, 0x1904, 0x0b66,
++      0x080c, 0x5f3e, 0x1904, 0x0b66, 0x080c, 0x5f25, 0x01c0, 0x0156,
++      0x00c6, 0x20a9, 0x007f, 0x900e, 0x0016, 0x080c, 0x5c0d, 0x1118,
++      0xb800, 0xd0ec, 0x1138, 0x001e, 0x8108, 0x1f04, 0x0b0c, 0x00ce,
++      0x015e, 0x0028, 0x001e, 0x00ce, 0x015e, 0x0804, 0x0b66, 0x0006,
++      0x2001, 0x0103, 0x2003, 0x006b, 0x000e, 0x2011, 0x1980, 0x080c,
++      0x0f36, 0x2011, 0x199a, 0x080c, 0x0f36, 0x7030, 0xc08c, 0x7032,
++      0x7003, 0x0003, 0x70a7, 0xffff, 0x080c, 0x0e0e, 0x9006, 0x080c,
++      0x23a6, 0x0036, 0x0046, 0x2019, 0xffff, 0x2021, 0x0006, 0x080c,
++      0x44f9, 0x004e, 0x003e, 0x00f6, 0x2079, 0x0100, 0x080c, 0x689a,
++      0x0150, 0x080c, 0x6877, 0x7828, 0x0118, 0x9084, 0xe1ff, 0x0010,
++      0x9084, 0xffdf, 0x782a, 0x00fe, 0x2001, 0x19b5, 0x2004, 0x9086,
++      0x0005, 0x1120, 0x2011, 0x0000, 0x080c, 0x8e99, 0x2011, 0x0000,
++      0x080c, 0x8ea3, 0x080c, 0x8125, 0x080c, 0x820b, 0x012e, 0x00be,
++      0x0005, 0x0016, 0x0046, 0x00f6, 0x0126, 0x2091, 0x8000, 0x2079,
++      0x0100, 0x7904, 0x918c, 0xfffd, 0x7906, 0x2009, 0x00f7, 0x080c,
++      0x5660, 0x7940, 0x918c, 0x0010, 0x7942, 0x7924, 0xd1b4, 0x0110,
++      0x7827, 0x0040, 0xd19c, 0x0110, 0x7827, 0x0008, 0x0006, 0x0036,
++      0x0156, 0x7954, 0xd1ac, 0x1904, 0x0bf6, 0x2001, 0x1974, 0x2004,
++      0x9005, 0x1518, 0x080c, 0x27d7, 0x1148, 0x2001, 0x0001, 0x080c,
++      0x2747, 0x2001, 0x0001, 0x080c, 0x272a, 0x00b8, 0x080c, 0x27df,
++      0x1138, 0x9006, 0x080c, 0x2747, 0x9006, 0x080c, 0x272a, 0x0068,
++      0x080c, 0x27e7, 0x1d50, 0x2001, 0x1965, 0x2004, 0xd0fc, 0x0108,
++      0x0020, 0x080c, 0x2541, 0x0804, 0x0cd6, 0x080c, 0x6888, 0x0148,
++      0x080c, 0x689a, 0x1118, 0x080c, 0x6b4f, 0x0050, 0x080c, 0x687f,
++      0x0dd0, 0x080c, 0x6b4a, 0x080c, 0x6b40, 0x080c, 0x67be, 0x0058,
++      0x080c, 0x6877, 0x0140, 0x2009, 0x00f8, 0x080c, 0x5660, 0x7843,
++      0x0090, 0x7843, 0x0010, 0x20a9, 0x09c4, 0x7820, 0xd09c, 0x1138,
++      0x080c, 0x6877, 0x0138, 0x7824, 0xd0ac, 0x1904, 0x0cdb, 0x1f04,
++      0x0bd5, 0x0070, 0x7824, 0x080c, 0x6891, 0x0118, 0xd0ac, 0x1904,
++      0x0cdb, 0x9084, 0x1800, 0x0d98, 0x7003, 0x0001, 0x0804, 0x0cdb,
++      0x2001, 0x0001, 0x080c, 0x23a6, 0x0804, 0x0cee, 0x2001, 0x1974,
++      0x2004, 0x9005, 0x1518, 0x080c, 0x27d7, 0x1148, 0x2001, 0x0001,
++      0x080c, 0x2747, 0x2001, 0x0001, 0x080c, 0x272a, 0x00b8, 0x080c,
++      0x27df, 0x1138, 0x9006, 0x080c, 0x2747, 0x9006, 0x080c, 0x272a,
++      0x0068, 0x080c, 0x27e7, 0x1d50, 0x2001, 0x1965, 0x2004, 0xd0fc,
++      0x0108, 0x0020, 0x080c, 0x2541, 0x0804, 0x0cd6, 0x7850, 0x9085,
++      0x0040, 0x7852, 0x7938, 0x7850, 0x9084, 0xfbcf, 0x7852, 0x080c,
++      0x27ef, 0x9085, 0x2000, 0x7852, 0x793a, 0x20a9, 0x0046, 0x1d04,
++      0x0c2f, 0x080c, 0x78c7, 0x1f04, 0x0c2f, 0x7850, 0x9085, 0x0400,
++      0x9084, 0xdfbf, 0x7852, 0x793a, 0x080c, 0x6888, 0x0148, 0x080c,
++      0x689a, 0x1118, 0x080c, 0x6b4f, 0x0050, 0x080c, 0x687f, 0x0dd0,
++      0x080c, 0x6b4a, 0x080c, 0x6b40, 0x080c, 0x67be, 0x0020, 0x2009,
++      0x00f8, 0x080c, 0x5660, 0x20a9, 0x0028, 0xa001, 0x1f04, 0x0c55,
++      0x7850, 0x9085, 0x1400, 0x7852, 0x080c, 0x6877, 0x0120, 0x7843,
++      0x0090, 0x7843, 0x0010, 0x2021, 0xe678, 0x2019, 0xea60, 0x080c,
++      0x0d15, 0x7820, 0xd09c, 0x1588, 0x080c, 0x6877, 0x0904, 0x0cbb,
++      0x7824, 0xd0ac, 0x1904, 0x0cdb, 0x080c, 0x689a, 0x1530, 0x0046,
++      0x2021, 0x0320, 0x8421, 0x1df0, 0x004e, 0x7827, 0x1800, 0x080c,
++      0x27ef, 0x7824, 0x9084, 0x1800, 0x1168, 0x9484, 0x0fff, 0x1140,
++      0x2001, 0x180f, 0x2004, 0x9084, 0x9000, 0x0110, 0x080c, 0x0cfc,
++      0x8421, 0x1158, 0x1d04, 0x0c96, 0x080c, 0x78c7, 0x080c, 0x6b4a,
++      0x080c, 0x6b40, 0x7003, 0x0001, 0x04f0, 0x8319, 0x1940, 0x1d04,
++      0x0ca3, 0x080c, 0x78c7, 0x2009, 0x1968, 0x2104, 0x9005, 0x0118,
++      0x8001, 0x200a, 0x1178, 0x200b, 0x000a, 0x7827, 0x0048, 0x20a9,
++      0x0002, 0x080c, 0x27d0, 0x7924, 0x080c, 0x27ef, 0xd19c, 0x0110,
++      0x080c, 0x2718, 0x00d8, 0x080c, 0x6888, 0x1140, 0x94a2, 0x03e8,
++      0x1128, 0x080c, 0x6853, 0x7003, 0x0001, 0x00a8, 0x7827, 0x1800,
++      0x080c, 0x27ef, 0x7824, 0x080c, 0x6891, 0x0110, 0xd0ac, 0x1158,
++      0x9084, 0x1800, 0x0950, 0x7003, 0x0001, 0x0028, 0x2001, 0x0001,
++      0x080c, 0x23a6, 0x0078, 0x2009, 0x180c, 0x210c, 0xd19c, 0x1120,
++      0x7904, 0x918d, 0x0002, 0x7906, 0x7827, 0x0048, 0x7828, 0x9085,
++      0x0028, 0x782a, 0x7850, 0x9085, 0x0400, 0x7852, 0x2001, 0x1974,
++      0x2003, 0x0000, 0x9006, 0x78f2, 0x015e, 0x003e, 0x000e, 0x012e,
++      0x00fe, 0x004e, 0x001e, 0x0005, 0x0006, 0x0016, 0x0036, 0x0046,
++      0x00b6, 0x00c6, 0x00d6, 0x00e6, 0x00f6, 0x0156, 0x080c, 0x2f92,
++      0x0061, 0x015e, 0x00fe, 0x00ee, 0x00de, 0x00ce, 0x00be, 0x004e,
++      0x003e, 0x001e, 0x000e, 0x0005, 0x0005, 0x080c, 0xb759, 0x0120,
++      0x1d04, 0x0d1c, 0x080c, 0x78c7, 0x0005, 0x2a70, 0x2061, 0x1978,
++      0x2063, 0x0003, 0x6007, 0x0002, 0x600b, 0x000a, 0x600f, 0x0117,
++      0x2001, 0x194b, 0x900e, 0x2102, 0x718e, 0x2001, 0x0100, 0x2004,
++      0x9082, 0x0002, 0x0218, 0x7057, 0xffff, 0x0008, 0x7156, 0x705f,
++      0xffff, 0x7176, 0x717a, 0x080c, 0xb4bd, 0x70ef, 0x00c0, 0x2061,
++      0x193b, 0x6003, 0x0909, 0x6106, 0x600b, 0x8800, 0x600f, 0x0200,
++      0x6013, 0x00ff, 0x6017, 0x000f, 0x611a, 0x601f, 0x07d0, 0x2061,
++      0x1943, 0x6003, 0x8000, 0x6106, 0x610a, 0x600f, 0x0200, 0x6013,
++      0x00ff, 0x6116, 0x601b, 0x0001, 0x611e, 0x2061, 0x1956, 0x6003,
++      0x514c, 0x6007, 0x4f47, 0x600b, 0x4943, 0x600f, 0x2020, 0x2001,
++      0x182a, 0x2102, 0x0005, 0x9016, 0x080c, 0x5c0d, 0x1178, 0xb804,
++      0x90c4, 0x00ff, 0x98c6, 0x0006, 0x0128, 0x90c4, 0xff00, 0x98c6,
++      0x0600, 0x1120, 0x9186, 0x0080, 0x0108, 0x8210, 0x8108, 0x9186,
++      0x0800, 0x1d50, 0x2208, 0x0005, 0x2091, 0x8000, 0x0e04, 0x0d86,
++      0x0006, 0x0016, 0x2001, 0x8002, 0x0006, 0x2079, 0x0000, 0x000e,
++      0x7882, 0x7836, 0x001e, 0x798e, 0x000e, 0x788a, 0x000e, 0x7886,
++      0x3900, 0x789a, 0x7833, 0x0012, 0x2091, 0x5000, 0x0156, 0x00d6,
++      0x0036, 0x0026, 0x2079, 0x0300, 0x2069, 0x1a65, 0x7a18, 0x226a,
++      0x8d68, 0x7a1c, 0x226a, 0x782c, 0x2019, 0x1a72, 0x201a, 0x2019,
++      0x1a75, 0x9016, 0x7808, 0xd09c, 0x0168, 0x7820, 0x201a, 0x8210,
++      0x8318, 0x9386, 0x1a8a, 0x0108, 0x0ca8, 0x7808, 0xd09c, 0x0110,
++      0x2011, 0xdead, 0x2019, 0x1a73, 0x782c, 0x201a, 0x8318, 0x221a,
++      0x7803, 0x0000, 0x2069, 0x1a45, 0x901e, 0x20a9, 0x0020, 0x7b26,
++      0x7a28, 0x226a, 0x8d68, 0x8318, 0x1f04, 0x0dcf, 0x002e, 0x003e,
++      0x00de, 0x015e, 0x2079, 0x1800, 0x7803, 0x0005, 0x2091, 0x4080,
++      0x2001, 0x0089, 0x2004, 0xd084, 0x0180, 0x2001, 0x19e7, 0x2004,
++      0x9005, 0x0128, 0x2001, 0x008b, 0x2004, 0xd0fc, 0x0dd8, 0x2001,
++      0x008a, 0x2003, 0x0002, 0x2003, 0x1001, 0x080c, 0x4df9, 0x1108,
++      0x0011, 0x0cd8, 0x0005, 0x0026, 0x0126, 0x2011, 0x0080, 0x080c,
++      0x0e8d, 0x20a9, 0x0900, 0x080c, 0x0eae, 0x2011, 0x0040, 0x080c,
++      0x0e8d, 0x20a9, 0x0900, 0x080c, 0x0eae, 0x0c78, 0x0026, 0x080c,
++      0x0e9a, 0x1118, 0x2011, 0x0040, 0x0098, 0x2011, 0x010e, 0x2214,
++      0x9294, 0x0007, 0x9296, 0x0007, 0x0118, 0x2011, 0xa880, 0x0010,
++      0x2011, 0x6840, 0xd0e4, 0x70f3, 0x0000, 0x1128, 0x70f3, 0x0fa0,
++      0x080c, 0x0e9f, 0x002e, 0x0005, 0x0026, 0x080c, 0x0e9a, 0x0128,
++      0xd0a4, 0x1138, 0x2011, 0xcdd5, 0x0010, 0x2011, 0x0080, 0x080c,
++      0x0e9f, 0x002e, 0x0005, 0x0026, 0x70f3, 0x0000, 0x080c, 0x0e9a,
++      0x1148, 0x080c, 0x27e7, 0x1118, 0x2011, 0x8484, 0x0058, 0x2011,
++      0x8282, 0x0040, 0x080c, 0x27e7, 0x1118, 0x2011, 0xcdc5, 0x0010,
++      0x2011, 0xcac2, 0x080c, 0x0e9f, 0x002e, 0x0005, 0x00e6, 0x0006,
++      0x2071, 0x1800, 0xd0b4, 0x70ec, 0x1148, 0xc0e4, 0x0080, 0x70ee,
++      0x0026, 0x9094, 0x00c0, 0x0449, 0x002e, 0x0048, 0x0006, 0x3b00,
++      0x9084, 0xff3f, 0x20d8, 0x000e, 0x70f3, 0x0000, 0xc0e5, 0x0079,
++      0x000e, 0x00ee, 0x0005, 0x00e6, 0x2071, 0x1800, 0xd0e4, 0x70ec,
++      0x1110, 0xc0dc, 0x0008, 0xc0dd, 0x0011, 0x00ee, 0x0005, 0x70ee,
++      0x7000, 0x9084, 0x0007, 0x000b, 0x0005, 0x0e55, 0x0e2c, 0x0e2c,
++      0x0e0e, 0x0e3b, 0x0e2c, 0x0e2c, 0x0e3b, 0x0016, 0x3b08, 0x3a00,
++      0x9104, 0x918d, 0x00c0, 0x21d8, 0x9084, 0xff3f, 0x9205, 0x20d0,
++      0x001e, 0x0005, 0x2001, 0x183b, 0x2004, 0xd0dc, 0x0005, 0x9e86,
++      0x1800, 0x190c, 0x0d84, 0x70ec, 0xd0e4, 0x0108, 0xc2e5, 0x72ee,
++      0xd0e4, 0x1118, 0x9294, 0x00c0, 0x0c01, 0x0005, 0x1d04, 0x0eae,
++      0x2091, 0x6000, 0x1f04, 0x0eae, 0x0005, 0x890e, 0x810e, 0x810f,
++      0x9194, 0x003f, 0x918c, 0xffc0, 0x0005, 0x0006, 0x2200, 0x914d,
++      0x894f, 0x894d, 0x894d, 0x000e, 0x000e, 0x0005, 0x01d6, 0x0146,
++      0x0036, 0x0096, 0x2061, 0x1882, 0x600b, 0x0000, 0x600f, 0x0000,
++      0x6003, 0x0000, 0x6007, 0x0000, 0x2009, 0xffc0, 0x2105, 0x0006,
++      0x2001, 0xaaaa, 0x200f, 0x2019, 0x5555, 0x9016, 0x2049, 0x0bff,
++      0xab02, 0xa001, 0xa001, 0xa800, 0x9306, 0x1138, 0x2105, 0x9306,
++      0x0120, 0x8210, 0x99c8, 0x0400, 0x0c98, 0x000e, 0x200f, 0x2001,
++      0x1892, 0x928a, 0x000e, 0x1638, 0x928a, 0x0006, 0x2011, 0x0006,
++      0x1210, 0x2011, 0x0000, 0x2202, 0x9006, 0x2008, 0x82ff, 0x01b0,
++      0x8200, 0x600a, 0x600f, 0xffff, 0x6003, 0x0002, 0x6007, 0x0000,
++      0x0026, 0x2019, 0x0010, 0x9280, 0x0001, 0x20e8, 0x21a0, 0x21a8,
++      0x4104, 0x8319, 0x1de0, 0x8211, 0x1da0, 0x002e, 0x009e, 0x003e,
++      0x014e, 0x01de, 0x0005, 0x2011, 0x000e, 0x08e8, 0x0016, 0x0026,
++      0x0096, 0x3348, 0x080c, 0x0eb5, 0x2100, 0x9300, 0x2098, 0x22e0,
++      0x009e, 0x002e, 0x001e, 0x0036, 0x3518, 0x20a9, 0x0001, 0x4002,
++      0x8007, 0x4004, 0x8319, 0x1dd8, 0x003e, 0x0005, 0x20e9, 0x0001,
++      0x71b0, 0x81ff, 0x11c0, 0x9006, 0x2009, 0x0200, 0x20a9, 0x0002,
++      0x9298, 0x0018, 0x23a0, 0x4001, 0x2009, 0x0700, 0x20a9, 0x0002,
++      0x9298, 0x0008, 0x23a0, 0x4001, 0x7074, 0x8007, 0x7178, 0x810f,
++      0x20a9, 0x0002, 0x4001, 0x9298, 0x000c, 0x23a0, 0x900e, 0x080c,
++      0x0d6b, 0x2001, 0x0000, 0x810f, 0x20a9, 0x0002, 0x4001, 0x0005,
++      0x89ff, 0x0140, 0xa804, 0xa807, 0x0000, 0x0006, 0x080c, 0x0fe0,
++      0x009e, 0x0cb0, 0x0005, 0x00e6, 0x2071, 0x1800, 0x080c, 0x1057,
++      0x090c, 0x0d84, 0x00ee, 0x0005, 0x0086, 0x00e6, 0x0006, 0x0026,
++      0x0036, 0x0126, 0x2091, 0x8000, 0x00c9, 0x2071, 0x1800, 0x73bc,
++      0x702c, 0x9016, 0x9045, 0x0158, 0x8210, 0x9906, 0x090c, 0x0d84,
++      0x2300, 0x9202, 0x0120, 0x1a0c, 0x0d84, 0xa000, 0x0c98, 0x012e,
++      0x003e, 0x002e, 0x000e, 0x00ee, 0x008e, 0x0005, 0x0086, 0x00e6,
++      0x0006, 0x0126, 0x2091, 0x8000, 0x2071, 0x1904, 0x7010, 0x9005,
++      0x0140, 0x7018, 0x9045, 0x0128, 0x9906, 0x090c, 0x0d84, 0xa000,
++      0x0cc8, 0x012e, 0x000e, 0x00ee, 0x008e, 0x0005, 0x00e6, 0x2071,
++      0x1800, 0x0126, 0x2091, 0x8000, 0x70bc, 0x8001, 0x0270, 0x70be,
++      0x702c, 0x2048, 0x9085, 0x0001, 0xa800, 0x702e, 0xa803, 0x0000,
++      0xa807, 0x0000, 0x012e, 0x00ee, 0x0005, 0x904e, 0x0cd8, 0x00e6,
++      0x0126, 0x2091, 0x8000, 0x2071, 0x1800, 0x70bc, 0x90ca, 0x0040,
++      0x0268, 0x8001, 0x70be, 0x702c, 0x2048, 0xa800, 0x702e, 0xa803,
++      0x0000, 0xa807, 0x0000, 0x012e, 0x00ee, 0x0005, 0x904e, 0x0cd8,
++      0x00e6, 0x0126, 0x2091, 0x8000, 0x0016, 0x890e, 0x810e, 0x810f,
++      0x9184, 0x003f, 0xa862, 0x9184, 0xffc0, 0xa85e, 0x001e, 0x0020,
++      0x00e6, 0x0126, 0x2091, 0x8000, 0x2071, 0x1800, 0x702c, 0xa802,
++      0x2900, 0x702e, 0x70bc, 0x8000, 0x70be, 0x012e, 0x00ee, 0x0005,
++      0x2071, 0x1800, 0x9026, 0x2009, 0x0000, 0x2049, 0x0400, 0x2900,
++      0x702e, 0x8940, 0x2800, 0xa802, 0xa95e, 0xa863, 0x0001, 0x8420,
++      0x9886, 0x0440, 0x0120, 0x2848, 0x9188, 0x0040, 0x0c90, 0x2071,
++      0x1882, 0x7000, 0x9005, 0x11a0, 0x2001, 0x0534, 0xa802, 0x2048,
++      0x2009, 0x4d00, 0x8940, 0x2800, 0xa802, 0xa95e, 0xa863, 0x0001,
++      0x8420, 0x9886, 0x0800, 0x0120, 0x2848, 0x9188, 0x0040, 0x0c90,
++      0x2071, 0x1882, 0x7104, 0x7200, 0x82ff, 0x01d0, 0x7308, 0x8318,
++      0x831f, 0x831b, 0x831b, 0x7312, 0x8319, 0x2001, 0x0800, 0xa802,
++      0x2048, 0x8900, 0xa802, 0x2040, 0xa95e, 0xaa62, 0x8420, 0x2300,
++      0x9906, 0x0130, 0x2848, 0x9188, 0x0040, 0x9291, 0x0000, 0x0c88,
++      0xa803, 0x0000, 0x2071, 0x1800, 0x74ba, 0x74be, 0x0005, 0x00e6,
++      0x0016, 0x9984, 0xfc00, 0x01e8, 0x908c, 0xf800, 0x1168, 0x9982,
++      0x0400, 0x02b8, 0x9982, 0x0440, 0x0278, 0x9982, 0x0534, 0x0288,
++      0x9982, 0x0800, 0x1270, 0x0040, 0x9982, 0x0800, 0x0250, 0x2071,
++      0x1882, 0x7010, 0x9902, 0x1228, 0x9085, 0x0001, 0x001e, 0x00ee,
++      0x0005, 0x9006, 0x0cd8, 0x00e6, 0x2071, 0x19e6, 0x7007, 0x0000,
++      0x9006, 0x701e, 0x7022, 0x7002, 0x2071, 0x0000, 0x7010, 0x9085,
++      0x8004, 0x7012, 0x00ee, 0x0005, 0x0126, 0x2091, 0x8000, 0x00e6,
++      0xa06f, 0x0000, 0x2071, 0x19e6, 0x701c, 0x9088, 0x19f0, 0x280a,
++      0x8000, 0x9084, 0x003f, 0x701e, 0x7120, 0x9106, 0x090c, 0x0d84,
++      0x7004, 0x9005, 0x1128, 0x00f6, 0x2079, 0x0080, 0x00a9, 0x00fe,
++      0x00ee, 0x012e, 0x0005, 0x0126, 0x2091, 0x8000, 0x00e6, 0x2071,
++      0x19e6, 0x7004, 0x9005, 0x1128, 0x00f6, 0x2079, 0x0080, 0x0021,
++      0x00fe, 0x00ee, 0x012e, 0x0005, 0x7004, 0x9086, 0x0000, 0x1110,
++      0x7007, 0x0006, 0x7000, 0x0002, 0x10ce, 0x10cc, 0x10cc, 0x10cc,
++      0x1234, 0x1234, 0x1234, 0x1234, 0x080c, 0x0d84, 0x701c, 0x7120,
++      0x9106, 0x1148, 0x792c, 0x9184, 0x0001, 0x1120, 0xd1fc, 0x1110,
++      0x7007, 0x0000, 0x0005, 0x0096, 0x9180, 0x19f0, 0x2004, 0x700a,
++      0x2048, 0x8108, 0x918c, 0x003f, 0x7122, 0x782b, 0x0026, 0xa88c,
++      0x7802, 0xa890, 0x7806, 0xa894, 0x780a, 0xa898, 0x780e, 0xa878,
++      0x700e, 0xa870, 0x7016, 0xa874, 0x701a, 0xa868, 0x009e, 0xd084,
++      0x0120, 0x7007, 0x0001, 0x0029, 0x0005, 0x7007, 0x0002, 0x00b1,
++      0x0005, 0x0016, 0x0026, 0x710c, 0x2011, 0x0040, 0x9182, 0x0040,
++      0x1210, 0x2110, 0x9006, 0x700e, 0x7212, 0x8203, 0x7812, 0x782b,
++      0x0020, 0x782b, 0x0041, 0x002e, 0x001e, 0x0005, 0x0016, 0x0026,
++      0x0136, 0x0146, 0x0156, 0x7014, 0x20e0, 0x7018, 0x2098, 0x20e9,
++      0x0000, 0x20a1, 0x0088, 0x782b, 0x0026, 0x710c, 0x2011, 0x0040,
++      0x9182, 0x0040, 0x1210, 0x2110, 0x9006, 0x700e, 0x22a8, 0x4006,
++      0x8203, 0x7812, 0x782b, 0x0020, 0x3300, 0x701a, 0x782b, 0x0001,
++      0x015e, 0x014e, 0x013e, 0x002e, 0x001e, 0x0005, 0x2009, 0x19e6,
++      0x2104, 0xc095, 0x200a, 0x080c, 0x10ab, 0x0005, 0x0016, 0x00e6,
++      0x2071, 0x19e6, 0x00f6, 0x2079, 0x0080, 0x792c, 0x782b, 0x0002,
++      0xd1fc, 0x0120, 0x918c, 0x0700, 0x7004, 0x0023, 0x00fe, 0x00ee,
++      0x001e, 0x0005, 0x10bc, 0x1161, 0x1195, 0x0d84, 0x0d84, 0x1240,
++      0x0d84, 0x918c, 0x0700, 0x1550, 0x0136, 0x0146, 0x0156, 0x7014,
++      0x20e8, 0x7018, 0x20a0, 0x20e1, 0x0000, 0x2099, 0x0088, 0x782b,
++      0x0040, 0x7010, 0x20a8, 0x4005, 0x3400, 0x701a, 0x015e, 0x014e,
++      0x013e, 0x700c, 0x9005, 0x0578, 0x7800, 0x7802, 0x7804, 0x7806,
++      0x080c, 0x1101, 0x0005, 0x7008, 0x0096, 0x2048, 0xa86f, 0x0100,
++      0x009e, 0x7007, 0x0000, 0x080c, 0x10bc, 0x0005, 0x7008, 0x0096,
++      0x2048, 0xa86f, 0x0200, 0x009e, 0x0ca0, 0x918c, 0x0700, 0x1150,
++      0x700c, 0x9005, 0x0180, 0x7800, 0x7802, 0x7804, 0x7806, 0x080c,
++      0x1116, 0x0005, 0x7008, 0x0096, 0x2048, 0xa86f, 0x0200, 0x009e,
++      0x7007, 0x0000, 0x0080, 0x0096, 0x7008, 0x2048, 0x7800, 0xa88e,
++      0x7804, 0xa892, 0x7808, 0xa896, 0x780c, 0xa89a, 0xa86f, 0x0100,
++      0x009e, 0x7007, 0x0000, 0x0096, 0x00d6, 0x7008, 0x2048, 0x2001,
++      0x18ad, 0x2004, 0x9906, 0x1128, 0xa89c, 0x080f, 0x00de, 0x009e,
++      0x00a0, 0x00de, 0x009e, 0x0096, 0x00d6, 0x7008, 0x2048, 0x0081,
++      0x0150, 0xa89c, 0x0086, 0x2940, 0x080f, 0x008e, 0x00de, 0x009e,
++      0x080c, 0x10ab, 0x0005, 0x00de, 0x009e, 0x080c, 0x10ab, 0x0005,
++      0xa8a8, 0xd08c, 0x0005, 0x0096, 0xa0a0, 0x904d, 0x090c, 0x0d84,
++      0xa06c, 0x908e, 0x0100, 0x0130, 0xa87b, 0x0030, 0xa883, 0x0000,
++      0xa897, 0x4002, 0x080c, 0x619c, 0xa09f, 0x0000, 0xa0a3, 0x0000,
++      0x2848, 0x080c, 0x0fe0, 0x009e, 0x0005, 0x00a6, 0xa0a0, 0x904d,
++      0x090c, 0x0d84, 0xa06c, 0x908e, 0x0100, 0x0128, 0xa87b, 0x0001,
++      0xa883, 0x0000, 0x00c0, 0xa80c, 0x2050, 0xb004, 0x9005, 0x0198,
++      0xa80e, 0x2050, 0x8006, 0x8006, 0x8007, 0x908c, 0x003f, 0x9084,
++      0xffc0, 0x9080, 0x0002, 0xa076, 0xa172, 0xb000, 0xa07a, 0x2810,
++      0x080c, 0x108c, 0x0078, 0xa97c, 0xa894, 0x0016, 0x0006, 0x080c,
++      0x619c, 0x000e, 0x001e, 0xd1f4, 0x0128, 0x00c6, 0x2060, 0x080c,
++      0x9554, 0x00ce, 0x00ae, 0x0005, 0x0126, 0x2091, 0x8000, 0x782b,
++      0x1001, 0x7007, 0x0005, 0x7000, 0xc094, 0x7002, 0x012e, 0x0005,
++      0x7007, 0x0000, 0x080c, 0x10bc, 0x0005, 0x0126, 0x2091, 0x2200,
++      0x2079, 0x0300, 0x2071, 0x1a30, 0x7003, 0x0000, 0x78bf, 0x00f6,
++      0x00c1, 0x7803, 0x0003, 0x780f, 0x0000, 0x20a9, 0x01ec, 0x2061,
++      0xcd39, 0x2c0d, 0x7912, 0xe104, 0x9ce0, 0x0002, 0x7916, 0x1f04,
++      0x1259, 0x7807, 0x0001, 0x7803, 0x0000, 0x7803, 0x0001, 0x012e,
++      0x0005, 0x00c6, 0x7803, 0x0000, 0x7808, 0xd09c, 0x0110, 0x7820,
++      0x0cd8, 0x2001, 0x1a31, 0x2003, 0x0000, 0x78ab, 0x0004, 0x78ac,
++      0xd0ac, 0x1de8, 0x78ab, 0x0002, 0x7807, 0x0001, 0x7827, 0x0030,
++      0x782b, 0x0400, 0x7827, 0x0031, 0x782b, 0x1a45, 0x781f, 0xff00,
++      0x781b, 0xff00, 0x2001, 0x0200, 0x2004, 0xd0dc, 0x0110, 0x781f,
++      0x0303, 0x2061, 0x1a45, 0x602f, 0x1cd0, 0x2001, 0x1818, 0x2004,
++      0x9082, 0x1cd0, 0x6032, 0x603b, 0x1cdd, 0x00ce, 0x0005, 0x0126,
++      0x2091, 0x2200, 0x7808, 0xd09c, 0x0158, 0x7820, 0x908c, 0xf000,
++      0x1588, 0x908a, 0x0021, 0x1a0c, 0x0d84, 0x0043, 0x012e, 0x0005,
++      0x9084, 0x0070, 0x190c, 0x0d84, 0x012e, 0x0005, 0x12d8, 0x12d8,
++      0x12e1, 0x12e6, 0x12ea, 0x12ef, 0x1317, 0x131b, 0x1329, 0x132d,
++      0x12d8, 0x13b6, 0x13ba, 0x141a, 0x12d8, 0x12d8, 0x12d8, 0x12d8,
++      0x12d8, 0x12d8, 0x12d8, 0x12d8, 0x12d8, 0x12d8, 0x12d8, 0x12d8,
++      0x12d8, 0x12f1, 0x12d8, 0x12d8, 0x12d8, 0x12d8, 0x12d8, 0x12d8,
++      0x080c, 0x0d84, 0x2009, 0x0048, 0x2060, 0x080c, 0x95ce, 0x012e,
++      0x0005, 0x7004, 0xc085, 0xc0b5, 0x7006, 0x0005, 0x7004, 0xc085,
++      0x7006, 0x0005, 0x080c, 0x1421, 0x080c, 0x14c5, 0x0005, 0x080c,
++      0x0d84, 0x080c, 0x1421, 0x2060, 0x6014, 0x0096, 0x2048, 0xa83b,
++      0xffff, 0x009e, 0x2009, 0x0048, 0x080c, 0x95ce, 0x2001, 0x015d,
++      0x2003, 0x0000, 0x2009, 0x03e8, 0x8109, 0x0160, 0x2001, 0x0201,
++      0x2004, 0x9005, 0x0dc8, 0x2001, 0x0218, 0x2004, 0xd0ec, 0x1110,
++      0x080c, 0x1426, 0x2001, 0x0307, 0x2003, 0x8000, 0x0005, 0x7004,
++      0xc095, 0x7006, 0x0005, 0x080c, 0x1421, 0x2060, 0x6014, 0x0096,
++      0x2048, 0xa83b, 0xffff, 0x009e, 0x2009, 0x0048, 0x080c, 0x95ce,
++      0x0005, 0x080c, 0x1421, 0x080c, 0x0d84, 0x080c, 0x1421, 0x080c,
++      0x13a1, 0x7827, 0x0018, 0x79ac, 0xd1dc, 0x0540, 0x7827, 0x0015,
++      0x7828, 0x782b, 0x0000, 0x9065, 0x0138, 0x2001, 0x020d, 0x2003,
++      0x0050, 0x2003, 0x0020, 0x0400, 0x7004, 0x9005, 0x1180, 0x78ab,
++      0x0004, 0x7827, 0x0018, 0x782b, 0x0000, 0xd1bc, 0x090c, 0x0d84,
++      0x2001, 0x020d, 0x2003, 0x0050, 0x2003, 0x0020, 0x0478, 0x78ab,
++      0x0004, 0x7803, 0x0001, 0x080c, 0x13ba, 0x0005, 0x7828, 0x782b,
++      0x0000, 0x9065, 0x090c, 0x0d84, 0x6014, 0x2048, 0x78ab, 0x0004,
++      0x918c, 0x0700, 0x0198, 0x080c, 0x724d, 0x080c, 0x1827, 0x080c,
++      0xb0ad, 0x0158, 0xa9ac, 0xa936, 0xa9b0, 0xa93a, 0xa83f, 0xffff,
++      0xa843, 0xffff, 0xa880, 0xc0bd, 0xa882, 0x0005, 0x6010, 0x00b6,
++      0x2058, 0xb800, 0x00be, 0xd0bc, 0x190c, 0xb456, 0x2029, 0x00c8,
++      0x8529, 0x0128, 0x2001, 0x0201, 0x2004, 0x9005, 0x0dc8, 0x7dbc,
++      0x080c, 0xcce2, 0xd5a4, 0x1118, 0x080c, 0x1426, 0x0005, 0x080c,
++      0x724d, 0x080c, 0x1827, 0x0005, 0x781f, 0x0300, 0x7803, 0x0001,
++      0x0005, 0x0016, 0x0066, 0x0076, 0x00f6, 0x2079, 0x0300, 0x7908,
++      0x918c, 0x0007, 0x9186, 0x0003, 0x0120, 0x2001, 0x0016, 0x080c,
++      0x1492, 0x00fe, 0x007e, 0x006e, 0x001e, 0x0005, 0x7004, 0xc09d,
++      0x7006, 0x0005, 0x7104, 0x9184, 0x0004, 0x190c, 0x0d84, 0xd184,
++      0x1189, 0xd19c, 0x0158, 0xc19c, 0x7106, 0x2001, 0x020d, 0x2003,
++      0x0050, 0x2003, 0x0020, 0x080c, 0x1426, 0x0005, 0x81ff, 0x190c,
++      0x0d84, 0x0005, 0xc184, 0xd1b4, 0xc1b4, 0x7106, 0x0016, 0x00e6,
++      0x15c8, 0x2071, 0x0200, 0x080c, 0x14b9, 0x6014, 0x9005, 0x0590,
++      0x0096, 0x2048, 0xa864, 0x009e, 0x9084, 0x00ff, 0x908e, 0x0029,
++      0x0148, 0x908e, 0x0048, 0x1530, 0x00f6, 0x2c78, 0x080c, 0x150d,
++      0x00fe, 0x00a8, 0x00f6, 0x2c78, 0x080c, 0x163f, 0x00fe, 0x2009,
++      0x01f4, 0x8109, 0x0160, 0x2001, 0x0201, 0x2004, 0x9005, 0x0dc8,
++      0x2001, 0x0218, 0x2004, 0xd0ec, 0x1110, 0x0401, 0x0040, 0x2001,
++      0x020d, 0x2003, 0x0020, 0x080c, 0x1269, 0x7803, 0x0001, 0x00ee,
++      0x001e, 0x0005, 0x2001, 0x020d, 0x2003, 0x0050, 0x2003, 0x0020,
++      0x0069, 0x0ca8, 0x0031, 0x2060, 0x2009, 0x0053, 0x080c, 0x95ce,
++      0x0005, 0x7808, 0xd09c, 0x0de8, 0x7820, 0x0005, 0x080c, 0x13a1,
++      0x00d6, 0x2069, 0x0200, 0x2009, 0x01f4, 0x8109, 0x0508, 0x6804,
++      0x9005, 0x0dd8, 0x2001, 0x015d, 0x2003, 0x0000, 0x79bc, 0xd1a4,
++      0x1520, 0x79b8, 0x918c, 0x0fff, 0x0178, 0x9182, 0x0841, 0x1260,
++      0x9188, 0x0007, 0x918c, 0x0ff8, 0x810c, 0x810c, 0x810c, 0x04e1,
++      0x6827, 0x0001, 0x8109, 0x1dd8, 0x04b9, 0x6827, 0x0002, 0x04a1,
++      0x6804, 0x9005, 0x1130, 0x682c, 0xd0e4, 0x11e0, 0x6804, 0x9005,
++      0x0de8, 0x79b8, 0xd1ec, 0x1130, 0x08c8, 0x080c, 0x724d, 0x080c,
++      0x1827, 0x0070, 0x7827, 0x0015, 0x782b, 0x0000, 0x2001, 0x020d,
++      0x2003, 0x0020, 0x2001, 0x0307, 0x2003, 0x0300, 0x7803, 0x0001,
++      0x00de, 0x0005, 0x682c, 0x9084, 0x5400, 0x9086, 0x5400, 0x0d50,
++      0x7827, 0x0015, 0x782b, 0x0000, 0x7803, 0x0001, 0x6800, 0x9085,
++      0x1800, 0x6802, 0x00de, 0x0005, 0x6824, 0x9084, 0x0003, 0x1de0,
++      0x0005, 0x2001, 0x0030, 0x2c08, 0x621c, 0x0021, 0x7830, 0x9086,
++      0x0041, 0x0005, 0x00f6, 0x2079, 0x0300, 0x0006, 0x7808, 0xd09c,
++      0x0140, 0x0016, 0x0026, 0x00c6, 0x080c, 0x129f, 0x00ce, 0x002e,
++      0x001e, 0x000e, 0x0006, 0x7832, 0x7936, 0x7a3a, 0x781b, 0x8080,
++      0x2009, 0xff00, 0x8109, 0x0130, 0x7818, 0xd0bc, 0x1dd8, 0x000e,
++      0x00fe, 0x0005, 0x000e, 0x792c, 0x3900, 0x8000, 0x2004, 0x080c,
++      0x0d84, 0x7037, 0x0001, 0x7150, 0x7037, 0x0002, 0x7050, 0x2060,
++      0xd1bc, 0x1110, 0x7054, 0x2060, 0x0005, 0x00e6, 0x0016, 0x2071,
++      0x0200, 0x0c79, 0x7358, 0x745c, 0x6014, 0x905d, 0x0598, 0x2b48,
++      0x6010, 0x00b6, 0x2058, 0xb800, 0x00be, 0xd0bc, 0x190c, 0xb431,
++      0xab42, 0xac3e, 0x2001, 0x1874, 0x2004, 0xd0b4, 0x1170, 0x601c,
++      0xd0e4, 0x1158, 0x6010, 0x00b6, 0x2058, 0xb800, 0x00be, 0xd0bc,
++      0x1120, 0xa83b, 0x7fff, 0xa837, 0xffff, 0x080c, 0x1cfd, 0x1190,
++      0x080c, 0x168e, 0x2a00, 0xa816, 0x0130, 0x2800, 0xa80e, 0x2c05,
++      0xa80a, 0x2c00, 0xa812, 0x7037, 0x0020, 0x781f, 0x0300, 0x001e,
++      0x00ee, 0x0005, 0x7037, 0x0050, 0x7037, 0x0020, 0x001e, 0x00ee,
++      0x080c, 0x1426, 0x0005, 0x080c, 0x0d84, 0x2ff0, 0x0126, 0x2091,
++      0x2200, 0x3e60, 0x6014, 0x2048, 0x2940, 0x903e, 0x2730, 0xa864,
++      0x2068, 0xa81a, 0x9d84, 0x000f, 0x9088, 0x1cdd, 0x2165, 0x0002,
++      0x1537, 0x1584, 0x1537, 0x1537, 0x1537, 0x1566, 0x1537, 0x153b,
++      0x1530, 0x157b, 0x1537, 0x1537, 0x1537, 0x1537, 0x154f, 0x1545,
++      0xa964, 0x918c, 0x00ff, 0x918e, 0x0048, 0x0904, 0x157b, 0x9085,
++      0x0001, 0x0804, 0x1637, 0xa87c, 0xd0bc, 0x0dc8, 0xa890, 0xa842,
++      0xa88c, 0xa83e, 0xa888, 0x0804, 0x158b, 0xa87c, 0xd0bc, 0x0d78,
++      0xa890, 0xa842, 0xa88c, 0xa83e, 0xa888, 0x0804, 0x15da, 0xa87c,
++      0xd0bc, 0x0d28, 0xa890, 0xa842, 0xa88c, 0xa83e, 0xa804, 0x9045,
++      0x090c, 0x0d84, 0xa164, 0xa91a, 0x91ec, 0x000f, 0x9d80, 0x1cdd,
++      0x2065, 0xa888, 0xd19c, 0x1904, 0x15da, 0x0428, 0xa87c, 0xd0ac,
++      0x0970, 0xa804, 0x9045, 0x090c, 0x0d84, 0xa164, 0xa91a, 0x91ec,
++      0x000f, 0x9d80, 0x1cdd, 0x2065, 0x9006, 0xa842, 0xa83e, 0xd19c,
++      0x1904, 0x15da, 0x0080, 0xa87c, 0xd0ac, 0x0904, 0x1537, 0x9006,
++      0xa842, 0xa83e, 0x0804, 0x15da, 0xa87c, 0xd0ac, 0x0904, 0x1537,
++      0x9006, 0xa842, 0xa83e, 0x2c05, 0x908a, 0x0036, 0x1a0c, 0x0d84,
++      0x9082, 0x001b, 0x0002, 0x15ae, 0x15ae, 0x15b0, 0x15ae, 0x15ae,
++      0x15ae, 0x15b6, 0x15ae, 0x15ae, 0x15ae, 0x15bc, 0x15ae, 0x15ae,
++      0x15ae, 0x15c2, 0x15ae, 0x15ae, 0x15ae, 0x15c8, 0x15ae, 0x15ae,
++      0x15ae, 0x15ce, 0x15ae, 0x15ae, 0x15ae, 0x15d4, 0x080c, 0x0d84,
++      0xa574, 0xa478, 0xa37c, 0xa280, 0x0804, 0x161f, 0xa584, 0xa488,
++      0xa38c, 0xa290, 0x0804, 0x161f, 0xa594, 0xa498, 0xa39c, 0xa2a0,
++      0x0804, 0x161f, 0xa5a4, 0xa4a8, 0xa3ac, 0xa2b0, 0x0804, 0x161f,
++      0xa5b4, 0xa4b8, 0xa3bc, 0xa2c0, 0x0804, 0x161f, 0xa5c4, 0xa4c8,
++      0xa3cc, 0xa2d0, 0x0804, 0x161f, 0xa5d4, 0xa4d8, 0xa3dc, 0xa2e0,
++      0x0804, 0x161f, 0x2c05, 0x908a, 0x0034, 0x1a0c, 0x0d84, 0x9082,
++      0x001b, 0x0002, 0x15fd, 0x15fb, 0x15fb, 0x15fb, 0x15fb, 0x15fb,
++      0x1604, 0x15fb, 0x15fb, 0x15fb, 0x15fb, 0x15fb, 0x160b, 0x15fb,
++      0x15fb, 0x15fb, 0x15fb, 0x15fb, 0x1612, 0x15fb, 0x15fb, 0x15fb,
++      0x15fb, 0x15fb, 0x1619, 0x080c, 0x0d84, 0xa56c, 0xa470, 0xa774,
++      0xa678, 0xa37c, 0xa280, 0x00d8, 0xa584, 0xa488, 0xa78c, 0xa690,
++      0xa394, 0xa298, 0x00a0, 0xa59c, 0xa4a0, 0xa7a4, 0xa6a8, 0xa3ac,
++      0xa2b0, 0x0068, 0xa5b4, 0xa4b8, 0xa7bc, 0xa6c0, 0xa3c4, 0xa2c8,
++      0x0030, 0xa5cc, 0xa4d0, 0xa7d4, 0xa6d8, 0xa3dc, 0xa2e0, 0xab2e,
++      0xaa32, 0xad1e, 0xac22, 0xaf26, 0xae2a, 0xa988, 0x8c60, 0x2c1d,
++      0xa8ac, 0xaab0, 0xa836, 0xaa3a, 0x8109, 0xa916, 0x1150, 0x3e60,
++      0x601c, 0xc085, 0x601e, 0xa87c, 0xc0dd, 0xa87e, 0x9006, 0x012e,
++      0x0005, 0x2800, 0xa80e, 0xab0a, 0x2c00, 0xa812, 0x0c80, 0x2ff0,
++      0x0126, 0x2091, 0x2200, 0x3e60, 0x6014, 0x2048, 0x2940, 0xa80e,
++      0x2061, 0x1cd8, 0xa80b, 0x1cd8, 0x2c05, 0xa812, 0xa964, 0xa91a,
++      0xa87c, 0xd0ac, 0x090c, 0x0d84, 0x9006, 0xa842, 0xa83e, 0x2c05,
++      0x908a, 0x0034, 0x1a0c, 0x0d84, 0xadcc, 0xacd0, 0xafd4, 0xaed8,
++      0xabdc, 0xaae0, 0xab2e, 0xaa32, 0xad1e, 0xac22, 0xaf26, 0xae2a,
++      0xa8ac, 0xaab0, 0xa836, 0xaa3a, 0xa988, 0x918a, 0x0002, 0xa916,
++      0x1150, 0x3e60, 0x601c, 0xc085, 0x601e, 0xa87c, 0xc0dd, 0xa87e,
++      0x9006, 0x012e, 0x0005, 0xa804, 0x9045, 0x090c, 0x0d84, 0xa80e,
++      0xa064, 0xa81a, 0x9084, 0x000f, 0x9080, 0x1cdd, 0x2015, 0x82ff,
++      0x090c, 0x0d84, 0xaa0a, 0x2205, 0xa812, 0x0c18, 0x903e, 0x2730,
++      0xa880, 0xd0fc, 0x1190, 0x2d00, 0x0002, 0x1783, 0x16e5, 0x16e5,
++      0x1783, 0x1783, 0x177d, 0x1783, 0x16e5, 0x1783, 0x1734, 0x1734,
++      0x1783, 0x1783, 0x1783, 0x177a, 0x1734, 0xc0fc, 0xa882, 0xab2c,
++      0xaa30, 0xad1c, 0xac20, 0xdd9c, 0x0904, 0x1785, 0x2c05, 0x908a,
++      0x0034, 0x1a0c, 0x0d84, 0x9082, 0x001b, 0x0002, 0x16d1, 0x16cf,
++      0x16cf, 0x16cf, 0x16cf, 0x16cf, 0x16d5, 0x16cf, 0x16cf, 0x16cf,
++      0x16cf, 0x16cf, 0x16d9, 0x16cf, 0x16cf, 0x16cf, 0x16cf, 0x16cf,
++      0x16dd, 0x16cf, 0x16cf, 0x16cf, 0x16cf, 0x16cf, 0x16e1, 0x080c,
++      0x0d84, 0xa774, 0xa678, 0x0804, 0x1785, 0xa78c, 0xa690, 0x0804,
++      0x1785, 0xa7a4, 0xa6a8, 0x0804, 0x1785, 0xa7bc, 0xa6c0, 0x0804,
++      0x1785, 0xa7d4, 0xa6d8, 0x0804, 0x1785, 0x2c05, 0x908a, 0x0036,
++      0x1a0c, 0x0d84, 0x9082, 0x001b, 0x0002, 0x1708, 0x1708, 0x170a,
++      0x1708, 0x1708, 0x1708, 0x1710, 0x1708, 0x1708, 0x1708, 0x1716,
++      0x1708, 0x1708, 0x1708, 0x171c, 0x1708, 0x1708, 0x1708, 0x1722,
++      0x1708, 0x1708, 0x1708, 0x1728, 0x1708, 0x1708, 0x1708, 0x172e,
++      0x080c, 0x0d84, 0xa574, 0xa478, 0xa37c, 0xa280, 0x0804, 0x1785,
++      0xa584, 0xa488, 0xa38c, 0xa290, 0x0804, 0x1785, 0xa594, 0xa498,
++      0xa39c, 0xa2a0, 0x0804, 0x1785, 0xa5a4, 0xa4a8, 0xa3ac, 0xa2b0,
++      0x0804, 0x1785, 0xa5b4, 0xa4b8, 0xa3bc, 0xa2c0, 0x0804, 0x1785,
++      0xa5c4, 0xa4c8, 0xa3cc, 0xa2d0, 0x0804, 0x1785, 0xa5d4, 0xa4d8,
++      0xa3dc, 0xa2e0, 0x0804, 0x1785, 0x2c05, 0x908a, 0x0034, 0x1a0c,
++      0x0d84, 0x9082, 0x001b, 0x0002, 0x1757, 0x1755, 0x1755, 0x1755,
++      0x1755, 0x1755, 0x175e, 0x1755, 0x1755, 0x1755, 0x1755, 0x1755,
++      0x1765, 0x1755, 0x1755, 0x1755, 0x1755, 0x1755, 0x176c, 0x1755,
++      0x1755, 0x1755, 0x1755, 0x1755, 0x1773, 0x080c, 0x0d84, 0xa56c,
++      0xa470, 0xa774, 0xa678, 0xa37c, 0xa280, 0x0438, 0xa584, 0xa488,
++      0xa78c, 0xa690, 0xa394, 0xa298, 0x0400, 0xa59c, 0xa4a0, 0xa7a4,
++      0xa6a8, 0xa3ac, 0xa2b0, 0x00c8, 0xa5b4, 0xa4b8, 0xa7bc, 0xa6c0,
++      0xa3c4, 0xa2c8, 0x0090, 0xa5cc, 0xa4d0, 0xa7d4, 0xa6d8, 0xa3dc,
++      0xa2e0, 0x0058, 0x9d86, 0x000e, 0x1130, 0x080c, 0x1c9b, 0x1904,
++      0x168e, 0x900e, 0x0050, 0x080c, 0x0d84, 0xab2e, 0xaa32, 0xad1e,
++      0xac22, 0xaf26, 0xae2a, 0x080c, 0x1c9b, 0x0005, 0x6014, 0x2048,
++      0x6118, 0x810c, 0x810c, 0x810c, 0x81ff, 0x1118, 0xa887, 0x0001,
++      0x0008, 0xa986, 0x601b, 0x0002, 0xa974, 0xd1dc, 0x1108, 0x0005,
++      0xa934, 0xa88c, 0x9106, 0x1158, 0xa938, 0xa890, 0x9106, 0x1138,
++      0x601c, 0xc084, 0x601e, 0x2009, 0x0048, 0x0804, 0x95ce, 0x0005,
++      0x0126, 0x00c6, 0x2091, 0x2200, 0x00ce, 0x7908, 0x918c, 0x0007,
++      0x9186, 0x0000, 0x0904, 0x181c, 0x9186, 0x0003, 0x0904, 0x181c,
++      0x6020, 0x6023, 0x0000, 0x0006, 0x2031, 0x0190, 0x00c6, 0x7808,
++      0xd09c, 0x190c, 0x129f, 0x00ce, 0x2001, 0x0038, 0x2c08, 0x621c,
++      0x080c, 0x1492, 0x7930, 0x9186, 0x0040, 0x0904, 0x1818, 0x9186,
++      0x0042, 0x190c, 0x0d84, 0x2001, 0x001e, 0x8001, 0x1df0, 0x8631,
++      0x1d28, 0x080c, 0x1876, 0x0026, 0x0056, 0x2001, 0x00d2, 0x8001,
++      0x1df0, 0x2031, 0x2000, 0x8631, 0x1148, 0x080c, 0x724d, 0x04b9,
++      0x601c, 0xc084, 0x601e, 0x005e, 0x002e, 0x0410, 0x2001, 0x020b,
++      0x2004, 0xd0e4, 0x0d80, 0x2001, 0x015d, 0x2003, 0x0000, 0x78ab,
++      0x0004, 0x2001, 0x0200, 0x200c, 0x918d, 0x1800, 0x2102, 0x080c,
++      0x1269, 0x601c, 0xc084, 0x601e, 0x7803, 0x0000, 0x7803, 0x0001,
++      0x005e, 0x002e, 0x2001, 0x0160, 0x2502, 0x2001, 0x0138, 0x2202,
++      0x000e, 0x6022, 0x012e, 0x0005, 0x601c, 0xc084, 0x601e, 0x7827,
++      0x0015, 0x7828, 0x9c06, 0x1db0, 0x782b, 0x0000, 0x0c98, 0x00f6,
++      0x2079, 0x0300, 0x7803, 0x0000, 0x78ab, 0x0004, 0x00fe, 0x080c,
++      0x6877, 0x11b0, 0x2001, 0x0138, 0x2003, 0x0000, 0x2001, 0x0160,
++      0x2003, 0x0000, 0x2011, 0x012c, 0xa001, 0xa001, 0x8211, 0x1de0,
++      0x0081, 0x0066, 0x2031, 0x0000, 0x080c, 0x691e, 0x006e, 0x0005,
++      0x0469, 0x0039, 0x2001, 0x0160, 0x2502, 0x2001, 0x0138, 0x2202,
++      0x0005, 0x00e6, 0x2071, 0x0200, 0x080c, 0x27fb, 0x2009, 0x003c,
++      0x080c, 0x2014, 0x2001, 0x015d, 0x2003, 0x0000, 0x7000, 0x9084,
++      0x003c, 0x1de0, 0x70a0, 0x70a2, 0x7098, 0x709a, 0x709c, 0x709e,
++      0x2001, 0x020d, 0x2003, 0x0020, 0x00f6, 0x2079, 0x0300, 0x080c,
++      0x1269, 0x7803, 0x0001, 0x00fe, 0x00ee, 0x0005, 0x2001, 0x0138,
++      0x2014, 0x2003, 0x0000, 0x2001, 0x0160, 0x202c, 0x2003, 0x0000,
++      0x080c, 0x6877, 0x1108, 0x0005, 0x2021, 0x0260, 0x2001, 0x0141,
++      0x201c, 0xd3dc, 0x1168, 0x2001, 0x0109, 0x201c, 0x939c, 0x0048,
++      0x1160, 0x2001, 0x0111, 0x201c, 0x83ff, 0x1110, 0x8421, 0x1d70,
++      0x2001, 0x015d, 0x2003, 0x0000, 0x0005, 0x0046, 0x2021, 0x0019,
++      0x2003, 0x0048, 0xa001, 0xa001, 0x201c, 0x939c, 0x0048, 0x0120,
++      0x8421, 0x1db0, 0x004e, 0x0c60, 0x004e, 0x0c40, 0x0126, 0x2091,
++      0x2400, 0x2071, 0x1a33, 0x2079, 0x0090, 0x012e, 0x0005, 0x9280,
++      0x0005, 0x2004, 0x2048, 0xa97c, 0xd1dc, 0x1904, 0x1932, 0xa964,
++      0x9184, 0x0007, 0x0002, 0x18cb, 0x191d, 0x18d2, 0x18d2, 0x18d2,
++      0x1905, 0x18e5, 0x18d4, 0x2100, 0x9084, 0x00ff, 0x9086, 0x0048,
++      0x0904, 0x191d, 0x080c, 0x0d84, 0xa87c, 0xd0b4, 0x0904, 0x1ae4,
++      0xa890, 0xa842, 0xa83a, 0xa88c, 0xa83e, 0xa836, 0xa8ac, 0xa846,
++      0xa8b0, 0xa84a, 0xa988, 0x0804, 0x1925, 0xa864, 0x9084, 0x00ff,
++      0x9086, 0x001e, 0x1d38, 0xa87c, 0xd0b4, 0x0904, 0x1ae4, 0xa890,
++      0xa842, 0xa83a, 0xa88c, 0xa83e, 0xa836, 0xa8ac, 0xa846, 0xa8b0,
++      0xa84a, 0xa804, 0xa85a, 0x2040, 0xa064, 0x9084, 0x000f, 0x9080,
++      0x1cdd, 0x2005, 0xa812, 0xa988, 0x0448, 0x918c, 0x00ff, 0x9186,
++      0x0015, 0x1540, 0xa87c, 0xd0b4, 0x0904, 0x1ae4, 0xa804, 0xa85a,
++      0x2040, 0xa064, 0x9084, 0x000f, 0x9080, 0x1cdd, 0x2005, 0xa812,
++      0xa988, 0x9006, 0xa842, 0xa83e, 0x0088, 0xa87c, 0xd0b4, 0x0904,
++      0x1ae4, 0xa988, 0x9006, 0xa842, 0xa83e, 0x2900, 0xa85a, 0xa864,
++      0x9084, 0x000f, 0x9080, 0x1cdd, 0x2005, 0xa812, 0xa916, 0xa87c,
++      0xc0dd, 0xa87e, 0x0005, 0x00f6, 0x2079, 0x0090, 0x782c, 0xd0fc,
++      0x190c, 0x1b25, 0x00e6, 0x2071, 0x1a33, 0x7000, 0x9005, 0x1904,
++      0x198c, 0x7206, 0x9280, 0x0005, 0x204c, 0x9280, 0x0004, 0x2004,
++      0x782b, 0x0004, 0x00f6, 0x2079, 0x0200, 0x7803, 0x0040, 0x00fe,
++      0x00b6, 0x2058, 0xb86c, 0x7836, 0xb890, 0x00be, 0x00f6, 0x2079,
++      0x0200, 0x7803, 0x0040, 0xa001, 0xa001, 0xa001, 0xa001, 0xa001,
++      0xa001, 0x781a, 0x2079, 0x0100, 0x8004, 0x78d6, 0x00fe, 0xa814,
++      0x2050, 0xa858, 0x2040, 0xa810, 0x2060, 0xa064, 0x90ec, 0x000f,
++      0xa944, 0x791a, 0x7116, 0xa848, 0x781e, 0x701a, 0x9006, 0x700e,
++      0x7012, 0x7004, 0xa940, 0xa838, 0x9106, 0x1188, 0xa93c, 0xa834,
++      0x9106, 0x1168, 0x8aff, 0x01a8, 0x0126, 0x2091, 0x8000, 0x00a1,
++      0x0108, 0x0091, 0x012e, 0x9006, 0x00ee, 0x00fe, 0x0005, 0x0036,
++      0x0046, 0xab38, 0xac34, 0x080c, 0x1cfd, 0x004e, 0x003e, 0x0d50,
++      0x0c98, 0x9085, 0x0001, 0x0c80, 0x0076, 0x0066, 0x0056, 0x0046,
++      0x0036, 0x0026, 0x8aff, 0x0904, 0x1add, 0x700c, 0x7214, 0x923a,
++      0x7010, 0x7218, 0x9203, 0x0a04, 0x1adc, 0x9705, 0x0904, 0x1adc,
++      0x903e, 0x2730, 0xa880, 0xd0fc, 0x1190, 0x2d00, 0x0002, 0x1ac0,
++      0x1a07, 0x1a07, 0x1ac0, 0x1ac0, 0x1aa3, 0x1ac0, 0x1a07, 0x1aa9,
++      0x1a56, 0x1a56, 0x1ac0, 0x1ac0, 0x1ac0, 0x1a9d, 0x1a56, 0xc0fc,
++      0xa882, 0xab2c, 0xaa30, 0xad1c, 0xac20, 0xdd9c, 0x0904, 0x1ac2,
++      0x2c05, 0x908a, 0x0034, 0x1a0c, 0x0d84, 0x9082, 0x001b, 0x0002,
++      0x19f3, 0x19f1, 0x19f1, 0x19f1, 0x19f1, 0x19f1, 0x19f7, 0x19f1,
++      0x19f1, 0x19f1, 0x19f1, 0x19f1, 0x19fb, 0x19f1, 0x19f1, 0x19f1,
++      0x19f1, 0x19f1, 0x19ff, 0x19f1, 0x19f1, 0x19f1, 0x19f1, 0x19f1,
++      0x1a03, 0x080c, 0x0d84, 0xa774, 0xa678, 0x0804, 0x1ac2, 0xa78c,
++      0xa690, 0x0804, 0x1ac2, 0xa7a4, 0xa6a8, 0x0804, 0x1ac2, 0xa7bc,
++      0xa6c0, 0x0804, 0x1ac2, 0xa7d4, 0xa6d8, 0x0804, 0x1ac2, 0x2c05,
++      0x908a, 0x0036, 0x1a0c, 0x0d84, 0x9082, 0x001b, 0x0002, 0x1a2a,
++      0x1a2a, 0x1a2c, 0x1a2a, 0x1a2a, 0x1a2a, 0x1a32, 0x1a2a, 0x1a2a,
++      0x1a2a, 0x1a38, 0x1a2a, 0x1a2a, 0x1a2a, 0x1a3e, 0x1a2a, 0x1a2a,
++      0x1a2a, 0x1a44, 0x1a2a, 0x1a2a, 0x1a2a, 0x1a4a, 0x1a2a, 0x1a2a,
++      0x1a2a, 0x1a50, 0x080c, 0x0d84, 0xa574, 0xa478, 0xa37c, 0xa280,
++      0x0804, 0x1ac2, 0xa584, 0xa488, 0xa38c, 0xa290, 0x0804, 0x1ac2,
++      0xa594, 0xa498, 0xa39c, 0xa2a0, 0x0804, 0x1ac2, 0xa5a4, 0xa4a8,
++      0xa3ac, 0xa2b0, 0x0804, 0x1ac2, 0xa5b4, 0xa4b8, 0xa3bc, 0xa2c0,
++      0x0804, 0x1ac2, 0xa5c4, 0xa4c8, 0xa3cc, 0xa2d0, 0x0804, 0x1ac2,
++      0xa5d4, 0xa4d8, 0xa3dc, 0xa2e0, 0x0804, 0x1ac2, 0x2c05, 0x908a,
++      0x0034, 0x1a0c, 0x0d84, 0x9082, 0x001b, 0x0002, 0x1a79, 0x1a77,
++      0x1a77, 0x1a77, 0x1a77, 0x1a77, 0x1a81, 0x1a77, 0x1a77, 0x1a77,
++      0x1a77, 0x1a77, 0x1a88, 0x1a77, 0x1a77, 0x1a77, 0x1a77, 0x1a77,
++      0x1a8f, 0x1a77, 0x1a77, 0x1a77, 0x1a77, 0x1a77, 0x1a96, 0x080c,
++      0x0d84, 0xa56c, 0xa470, 0xa774, 0xa678, 0xa37c, 0xa280, 0x0804,
++      0x1ac2, 0xa584, 0xa488, 0xa78c, 0xa690, 0xa394, 0xa298, 0x04d0,
++      0xa59c, 0xa4a0, 0xa7a4, 0xa6a8, 0xa3ac, 0xa2b0, 0x0498, 0xa5b4,
++      0xa4b8, 0xa7bc, 0xa6c0, 0xa3c4, 0xa2c8, 0x0460, 0xa5cc, 0xa4d0,
++      0xa7d4, 0xa6d8, 0xa3dc, 0xa2e0, 0x0428, 0xa864, 0x9084, 0x00ff,
++      0x9086, 0x001e, 0x11e8, 0x080c, 0x1c9b, 0x1904, 0x19a2, 0x900e,
++      0x04a0, 0xa864, 0x9084, 0x00ff, 0x9086, 0x0048, 0x190c, 0x0d84,
++      0x00c6, 0x7004, 0x2060, 0x6004, 0x9086, 0x0043, 0x00ce, 0x0904,
++      0x1a56, 0xab9c, 0x9016, 0xad8c, 0xac90, 0xaf94, 0xae98, 0x0010,
++      0x080c, 0x0d84, 0x7b12, 0x7a16, 0x7d02, 0x7c06, 0x7f0a, 0x7e0e,
++      0x782b, 0x0001, 0x7000, 0x8000, 0x7002, 0xa83c, 0x9300, 0xa83e,
++      0xa840, 0x9201, 0xa842, 0x700c, 0x9300, 0x700e, 0x7010, 0x9201,
++      0x7012, 0x080c, 0x1c9b, 0x0008, 0x9006, 0x002e, 0x003e, 0x004e,
++      0x005e, 0x006e, 0x007e, 0x0005, 0x080c, 0x0d84, 0x0026, 0x2001,
++      0x0105, 0x2003, 0x0010, 0x782b, 0x0004, 0x7003, 0x0000, 0x7004,
++      0x2060, 0x6014, 0x2048, 0x080c, 0xb0ad, 0x0118, 0xa880, 0xc0bd,
++      0xa882, 0x6020, 0x9086, 0x0006, 0x1180, 0x2061, 0x0100, 0x62c8,
++      0x2001, 0x00fa, 0x8001, 0x1df0, 0x60c8, 0x9206, 0x1dc0, 0x60c4,
++      0xa89a, 0x60c8, 0xa896, 0x7004, 0x2060, 0x00c6, 0x080c, 0xad1e,
++      0x00ce, 0x2001, 0x19c3, 0x2004, 0x9c06, 0x1160, 0x2009, 0x0040,
++      0x080c, 0x2014, 0x080c, 0x901f, 0x2011, 0x0000, 0x080c, 0x8ea3,
++      0x080c, 0x820b, 0x002e, 0x0804, 0x1c4d, 0x0126, 0x2091, 0x2400,
++      0xa858, 0x2040, 0x792c, 0x782b, 0x0002, 0x9184, 0x0700, 0x1904,
++      0x1ae6, 0x7000, 0x0002, 0x1c4d, 0x1b37, 0x1ba0, 0x1c4b, 0x8001,
++      0x7002, 0xd19c, 0x1150, 0x8aff, 0x0590, 0x080c, 0x199c, 0x0904,
++      0x1c4d, 0x080c, 0x199c, 0x0804, 0x1c4d, 0x782b, 0x0004, 0xd194,
++      0x0148, 0xa880, 0xc0fc, 0xa882, 0x8aff, 0x11b8, 0xa87c, 0xc0f5,
++      0xa87e, 0x0098, 0xab3c, 0xaa40, 0x7810, 0xa82e, 0x931a, 0x7814,
++      0xa832, 0x9213, 0x7800, 0xa81e, 0x7804, 0xa822, 0xab3e, 0xaa42,
++      0x080c, 0x1cb3, 0xa880, 0xc0fd, 0xa882, 0x2a00, 0xa816, 0x2800,
++      0xa85a, 0x2c00, 0xa812, 0x7003, 0x0000, 0x0804, 0x1c4d, 0x00f6,
++      0x0026, 0x781c, 0x0006, 0x7818, 0x0006, 0x2079, 0x0100, 0x7a14,
++      0x9284, 0x1984, 0x9085, 0x0012, 0x7816, 0x0036, 0x2019, 0x1000,
++      0x8319, 0x090c, 0x0d84, 0x7820, 0xd0bc, 0x1dd0, 0x003e, 0x79c8,
++      0x000e, 0x9102, 0x001e, 0x0006, 0x0016, 0x79c4, 0x000e, 0x9103,
++      0x78c6, 0x000e, 0x78ca, 0x9284, 0x1984, 0x9085, 0x0012, 0x7816,
++      0x002e, 0x00fe, 0x782b, 0x0008, 0x7003, 0x0000, 0x0804, 0x1c4d,
++      0x8001, 0x7002, 0xd194, 0x0170, 0x782c, 0xd0fc, 0x1904, 0x1b2a,
++      0xd19c, 0x1904, 0x1c49, 0x8aff, 0x0904, 0x1c4d, 0x080c, 0x199c,
++      0x0804, 0x1c4d, 0xab3c, 0xaa40, 0x080c, 0x1cb3, 0xdd9c, 0x1904,
++      0x1c08, 0x2c05, 0x908a, 0x0036, 0x1a0c, 0x0d84, 0x9082, 0x001b,
++      0x0002, 0x1bdc, 0x1bdc, 0x1bde, 0x1bdc, 0x1bdc, 0x1bdc, 0x1be4,
++      0x1bdc, 0x1bdc, 0x1bdc, 0x1bea, 0x1bdc, 0x1bdc, 0x1bdc, 0x1bf0,
++      0x1bdc, 0x1bdc, 0x1bdc, 0x1bf6, 0x1bdc, 0x1bdc, 0x1bdc, 0x1bfc,
++      0x1bdc, 0x1bdc, 0x1bdc, 0x1c02, 0x080c, 0x0d84, 0xa07c, 0x931a,
++      0xa080, 0x9213, 0x0804, 0x1b54, 0xa08c, 0x931a, 0xa090, 0x9213,
++      0x0804, 0x1b54, 0xa09c, 0x931a, 0xa0a0, 0x9213, 0x0804, 0x1b54,
++      0xa0ac, 0x931a, 0xa0b0, 0x9213, 0x0804, 0x1b54, 0xa0bc, 0x931a,
++      0xa0c0, 0x9213, 0x0804, 0x1b54, 0xa0cc, 0x931a, 0xa0d0, 0x9213,
++      0x0804, 0x1b54, 0xa0dc, 0x931a, 0xa0e0, 0x9213, 0x0804, 0x1b54,
++      0x2c05, 0x908a, 0x0034, 0x1a0c, 0x0d84, 0x9082, 0x001b, 0x0002,
++      0x1c2b, 0x1c29, 0x1c29, 0x1c29, 0x1c29, 0x1c29, 0x1c31, 0x1c29,
++      0x1c29, 0x1c29, 0x1c29, 0x1c29, 0x1c37, 0x1c29, 0x1c29, 0x1c29,
++      0x1c29, 0x1c29, 0x1c3d, 0x1c29, 0x1c29, 0x1c29, 0x1c29, 0x1c29,
++      0x1c43, 0x080c, 0x0d84, 0xa07c, 0x931a, 0xa080, 0x9213, 0x0804,
++      0x1b54, 0xa094, 0x931a, 0xa098, 0x9213, 0x0804, 0x1b54, 0xa0ac,
++      0x931a, 0xa0b0, 0x9213, 0x0804, 0x1b54, 0xa0c4, 0x931a, 0xa0c8,
++      0x9213, 0x0804, 0x1b54, 0xa0dc, 0x931a, 0xa0e0, 0x9213, 0x0804,
++      0x1b54, 0x0804, 0x1b52, 0x080c, 0x0d84, 0x012e, 0x0005, 0x00f6,
++      0x00e6, 0x2071, 0x1a33, 0x7000, 0x9086, 0x0000, 0x0904, 0x1c98,
++      0x2079, 0x0090, 0x2009, 0x0207, 0x210c, 0xd194, 0x01b8, 0x2009,
++      0x020c, 0x210c, 0x9184, 0x0003, 0x0188, 0x080c, 0xcd2b, 0x2001,
++      0x0133, 0x2004, 0x9005, 0x090c, 0x0d84, 0x0016, 0x2009, 0x0040,
++      0x080c, 0x2014, 0x001e, 0x2001, 0x020c, 0x2102, 0x2009, 0x0206,
++      0x2104, 0x2009, 0x0203, 0x210c, 0x9106, 0x1120, 0x2009, 0x0040,
++      0x080c, 0x2014, 0x782c, 0xd0fc, 0x09a8, 0x080c, 0x1b25, 0x7000,
++      0x9086, 0x0000, 0x1978, 0x782b, 0x0004, 0x782c, 0xd0ac, 0x1de8,
++      0x2009, 0x0040, 0x080c, 0x2014, 0x782b, 0x0002, 0x7003, 0x0000,
++      0x00ee, 0x00fe, 0x0005, 0x8c60, 0x2c05, 0x9005, 0x0110, 0x8a51,
++      0x0005, 0xa004, 0x9005, 0x0168, 0xa85a, 0x2040, 0xa064, 0x9084,
++      0x000f, 0x9080, 0x1cdd, 0x2065, 0x8cff, 0x090c, 0x0d84, 0x8a51,
++      0x0005, 0x2050, 0x0005, 0x8a50, 0x8c61, 0x2c05, 0x9005, 0x1190,
++      0x2800, 0x9906, 0x0120, 0xa000, 0x9005, 0x1108, 0x2900, 0x2040,
++      0xa85a, 0xa064, 0x9084, 0x000f, 0x9080, 0x1ced, 0x2065, 0x8cff,
++      0x090c, 0x0d84, 0x0005, 0x0000, 0x001d, 0x0021, 0x0025, 0x0029,
++      0x002d, 0x0031, 0x0035, 0x0000, 0x001b, 0x0021, 0x0027, 0x002d,
++      0x0033, 0x0000, 0x0000, 0x0023, 0x0000, 0x0000, 0x1cd0, 0x1ccc,
++      0x0000, 0x0000, 0x1cda, 0x0000, 0x1cd0, 0x1cd7, 0x1cd7, 0x1cd4,
++      0x0000, 0x0000, 0x0000, 0x1cda, 0x1cd7, 0x0000, 0x1cd2, 0x1cd2,
++      0x0000, 0x0000, 0x1cda, 0x0000, 0x1cd2, 0x1cd8, 0x1cd8, 0x1cd8,
++      0x0000, 0x0000, 0x0000, 0x1cda, 0x1cd8, 0x00c6, 0x00d6, 0x0086,
++      0xab42, 0xac3e, 0xa888, 0x9055, 0x0904, 0x1ed4, 0x2940, 0xa064,
++      0x90ec, 0x000f, 0x9de0, 0x1cdd, 0x9d86, 0x0007, 0x0130, 0x9d86,
++      0x000e, 0x0118, 0x9d86, 0x000f, 0x1120, 0xa08c, 0x9422, 0xa090,
++      0x931b, 0x2c05, 0x9065, 0x1140, 0x0310, 0x0804, 0x1ed4, 0xa004,
++      0x9045, 0x0904, 0x1ed4, 0x0c18, 0x2c05, 0x9005, 0x0904, 0x1dbc,
++      0xdd9c, 0x1904, 0x1d78, 0x908a, 0x0036, 0x1a0c, 0x0d84, 0x9082,
++      0x001b, 0x0002, 0x1d4d, 0x1d4d, 0x1d4f, 0x1d4d, 0x1d4d, 0x1d4d,
++      0x1d55, 0x1d4d, 0x1d4d, 0x1d4d, 0x1d5b, 0x1d4d, 0x1d4d, 0x1d4d,
++      0x1d61, 0x1d4d, 0x1d4d, 0x1d4d, 0x1d67, 0x1d4d, 0x1d4d, 0x1d4d,
++      0x1d6d, 0x1d4d, 0x1d4d, 0x1d4d, 0x1d73, 0x080c, 0x0d84, 0xa07c,
++      0x9422, 0xa080, 0x931b, 0x0804, 0x1db2, 0xa08c, 0x9422, 0xa090,
++      0x931b, 0x0804, 0x1db2, 0xa09c, 0x9422, 0xa0a0, 0x931b, 0x0804,
++      0x1db2, 0xa0ac, 0x9422, 0xa0b0, 0x931b, 0x0804, 0x1db2, 0xa0bc,
++      0x9422, 0xa0c0, 0x931b, 0x0804, 0x1db2, 0xa0cc, 0x9422, 0xa0d0,
++      0x931b, 0x0804, 0x1db2, 0xa0dc, 0x9422, 0xa0e0, 0x931b, 0x04d0,
++      0x908a, 0x0034, 0x1a0c, 0x0d84, 0x9082, 0x001b, 0x0002, 0x1d9a,
++      0x1d98, 0x1d98, 0x1d98, 0x1d98, 0x1d98, 0x1d9f, 0x1d98, 0x1d98,
++      0x1d98, 0x1d98, 0x1d98, 0x1da4, 0x1d98, 0x1d98, 0x1d98, 0x1d98,
++      0x1d98, 0x1da9, 0x1d98, 0x1d98, 0x1d98, 0x1d98, 0x1d98, 0x1dae,
++      0x080c, 0x0d84, 0xa07c, 0x9422, 0xa080, 0x931b, 0x0098, 0xa094,
++      0x9422, 0xa098, 0x931b, 0x0070, 0xa0ac, 0x9422, 0xa0b0, 0x931b,
++      0x0048, 0xa0c4, 0x9422, 0xa0c8, 0x931b, 0x0020, 0xa0dc, 0x9422,
++      0xa0e0, 0x931b, 0x0630, 0x2300, 0x9405, 0x0160, 0x8a51, 0x0904,
++      0x1ed4, 0x8c60, 0x0804, 0x1d24, 0xa004, 0x9045, 0x0904, 0x1ed4,
++      0x0804, 0x1d07, 0x8a51, 0x0904, 0x1ed4, 0x8c60, 0x2c05, 0x9005,
++      0x1158, 0xa004, 0x9045, 0x0904, 0x1ed4, 0xa064, 0x90ec, 0x000f,
++      0x9de0, 0x1cdd, 0x2c05, 0x2060, 0xa880, 0xc0fc, 0xa882, 0x0804,
++      0x1ec9, 0x2c05, 0x8422, 0x8420, 0x831a, 0x9399, 0x0000, 0xac2e,
++      0xab32, 0xdd9c, 0x1904, 0x1e66, 0x9082, 0x001b, 0x0002, 0x1e02,
++      0x1e02, 0x1e04, 0x1e02, 0x1e02, 0x1e02, 0x1e12, 0x1e02, 0x1e02,
++      0x1e02, 0x1e20, 0x1e02, 0x1e02, 0x1e02, 0x1e2e, 0x1e02, 0x1e02,
++      0x1e02, 0x1e3c, 0x1e02, 0x1e02, 0x1e02, 0x1e4a, 0x1e02, 0x1e02,
++      0x1e02, 0x1e58, 0x080c, 0x0d84, 0xa17c, 0x2400, 0x9122, 0xa180,
++      0x2300, 0x911b, 0x0a0c, 0x0d84, 0xa074, 0x9420, 0xa078, 0x9319,
++      0x0804, 0x1ec4, 0xa18c, 0x2400, 0x9122, 0xa190, 0x2300, 0x911b,
++      0x0a0c, 0x0d84, 0xa084, 0x9420, 0xa088, 0x9319, 0x0804, 0x1ec4,
++      0xa19c, 0x2400, 0x9122, 0xa1a0, 0x2300, 0x911b, 0x0a0c, 0x0d84,
++      0xa094, 0x9420, 0xa098, 0x9319, 0x0804, 0x1ec4, 0xa1ac, 0x2400,
++      0x9122, 0xa1b0, 0x2300, 0x911b, 0x0a0c, 0x0d84, 0xa0a4, 0x9420,
++      0xa0a8, 0x9319, 0x0804, 0x1ec4, 0xa1bc, 0x2400, 0x9122, 0xa1c0,
++      0x2300, 0x911b, 0x0a0c, 0x0d84, 0xa0b4, 0x9420, 0xa0b8, 0x9319,
++      0x0804, 0x1ec4, 0xa1cc, 0x2400, 0x9122, 0xa1d0, 0x2300, 0x911b,
++      0x0a0c, 0x0d84, 0xa0c4, 0x9420, 0xa0c8, 0x9319, 0x0804, 0x1ec4,
++      0xa1dc, 0x2400, 0x9122, 0xa1e0, 0x2300, 0x911b, 0x0a0c, 0x0d84,
++      0xa0d4, 0x9420, 0xa0d8, 0x9319, 0x0804, 0x1ec4, 0x9082, 0x001b,
++      0x0002, 0x1e84, 0x1e82, 0x1e82, 0x1e82, 0x1e82, 0x1e82, 0x1e91,
++      0x1e82, 0x1e82, 0x1e82, 0x1e82, 0x1e82, 0x1e9e, 0x1e82, 0x1e82,
++      0x1e82, 0x1e82, 0x1e82, 0x1eab, 0x1e82, 0x1e82, 0x1e82, 0x1e82,
++      0x1e82, 0x1eb8, 0x080c, 0x0d84, 0xa17c, 0x2400, 0x9122, 0xa180,
++      0x2300, 0x911b, 0x0a0c, 0x0d84, 0xa06c, 0x9420, 0xa070, 0x9319,
++      0x0498, 0xa194, 0x2400, 0x9122, 0xa198, 0x2300, 0x911b, 0x0a0c,
++      0x0d84, 0xa084, 0x9420, 0xa088, 0x9319, 0x0430, 0xa1ac, 0x2400,
++      0x9122, 0xa1b0, 0x2300, 0x911b, 0x0a0c, 0x0d84, 0xa09c, 0x9420,
++      0xa0a0, 0x9319, 0x00c8, 0xa1c4, 0x2400, 0x9122, 0xa1c8, 0x2300,
++      0x911b, 0x0a0c, 0x0d84, 0xa0b4, 0x9420, 0xa0b8, 0x9319, 0x0060,
++      0xa1dc, 0x2400, 0x9122, 0xa1e0, 0x2300, 0x911b, 0x0a0c, 0x0d84,
++      0xa0cc, 0x9420, 0xa0d0, 0x9319, 0xac1e, 0xab22, 0xa880, 0xc0fd,
++      0xa882, 0x2800, 0xa85a, 0x2c00, 0xa812, 0x2a00, 0xa816, 0x000e,
++      0x000e, 0x000e, 0x9006, 0x0028, 0x008e, 0x00de, 0x00ce, 0x9085,
++      0x0001, 0x0005, 0x2001, 0x0005, 0x2004, 0x9084, 0x0007, 0x0002,
++      0x1ef2, 0x1b25, 0x1ef2, 0x1ee8, 0x1eeb, 0x1eee, 0x1eeb, 0x1eee,
++      0x080c, 0x1b25, 0x0005, 0x080c, 0x1146, 0x0005, 0x080c, 0x1b25,
++      0x080c, 0x1146, 0x0005, 0x0126, 0x2091, 0x2600, 0x2079, 0x0200,
++      0x2071, 0x0260, 0x2069, 0x1800, 0x7817, 0x0000, 0x789b, 0x0814,
++      0x78a3, 0x0406, 0x789f, 0x0410, 0x2009, 0x013b, 0x200b, 0x0400,
++      0x781b, 0x0002, 0x783b, 0x001f, 0x7837, 0x0020, 0x7803, 0x1600,
++      0x012e, 0x0005, 0x2091, 0x2600, 0x781c, 0xd0a4, 0x190c, 0x2011,
++      0x7900, 0xd1dc, 0x1118, 0x9084, 0x0006, 0x001a, 0x9084, 0x000e,
++      0x0002, 0x1f39, 0x1f31, 0x71ab, 0x1f31, 0x1f33, 0x1f33, 0x1f33,
++      0x1f33, 0x7191, 0x1f31, 0x1f35, 0x1f31, 0x1f33, 0x1f31, 0x1f33,
++      0x1f31, 0x080c, 0x0d84, 0x0031, 0x0020, 0x080c, 0x7191, 0x080c,
++      0x71ab, 0x0005, 0x0006, 0x0016, 0x0026, 0x080c, 0xcd2b, 0x7930,
++      0x9184, 0x0003, 0x01c0, 0x2001, 0x19c3, 0x2004, 0x9005, 0x0170,
++      0x2001, 0x0133, 0x2004, 0x9005, 0x090c, 0x0d84, 0x00c6, 0x2001,
++      0x19c3, 0x2064, 0x080c, 0xad1e, 0x00ce, 0x00f8, 0x2009, 0x0040,
++      0x080c, 0x2014, 0x00d0, 0x9184, 0x0014, 0x01a0, 0x6a00, 0x9286,
++      0x0003, 0x0160, 0x080c, 0x6877, 0x1138, 0x080c, 0x6b40, 0x080c,
++      0x56d9, 0x080c, 0x67be, 0x0010, 0x080c, 0x55a0, 0x080c, 0x7243,
++      0x0041, 0x0018, 0x9184, 0x9540, 0x1dc8, 0x002e, 0x001e, 0x000e,
++      0x0005, 0x00e6, 0x0036, 0x0046, 0x0056, 0x2071, 0x1a30, 0x080c,
++      0x1827, 0x005e, 0x004e, 0x003e, 0x00ee, 0x0005, 0x0126, 0x2091,
++      0x2e00, 0x2071, 0x1800, 0x7128, 0x2001, 0x193e, 0x2102, 0x2001,
++      0x1946, 0x2102, 0x2001, 0x013b, 0x2102, 0x2079, 0x0200, 0x2001,
++      0x0201, 0x789e, 0x78a3, 0x0200, 0x9198, 0x0007, 0x831c, 0x831c,
++      0x831c, 0x9398, 0x0005, 0x2320, 0x9182, 0x0204, 0x1230, 0x2011,
++      0x0008, 0x8423, 0x8423, 0x8423, 0x0488, 0x9182, 0x024c, 0x1240,
++      0x2011, 0x0007, 0x8403, 0x8003, 0x9400, 0x9400, 0x9420, 0x0430,
++      0x9182, 0x02bc, 0x1238, 0x2011, 0x0006, 0x8403, 0x8003, 0x9400,
++      0x9420, 0x00e0, 0x9182, 0x034c, 0x1230, 0x2011, 0x0005, 0x8403,
++      0x8003, 0x9420, 0x0098, 0x9182, 0x042c, 0x1228, 0x2011, 0x0004,
++      0x8423, 0x8423, 0x0058, 0x9182, 0x059c, 0x1228, 0x2011, 0x0003,
++      0x8403, 0x9420, 0x0018, 0x2011, 0x0002, 0x8423, 0x9482, 0x0228,
++      0x8002, 0x8020, 0x8301, 0x9402, 0x0110, 0x0208, 0x8321, 0x8217,
++      0x8203, 0x9405, 0x789a, 0x012e, 0x0005, 0x0006, 0x00d6, 0x2069,
++      0x0200, 0x6814, 0x9084, 0xffc0, 0x910d, 0x6916, 0x00de, 0x000e,
++      0x0005, 0x00d6, 0x2069, 0x0200, 0x9005, 0x6810, 0x0110, 0xc0a5,
++      0x0008, 0xc0a4, 0x6812, 0x00de, 0x0005, 0x0006, 0x00d6, 0x2069,
++      0x0200, 0x6810, 0x9084, 0xfff8, 0x910d, 0x6912, 0x00de, 0x000e,
++      0x0005, 0x7938, 0x080c, 0x0d84, 0x00f6, 0x2079, 0x0200, 0x7902,
++      0xa001, 0xa001, 0xa001, 0xa001, 0xa001, 0xa001, 0x7902, 0xa001,
++      0xa001, 0xa001, 0xa001, 0xa001, 0xa001, 0x00fe, 0x0005, 0x0126,
++      0x2091, 0x2800, 0x2061, 0x0100, 0x2071, 0x1800, 0x2009, 0x0000,
++      0x080c, 0x27f5, 0x080c, 0x2718, 0x6054, 0x8004, 0x8004, 0x8004,
++      0x8004, 0x9084, 0x000c, 0x6150, 0x918c, 0xfff3, 0x9105, 0x6052,
++      0x6050, 0x9084, 0xfbff, 0x9085, 0x2000, 0x6052, 0x2009, 0x196a,
++      0x2011, 0x196b, 0x6358, 0x939c, 0x38f0, 0x2320, 0x080c, 0x275c,
++      0x1238, 0x939d, 0x4003, 0x94a5, 0x8603, 0x230a, 0x2412, 0x0030,
++      0x939d, 0x0203, 0x94a5, 0x8603, 0x230a, 0x2412, 0x9006, 0x080c,
++      0x2747, 0x9006, 0x080c, 0x272a, 0x20a9, 0x0012, 0x1d04, 0x2066,
++      0x2091, 0x6000, 0x1f04, 0x2066, 0x602f, 0x0100, 0x602f, 0x0000,
++      0x6050, 0x9085, 0x0400, 0x9084, 0xdfff, 0x6052, 0x6024, 0x6026,
++      0x080c, 0x2436, 0x2009, 0x00ef, 0x6132, 0x6136, 0x080c, 0x2446,
++      0x60e7, 0x0000, 0x61ea, 0x60e3, 0x0008, 0x604b, 0xf7f7, 0x6043,
++      0x0000, 0x602f, 0x0080, 0x602f, 0x0000, 0x6007, 0x049f, 0x60bb,
++      0x0000, 0x20a9, 0x0018, 0x60bf, 0x0000, 0x1f04, 0x2093, 0x60bb,
++      0x0000, 0x60bf, 0x0108, 0x60bf, 0x0012, 0x60bf, 0x0320, 0x60bf,
++      0x0018, 0x601b, 0x00f0, 0x601f, 0x001e, 0x600f, 0x006b, 0x602b,
++      0x402f, 0x012e, 0x0005, 0x00f6, 0x2079, 0x0140, 0x78c3, 0x0080,
++      0x78c3, 0x0083, 0x78c3, 0x0000, 0x00fe, 0x0005, 0x2001, 0x1834,
++      0x2003, 0x0000, 0x2001, 0x1833, 0x2003, 0x0001, 0x0005, 0x0126,
++      0x2091, 0x2800, 0x0006, 0x0016, 0x0026, 0x6124, 0x9184, 0x5e2c,
++      0x1118, 0x9184, 0x0007, 0x002a, 0x9195, 0x0004, 0x9284, 0x0007,
++      0x0002, 0x20f3, 0x20d9, 0x20dc, 0x20df, 0x20e4, 0x20e6, 0x20ea,
++      0x20ee, 0x080c, 0x7ab7, 0x00b8, 0x080c, 0x7b8a, 0x00a0, 0x080c,
++      0x7b8a, 0x080c, 0x7ab7, 0x0078, 0x0099, 0x0068, 0x080c, 0x7ab7,
++      0x0079, 0x0048, 0x080c, 0x7b8a, 0x0059, 0x0028, 0x080c, 0x7b8a,
++      0x080c, 0x7ab7, 0x0029, 0x002e, 0x001e, 0x000e, 0x012e, 0x0005,
++      0x00a6, 0x6124, 0x6028, 0xd09c, 0x0118, 0xd19c, 0x1904, 0x232f,
++      0xd1f4, 0x0110, 0x080c, 0x0d84, 0x080c, 0x6877, 0x05a0, 0x7000,
++      0x9086, 0x0003, 0x01f0, 0x6024, 0x9084, 0x1800, 0x01d0, 0x080c,
++      0x689a, 0x0118, 0x080c, 0x6888, 0x11a0, 0x6027, 0x0020, 0x6043,
++      0x0000, 0x709c, 0x9005, 0x1150, 0x709f, 0x0001, 0x00d6, 0x2069,
++      0x0140, 0x080c, 0x68d0, 0x00de, 0x1904, 0x2332, 0x080c, 0x6b4a,
++      0x0428, 0x080c, 0x689a, 0x1590, 0x6024, 0x9084, 0x1800, 0x1108,
++      0x0468, 0x080c, 0x6b4a, 0x080c, 0x6b40, 0x080c, 0x56d9, 0x080c,
++      0x67be, 0x0804, 0x232f, 0xd1ac, 0x1508, 0x6024, 0xd0dc, 0x1170,
++      0xd0e4, 0x1178, 0xd0d4, 0x1190, 0xd0cc, 0x0130, 0x7090, 0x9086,
++      0x0028, 0x1110, 0x080c, 0x6a2d, 0x0804, 0x232f, 0x080c, 0x6b45,
++      0x0048, 0x2001, 0x194c, 0x2003, 0x0002, 0x0020, 0x080c, 0x69a3,
++      0x0804, 0x232f, 0x080c, 0x6ac8, 0x0804, 0x232f, 0xd1ac, 0x0904,
++      0x224f, 0x080c, 0x6877, 0x11c0, 0x6027, 0x0020, 0x0006, 0x0026,
++      0x0036, 0x080c, 0x6891, 0x1158, 0x080c, 0x6b40, 0x080c, 0x56d9,
++      0x080c, 0x67be, 0x003e, 0x002e, 0x000e, 0x00ae, 0x0005, 0x003e,
++      0x002e, 0x000e, 0x080c, 0x6853, 0x0016, 0x0046, 0x00c6, 0x644c,
++      0x9486, 0xf0f0, 0x1138, 0x2061, 0x0100, 0x644a, 0x6043, 0x0090,
++      0x6043, 0x0010, 0x74d6, 0x948c, 0xff00, 0x7034, 0xd084, 0x0178,
++      0x9186, 0xf800, 0x1160, 0x7040, 0xd084, 0x1148, 0xc085, 0x7042,
++      0x0036, 0x2418, 0x2011, 0x8016, 0x080c, 0x447f, 0x003e, 0x080c,
++      0xb752, 0x1904, 0x222c, 0x9196, 0xff00, 0x05a8, 0x7058, 0x9084,
++      0x00ff, 0x810f, 0x81ff, 0x0110, 0x9116, 0x0568, 0x7130, 0xd184,
++      0x1550, 0x080c, 0x2e69, 0x0128, 0xc18d, 0x7132, 0x080c, 0x5f25,
++      0x1510, 0x6240, 0x9294, 0x0010, 0x0130, 0x6248, 0x9294, 0xff00,
++      0x9296, 0xff00, 0x01c0, 0x7030, 0xd08c, 0x0904, 0x222c, 0x7034,
++      0xd08c, 0x1140, 0x2001, 0x180c, 0x200c, 0xd1ac, 0x1904, 0x222c,
++      0xc1ad, 0x2102, 0x0036, 0x73d4, 0x2011, 0x8013, 0x080c, 0x447f,
++      0x003e, 0x0804, 0x222c, 0x7034, 0xd08c, 0x1140, 0x2001, 0x180c,
++      0x200c, 0xd1ac, 0x1904, 0x222c, 0xc1ad, 0x2102, 0x0036, 0x73d4,
++      0x2011, 0x8013, 0x080c, 0x447f, 0x003e, 0x7130, 0xc185, 0x7132,
++      0x2011, 0x1853, 0x220c, 0xd1a4, 0x01f0, 0x0016, 0x2009, 0x0001,
++      0x2011, 0x0100, 0x080c, 0x7a0a, 0x2019, 0x000e, 0x00c6, 0x2061,
++      0x0000, 0x080c, 0xc941, 0x00ce, 0x9484, 0x00ff, 0x9080, 0x2e6e,
++      0x200d, 0x918c, 0xff00, 0x810f, 0x2120, 0x9006, 0x2009, 0x000e,
++      0x080c, 0xc9c5, 0x001e, 0xd1ac, 0x1140, 0x0016, 0x900e, 0x2019,
++      0x0004, 0x080c, 0x2ce5, 0x001e, 0x0078, 0x0156, 0x00b6, 0x20a9,
++      0x007f, 0x900e, 0x080c, 0x5c0d, 0x1110, 0x080c, 0x56f3, 0x8108,
++      0x1f04, 0x2222, 0x00be, 0x015e, 0x00ce, 0x004e, 0x080c, 0x94da,
++      0x60e3, 0x0000, 0x001e, 0x2001, 0x1800, 0x2014, 0x9296, 0x0004,
++      0x1170, 0xd19c, 0x11a0, 0x2011, 0x180c, 0x2214, 0xd29c, 0x1120,
++      0x6204, 0x9295, 0x0002, 0x6206, 0x6228, 0xc29d, 0x622a, 0x2003,
++      0x0001, 0x2001, 0x1824, 0x2003, 0x0000, 0x6027, 0x0020, 0xd194,
++      0x0904, 0x232f, 0x0016, 0x6220, 0xd2b4, 0x0904, 0x22db, 0x080c,
++      0x7893, 0x080c, 0x8b50, 0x6027, 0x0004, 0x00f6, 0x2019, 0x19bd,
++      0x2304, 0x907d, 0x0904, 0x22ac, 0x7804, 0x9086, 0x0032, 0x1904,
++      0x22ac, 0x00d6, 0x00c6, 0x00e6, 0x0096, 0x2069, 0x0140, 0x7814,
++      0x685e, 0x7808, 0x685a, 0x6043, 0x0002, 0x2001, 0x0003, 0x8001,
++      0x1df0, 0x6043, 0x0000, 0x2001, 0x003c, 0x8001, 0x1df0, 0x2001,
++      0x1000, 0x080c, 0x28a5, 0x9006, 0x080c, 0x28a5, 0x2001, 0x001e,
++      0x8001, 0x0240, 0x20a9, 0x0009, 0x080c, 0x27d0, 0x6904, 0xd1dc,
++      0x1140, 0x0cb0, 0x2001, 0x0100, 0x080c, 0x28a5, 0x9006, 0x080c,
++      0x28a5, 0x080c, 0x8026, 0x080c, 0x8125, 0x7814, 0x2048, 0xa867,
++      0x0103, 0x2f60, 0x080c, 0x9554, 0x009e, 0x00ee, 0x00ce, 0x00de,
++      0x00fe, 0x001e, 0x00ae, 0x0005, 0x00fe, 0x00d6, 0x2069, 0x0140,
++      0x6804, 0x9084, 0x4000, 0x0138, 0x2001, 0x1000, 0x080c, 0x28a5,
++      0x9006, 0x080c, 0x28a5, 0x00de, 0x00c6, 0x2061, 0x19b4, 0x6028,
++      0x909a, 0x00c8, 0x1238, 0x8000, 0x602a, 0x00ce, 0x080c, 0x8b2c,
++      0x0804, 0x232e, 0x2061, 0x0100, 0x62c0, 0x080c, 0x9367, 0x2019,
++      0x19bd, 0x2304, 0x9065, 0x0120, 0x2009, 0x0027, 0x080c, 0x95ce,
++      0x00ce, 0x0804, 0x232e, 0xd2bc, 0x05f0, 0x080c, 0x78a0, 0x6014,
++      0x9084, 0x1984, 0x9085, 0x0010, 0x6016, 0x6027, 0x0004, 0x00d6,
++      0x2069, 0x0140, 0x6804, 0x9084, 0x4000, 0x0138, 0x2001, 0x1000,
++      0x080c, 0x28a5, 0x9006, 0x080c, 0x28a5, 0x00de, 0x00c6, 0x2061,
++      0x19b4, 0x6044, 0x909a, 0x00c8, 0x1608, 0x8000, 0x6046, 0x603c,
++      0x00ce, 0x9005, 0x0558, 0x2009, 0x07d0, 0x080c, 0x7898, 0x9080,
++      0x0008, 0x2004, 0x9086, 0x0006, 0x1138, 0x6114, 0x918c, 0x1984,
++      0x918d, 0x0012, 0x6116, 0x00d0, 0x6114, 0x918c, 0x1984, 0x918d,
++      0x0016, 0x6116, 0x0098, 0x6027, 0x0004, 0x0080, 0x0036, 0x2019,
++      0x0001, 0x080c, 0x8dfe, 0x003e, 0x2019, 0x19c3, 0x2304, 0x9065,
++      0x0120, 0x2009, 0x004f, 0x080c, 0x95ce, 0x00ce, 0x001e, 0xd19c,
++      0x0904, 0x23a1, 0x7034, 0xd0ac, 0x1904, 0x2376, 0x0016, 0x0156,
++      0x6027, 0x0008, 0x6050, 0x9085, 0x0040, 0x6052, 0x6050, 0x9084,
++      0xfbcf, 0x6052, 0x080c, 0x27ef, 0x9085, 0x2000, 0x6052, 0x20a9,
++      0x0012, 0x1d04, 0x2349, 0x080c, 0x78c7, 0x1f04, 0x2349, 0x6050,
++      0x9085, 0x0400, 0x9084, 0xdfbf, 0x6052, 0x20a9, 0x0028, 0xa001,
++      0x1f04, 0x2357, 0x6150, 0x9185, 0x1400, 0x6052, 0x20a9, 0x0366,
++      0x1d04, 0x2360, 0x080c, 0x78c7, 0x6020, 0xd09c, 0x1130, 0x015e,
++      0x6152, 0x001e, 0x6027, 0x0008, 0x04a0, 0x080c, 0x27b7, 0x1f04,
++      0x2360, 0x015e, 0x6152, 0x001e, 0x6027, 0x0008, 0x0016, 0x6028,
++      0xc09c, 0x602a, 0x080c, 0x94da, 0x60e3, 0x0000, 0x080c, 0xcd0a,
++      0x080c, 0xcd25, 0x080c, 0x4dee, 0xd0fc, 0x1138, 0x080c, 0xb752,
++      0x1120, 0x9085, 0x0001, 0x080c, 0x68c0, 0x9006, 0x080c, 0x28a5,
++      0x2009, 0x0002, 0x080c, 0x27f5, 0x00e6, 0x2071, 0x1800, 0x7003,
++      0x0004, 0x080c, 0x0e3b, 0x00ee, 0x6027, 0x0008, 0x080c, 0x0b69,
++      0x001e, 0x918c, 0xffd0, 0x6126, 0x00ae, 0x0005, 0x0006, 0x0016,
++      0x0026, 0x0036, 0x00e6, 0x00f6, 0x0126, 0x2091, 0x8000, 0x2071,
++      0x1800, 0x71cc, 0x70ce, 0x9116, 0x0904, 0x23f5, 0x81ff, 0x01a0,
++      0x2009, 0x0000, 0x080c, 0x27f5, 0x2011, 0x8011, 0x2019, 0x010e,
++      0x231c, 0x939e, 0x0007, 0x1118, 0x2019, 0x0001, 0x0010, 0x2019,
++      0x0000, 0x080c, 0x447f, 0x0448, 0x2001, 0x1975, 0x200c, 0x81ff,
++      0x1140, 0x2001, 0x0109, 0x2004, 0xd0b4, 0x0118, 0x2019, 0x0003,
++      0x0008, 0x2118, 0x2011, 0x8012, 0x080c, 0x447f, 0x080c, 0x0e3b,
++      0x080c, 0x4dee, 0xd0fc, 0x1188, 0x080c, 0xb752, 0x1170, 0x00c6,
++      0x080c, 0x2491, 0x080c, 0x8d36, 0x2061, 0x0100, 0x2019, 0x0028,
++      0x2009, 0x0002, 0x080c, 0x2ce5, 0x00ce, 0x012e, 0x00fe, 0x00ee,
++      0x003e, 0x002e, 0x001e, 0x000e, 0x0005, 0x2028, 0x918c, 0x00ff,
++      0x2130, 0x9094, 0xff00, 0x11f0, 0x2011, 0x1836, 0x2214, 0xd2ac,
++      0x11c8, 0x81ff, 0x01e8, 0x2011, 0x181d, 0x2204, 0x9106, 0x1190,
++      0x2011, 0x181e, 0x2214, 0x9294, 0xff00, 0x9584, 0xff00, 0x9206,
++      0x1148, 0x2011, 0x181e, 0x2214, 0x9294, 0x00ff, 0x9584, 0x00ff,
++      0x9206, 0x1120, 0x2500, 0x080c, 0x745f, 0x0048, 0x9584, 0x00ff,
++      0x9080, 0x2e6e, 0x200d, 0x918c, 0xff00, 0x810f, 0x9006, 0x0005,
++      0x9080, 0x2e6e, 0x200d, 0x918c, 0x00ff, 0x0005, 0x00d6, 0x2069,
++      0x0140, 0x2001, 0x1816, 0x2003, 0x00ef, 0x20a9, 0x0010, 0x9006,
++      0x6852, 0x6856, 0x1f04, 0x2441, 0x00de, 0x0005, 0x0006, 0x00d6,
++      0x0026, 0x2069, 0x0140, 0x2001, 0x1816, 0x2102, 0x8114, 0x8214,
++      0x8214, 0x8214, 0x20a9, 0x0010, 0x6853, 0x0000, 0x9006, 0x82ff,
++      0x1128, 0x9184, 0x000f, 0x9080, 0xd10f, 0x2005, 0x6856, 0x8211,
++      0x1f04, 0x2456, 0x002e, 0x00de, 0x000e, 0x0005, 0x00c6, 0x2061,
++      0x1800, 0x6030, 0x0110, 0xc09d, 0x0008, 0xc09c, 0x6032, 0x00ce,
++      0x0005, 0x0156, 0x00d6, 0x0026, 0x0016, 0x0006, 0x2069, 0x0140,
++      0x6980, 0x9116, 0x0180, 0x9112, 0x1230, 0x8212, 0x8210, 0x22a8,
++      0x2001, 0x0402, 0x0018, 0x22a8, 0x2001, 0x0404, 0x680e, 0x1f04,
++      0x2486, 0x680f, 0x0000, 0x000e, 0x001e, 0x002e, 0x00de, 0x015e,
++      0x0005, 0x080c, 0x4dea, 0xd0c4, 0x0150, 0xd0a4, 0x0140, 0x9006,
++      0x0046, 0x2020, 0x2009, 0x002e, 0x080c, 0xc9c5, 0x004e, 0x0005,
++      0x00f6, 0x0016, 0x0026, 0x2079, 0x0140, 0x78c4, 0xd0dc, 0x0904,
++      0x24fd, 0x080c, 0x275c, 0x0660, 0x9084, 0x0700, 0x908e, 0x0600,
++      0x1120, 0x2011, 0x4000, 0x900e, 0x0458, 0x908e, 0x0500, 0x1120,
++      0x2011, 0x8000, 0x900e, 0x0420, 0x908e, 0x0400, 0x1120, 0x9016,
++      0x2009, 0x0001, 0x00e8, 0x908e, 0x0300, 0x1120, 0x9016, 0x2009,
++      0x0002, 0x00b0, 0x908e, 0x0200, 0x1120, 0x9016, 0x2009, 0x0004,
++      0x0078, 0x908e, 0x0100, 0x1548, 0x9016, 0x2009, 0x0008, 0x0040,
++      0x9084, 0x0700, 0x908e, 0x0300, 0x1500, 0x2011, 0x0030, 0x0058,
++      0x2300, 0x9080, 0x0020, 0x2018, 0x080c, 0x7a4b, 0x928c, 0xff00,
++      0x0110, 0x2011, 0x00ff, 0x2200, 0x8007, 0x9085, 0x004c, 0x78c2,
++      0x2009, 0x0138, 0x220a, 0x080c, 0x6877, 0x1118, 0x2009, 0x193c,
++      0x220a, 0x002e, 0x001e, 0x00fe, 0x0005, 0x78c3, 0x0000, 0x0cc8,
++      0x0126, 0x2091, 0x2800, 0x0006, 0x0016, 0x0026, 0x2001, 0x0170,
++      0x200c, 0x8000, 0x2014, 0x9184, 0x0003, 0x0110, 0x080c, 0x0d84,
++      0x002e, 0x001e, 0x000e, 0x012e, 0x0005, 0x2001, 0x0171, 0x2004,
++      0xd0dc, 0x0168, 0x2001, 0x0170, 0x200c, 0x918c, 0x00ff, 0x918e,
++      0x004c, 0x1128, 0x200c, 0x918c, 0xff00, 0x810f, 0x0005, 0x900e,
++      0x2001, 0x0227, 0x2004, 0x8007, 0x9084, 0x00ff, 0x8004, 0x9108,
++      0x2001, 0x0226, 0x2004, 0x8007, 0x9084, 0x00ff, 0x8004, 0x9108,
++      0x0005, 0x0018, 0x000c, 0x0018, 0x0020, 0x1000, 0x0800, 0x1000,
++      0x1800, 0x0156, 0x0006, 0x0016, 0x0026, 0x00e6, 0x2001, 0x195d,
++      0x2004, 0x908a, 0x0007, 0x1a0c, 0x0d84, 0x0033, 0x00ee, 0x002e,
++      0x001e, 0x000e, 0x015e, 0x0005, 0x255b, 0x2579, 0x259d, 0x259f,
++      0x25c8, 0x25ca, 0x25cc, 0x2001, 0x0001, 0x080c, 0x23a6, 0x080c,
++      0x27b2, 0x2001, 0x195f, 0x2003, 0x0000, 0x7828, 0x9084, 0xe1d7,
++      0x782a, 0x9006, 0x20a9, 0x0009, 0x080c, 0x2770, 0x2001, 0x195d,
++      0x2003, 0x0006, 0x2009, 0x001e, 0x2011, 0x25cd, 0x080c, 0x78a5,
++      0x0005, 0x2009, 0x1962, 0x200b, 0x0000, 0x2001, 0x1967, 0x2003,
++      0x0036, 0x2001, 0x1966, 0x2003, 0x002a, 0x2001, 0x195f, 0x2003,
++      0x0001, 0x9006, 0x080c, 0x272a, 0x2001, 0xffff, 0x20a9, 0x0009,
++      0x080c, 0x2770, 0x2001, 0x195d, 0x2003, 0x0006, 0x2009, 0x001e,
++      0x2011, 0x25cd, 0x080c, 0x78a5, 0x0005, 0x080c, 0x0d84, 0x2001,
++      0x1967, 0x2003, 0x0036, 0x2001, 0x195f, 0x2003, 0x0003, 0x7a38,
++      0x9294, 0x0005, 0x9296, 0x0004, 0x0110, 0x9006, 0x0010, 0x2001,
++      0x0001, 0x080c, 0x272a, 0x2001, 0x1963, 0x2003, 0x0000, 0x2001,
++      0xffff, 0x20a9, 0x0009, 0x080c, 0x2770, 0x2001, 0x195d, 0x2003,
++      0x0006, 0x2009, 0x001e, 0x2011, 0x25cd, 0x080c, 0x78a5, 0x0005,
++      0x080c, 0x0d84, 0x080c, 0x0d84, 0x0005, 0x0006, 0x0016, 0x0026,
++      0x00e6, 0x00f6, 0x0156, 0x0126, 0x2091, 0x8000, 0x2079, 0x0100,
++      0x2001, 0x195f, 0x2004, 0x908a, 0x0007, 0x1a0c, 0x0d84, 0x0043,
++      0x012e, 0x015e, 0x00fe, 0x00ee, 0x002e, 0x001e, 0x000e, 0x0005,
++      0x25ef, 0x260f, 0x264f, 0x267f, 0x26a3, 0x26b3, 0x26b5, 0x080c,
++      0x2764, 0x11b0, 0x7850, 0x9084, 0xefff, 0x7852, 0x2009, 0x1965,
++      0x2104, 0x7a38, 0x9294, 0x0005, 0x9296, 0x0004, 0x0110, 0xc08d,
++      0x0008, 0xc085, 0x200a, 0x2001, 0x195d, 0x2003, 0x0001, 0x0030,
++      0x080c, 0x26d9, 0x2001, 0xffff, 0x080c, 0x256a, 0x0005, 0x080c,
++      0x26b7, 0x05e0, 0x2009, 0x1966, 0x2104, 0x8001, 0x200a, 0x080c,
++      0x2764, 0x1178, 0x7850, 0x9084, 0xefff, 0x7852, 0x7a38, 0x9294,
++      0x0005, 0x9296, 0x0005, 0x0518, 0x2009, 0x1965, 0x2104, 0xc085,
++      0x200a, 0x2009, 0x1962, 0x2104, 0x8000, 0x200a, 0x9086, 0x0005,
++      0x0118, 0x080c, 0x26bf, 0x00c0, 0x200b, 0x0000, 0x7a38, 0x9294,
++      0x0006, 0x9296, 0x0004, 0x0110, 0x9006, 0x0010, 0x2001, 0x0001,
++      0x080c, 0x2747, 0x2001, 0x195f, 0x2003, 0x0002, 0x0028, 0x2001,
++      0x195d, 0x2003, 0x0003, 0x0010, 0x080c, 0x258c, 0x0005, 0x080c,
++      0x26b7, 0x0560, 0x2009, 0x1966, 0x2104, 0x8001, 0x200a, 0x080c,
++      0x2764, 0x1168, 0x7850, 0x9084, 0xefff, 0x7852, 0x2001, 0x195d,
++      0x2003, 0x0003, 0x2001, 0x195e, 0x2003, 0x0000, 0x00b8, 0x2009,
++      0x1966, 0x2104, 0x9005, 0x1118, 0x080c, 0x26fc, 0x0010, 0x080c,
++      0x26cc, 0x080c, 0x26bf, 0x2009, 0x1962, 0x200b, 0x0000, 0x2001,
++      0x195f, 0x2003, 0x0001, 0x080c, 0x258c, 0x0000, 0x0005, 0x04b9,
++      0x0508, 0x080c, 0x2764, 0x11b8, 0x7850, 0x9084, 0xefff, 0x7852,
++      0x2009, 0x1963, 0x2104, 0x8000, 0x200a, 0x9086, 0x0007, 0x0108,
++      0x0078, 0x2001, 0x1968, 0x2003, 0x000a, 0x2009, 0x1965, 0x2104,
++      0xc0fd, 0x200a, 0x0038, 0x0419, 0x2001, 0x195f, 0x2003, 0x0004,
++      0x080c, 0x25b7, 0x0005, 0x0099, 0x0168, 0x080c, 0x2764, 0x1138,
++      0x7850, 0x9084, 0xefff, 0x7852, 0x080c, 0x25a3, 0x0018, 0x0079,
++      0x080c, 0x25b7, 0x0005, 0x080c, 0x0d84, 0x080c, 0x0d84, 0x2009,
++      0x1967, 0x2104, 0x8001, 0x200a, 0x090c, 0x2718, 0x0005, 0x7a38,
++      0x9294, 0x0005, 0x9296, 0x0005, 0x0110, 0x9006, 0x0010, 0x2001,
++      0x0001, 0x080c, 0x2747, 0x0005, 0x7a38, 0x9294, 0x0006, 0x9296,
++      0x0006, 0x0110, 0x9006, 0x0010, 0x2001, 0x0001, 0x080c, 0x272a,
++      0x0005, 0x2009, 0x1962, 0x2104, 0x8000, 0x200a, 0x9086, 0x0005,
++      0x0108, 0x0068, 0x200b, 0x0000, 0x7a38, 0x9294, 0x0006, 0x9296,
++      0x0006, 0x0110, 0x9006, 0x0010, 0x2001, 0x0001, 0x04d9, 0x7a38,
++      0x9294, 0x0005, 0x9296, 0x0005, 0x0110, 0x9006, 0x0010, 0x2001,
++      0x0001, 0x080c, 0x2747, 0x0005, 0x0086, 0x2001, 0x1965, 0x2004,
++      0x9084, 0x7fff, 0x090c, 0x0d84, 0x2009, 0x1964, 0x2144, 0x8846,
++      0x280a, 0x9844, 0x0dd8, 0xd08c, 0x1120, 0xd084, 0x1120, 0x080c,
++      0x0d84, 0x9006, 0x0010, 0x2001, 0x0001, 0x00a1, 0x008e, 0x0005,
++      0x0006, 0x0156, 0x2001, 0x195d, 0x20a9, 0x0009, 0x2003, 0x0000,
++      0x8000, 0x1f04, 0x271e, 0x2001, 0x1964, 0x2003, 0x8000, 0x015e,
++      0x000e, 0x0005, 0x00f6, 0x2079, 0x0100, 0x9085, 0x0000, 0x0158,
++      0x7838, 0x9084, 0xfff9, 0x9085, 0x0004, 0x783a, 0x2009, 0x196a,
++      0x210c, 0x795a, 0x0050, 0x7838, 0x9084, 0xfffb, 0x9085, 0x0006,
++      0x783a, 0x2009, 0x196b, 0x210c, 0x795a, 0x00fe, 0x0005, 0x00f6,
++      0x2079, 0x0100, 0x9085, 0x0000, 0x0138, 0x7838, 0x9084, 0xfffa,
++      0x9085, 0x0004, 0x783a, 0x0030, 0x7838, 0x9084, 0xfffb, 0x9085,
++      0x0005, 0x783a, 0x00fe, 0x0005, 0x0006, 0x2001, 0x0100, 0x2004,
++      0x9082, 0x0007, 0x000e, 0x0005, 0x0156, 0x20a9, 0x0064, 0x7820,
++      0x080c, 0x27ef, 0xd09c, 0x1110, 0x1f04, 0x2767, 0x015e, 0x0005,
++      0x0126, 0x0016, 0x0006, 0x2091, 0x8000, 0x7850, 0x9085, 0x0040,
++      0x7852, 0x7850, 0x9084, 0xfbcf, 0x7852, 0x080c, 0x27ef, 0x9085,
++      0x2000, 0x7852, 0x000e, 0x2008, 0x9186, 0x0000, 0x1118, 0x783b,
++      0x0007, 0x0090, 0x9186, 0x0001, 0x1118, 0x783b, 0x0006, 0x0060,
++      0x9186, 0x0002, 0x1118, 0x783b, 0x0005, 0x0030, 0x9186, 0x0003,
++      0x1118, 0x783b, 0x0004, 0x0000, 0x0006, 0x1d04, 0x279d, 0x080c,
++      0x78c7, 0x1f04, 0x279d, 0x7850, 0x9085, 0x0400, 0x9084, 0xdfbf,
++      0x7852, 0x080c, 0x27ef, 0x9085, 0x1000, 0x7852, 0x000e, 0x001e,
++      0x012e, 0x0005, 0x7850, 0x9084, 0xffcf, 0x7852, 0x0005, 0x0006,
++      0x0156, 0x00f6, 0x2079, 0x0100, 0x20a9, 0x000a, 0x7854, 0xd0ac,
++      0x1130, 0x7820, 0xd0e4, 0x1140, 0x1f04, 0x27c1, 0x0028, 0x7854,
++      0xd08c, 0x1110, 0x1f04, 0x27c7, 0x00fe, 0x015e, 0x000e, 0x0005,
++      0x1d04, 0x27d0, 0x080c, 0x78c7, 0x1f04, 0x27d0, 0x0005, 0x0006,
++      0x2001, 0x1969, 0x2004, 0x9086, 0x0000, 0x000e, 0x0005, 0x0006,
++      0x2001, 0x1969, 0x2004, 0x9086, 0x0001, 0x000e, 0x0005, 0x0006,
++      0x2001, 0x1969, 0x2004, 0x9086, 0x0002, 0x000e, 0x0005, 0xa001,
++      0xa001, 0xa001, 0xa001, 0xa001, 0x0005, 0x0006, 0x2001, 0x1975,
++      0x2102, 0x000e, 0x0005, 0x2009, 0x0171, 0x2104, 0xd0dc, 0x0140,
++      0x2009, 0x0170, 0x2104, 0x200b, 0x0080, 0xa001, 0xa001, 0x200a,
++      0x0005, 0x0036, 0x0046, 0x2001, 0x0141, 0x200c, 0x918c, 0xff00,
++      0x9186, 0x2000, 0x0118, 0x9186, 0x0100, 0x1580, 0x2009, 0x017f,
++      0x200b, 0x00a2, 0x2019, 0x0160, 0x2324, 0x2011, 0x0003, 0x2009,
++      0x0169, 0x2104, 0xa001, 0x210c, 0x910e, 0x1dc8, 0x9084, 0x0007,
++      0x9086, 0x0003, 0x11b8, 0x2304, 0x9402, 0x02a0, 0x1d68, 0x8211,
++      0x1d70, 0x84ff, 0x0170, 0x2001, 0x0141, 0x200c, 0x918c, 0xff00,
++      0x9186, 0x0100, 0x0130, 0x2009, 0x180c, 0x2104, 0xc0dd, 0x200a,
++      0x0008, 0x0419, 0x2001, 0x017f, 0x2003, 0x0000, 0x004e, 0x003e,
++      0x0005, 0x2001, 0x180c, 0x2004, 0xd0dc, 0x01b0, 0x2001, 0x0160,
++      0x2004, 0x9005, 0x0140, 0x2001, 0x0141, 0x2004, 0x9084, 0xff00,
++      0x9086, 0x0100, 0x1148, 0x0126, 0x2091, 0x8000, 0x0016, 0x0026,
++      0x0021, 0x002e, 0x001e, 0x012e, 0x0005, 0x00c6, 0x2061, 0x0100,
++      0x6014, 0x0006, 0x2001, 0x0161, 0x2003, 0x0000, 0x6017, 0x0018,
++      0xa001, 0xa001, 0x602f, 0x0008, 0x6104, 0x918e, 0x0010, 0x6106,
++      0x918e, 0x0010, 0x6106, 0x6017, 0x0040, 0x2001, 0x1000, 0x0429,
++      0x9006, 0x0419, 0x001e, 0x9184, 0x0003, 0x01c0, 0x0036, 0x2019,
++      0x0141, 0x2304, 0x9084, 0xff00, 0x9086, 0x0800, 0x1dd0, 0x919c,
++      0xffe4, 0x9184, 0x0001, 0x0118, 0x9385, 0x0009, 0x6016, 0x9184,
++      0x0002, 0x0118, 0x9385, 0x0012, 0x6016, 0x003e, 0x2001, 0x180c,
++      0x200c, 0xc1dc, 0x2102, 0x00ce, 0x0005, 0x0016, 0x0026, 0x2009,
++      0x0140, 0x2114, 0x9294, 0x0001, 0x9215, 0x220a, 0x002e, 0x001e,
++      0x0005, 0x2b1d, 0x2b1d, 0x2941, 0x2941, 0x294d, 0x294d, 0x2959,
++      0x2959, 0x2967, 0x2967, 0x2973, 0x2973, 0x2981, 0x2981, 0x298f,
++      0x298f, 0x29a1, 0x29a1, 0x29ad, 0x29ad, 0x29bb, 0x29bb, 0x29d9,
++      0x29d9, 0x29f9, 0x29f9, 0x29c9, 0x29c9, 0x29e9, 0x29e9, 0x2a07,
++      0x2a07, 0x299f, 0x299f, 0x299f, 0x299f, 0x299f, 0x299f, 0x299f,
++      0x299f, 0x299f, 0x299f, 0x299f, 0x299f, 0x299f, 0x299f, 0x299f,
++      0x299f, 0x299f, 0x299f, 0x299f, 0x299f, 0x299f, 0x299f, 0x299f,
++      0x299f, 0x299f, 0x299f, 0x299f, 0x299f, 0x299f, 0x299f, 0x299f,
++      0x299f, 0x2a19, 0x2a19, 0x2a25, 0x2a25, 0x2a33, 0x2a33, 0x2a41,
++      0x2a41, 0x2a51, 0x2a51, 0x2a5f, 0x2a5f, 0x2a6f, 0x2a6f, 0x2a7f,
++      0x2a7f, 0x2a91, 0x2a91, 0x2a9f, 0x2a9f, 0x2aaf, 0x2aaf, 0x2ad1,
++      0x2ad1, 0x2af3, 0x2af3, 0x2abf, 0x2abf, 0x2ae2, 0x2ae2, 0x2b02,
++      0x2b02, 0x299f, 0x299f, 0x299f, 0x299f, 0x299f, 0x299f, 0x299f,
++      0x299f, 0x299f, 0x299f, 0x299f, 0x299f, 0x299f, 0x299f, 0x299f,
++      0x299f, 0x299f, 0x299f, 0x299f, 0x299f, 0x299f, 0x299f, 0x299f,
++      0x299f, 0x299f, 0x299f, 0x299f, 0x299f, 0x299f, 0x299f, 0x299f,
++      0x299f, 0x299f, 0x299f, 0x299f, 0x299f, 0x299f, 0x299f, 0x299f,
++      0x299f, 0x299f, 0x299f, 0x299f, 0x299f, 0x299f, 0x299f, 0x299f,
++      0x299f, 0x0106, 0x0006, 0x0126, 0x01c6, 0x01d6, 0x0136, 0x0146,
++      0x0156, 0x080c, 0x20bf, 0x0804, 0x2b15, 0x0106, 0x0006, 0x0126,
++      0x01c6, 0x01d6, 0x0136, 0x0146, 0x0156, 0x080c, 0x1eda, 0x0804,
++      0x2b15, 0x0106, 0x0006, 0x0126, 0x01c6, 0x01d6, 0x0136, 0x0146,
++      0x0156, 0x080c, 0x1eda, 0x080c, 0x20bf, 0x0804, 0x2b15, 0x0106,
++      0x0006, 0x0126, 0x01c6, 0x01d6, 0x0136, 0x0146, 0x0156, 0x080c,
++      0x1f12, 0x0804, 0x2b15, 0x0106, 0x0006, 0x0126, 0x01c6, 0x01d6,
++      0x0136, 0x0146, 0x0156, 0x080c, 0x20bf, 0x080c, 0x1f12, 0x0804,
++      0x2b15, 0x0106, 0x0006, 0x0126, 0x01c6, 0x01d6, 0x0136, 0x0146,
++      0x0156, 0x080c, 0x1eda, 0x080c, 0x1f12, 0x0804, 0x2b15, 0x0106,
++      0x0006, 0x0126, 0x01c6, 0x01d6, 0x0136, 0x0146, 0x0156, 0x080c,
++      0x1eda, 0x080c, 0x20bf, 0x080c, 0x1f12, 0x0804, 0x2b15, 0xa001,
++      0x0cf0, 0x0106, 0x0006, 0x0126, 0x01c6, 0x01d6, 0x0136, 0x0146,
++      0x0156, 0x080c, 0x129f, 0x0804, 0x2b15, 0x0106, 0x0006, 0x0126,
++      0x01c6, 0x01d6, 0x0136, 0x0146, 0x0156, 0x080c, 0x20bf, 0x080c,
++      0x129f, 0x0804, 0x2b15, 0x0106, 0x0006, 0x0126, 0x01c6, 0x01d6,
++      0x0136, 0x0146, 0x0156, 0x080c, 0x1eda, 0x080c, 0x129f, 0x0804,
++      0x2b15, 0x0106, 0x0006, 0x0126, 0x01c6, 0x01d6, 0x0136, 0x0146,
++      0x0156, 0x080c, 0x20bf, 0x080c, 0x129f, 0x080c, 0x1f12, 0x0804,
++      0x2b15, 0x0106, 0x0006, 0x0126, 0x01c6, 0x01d6, 0x0136, 0x0146,
++      0x0156, 0x080c, 0x1eda, 0x080c, 0x20bf, 0x080c, 0x129f, 0x0804,
++      0x2b15, 0x0106, 0x0006, 0x0126, 0x01c6, 0x01d6, 0x0136, 0x0146,
++      0x0156, 0x080c, 0x1eda, 0x080c, 0x129f, 0x080c, 0x1f12, 0x0804,
++      0x2b15, 0x0106, 0x0006, 0x0126, 0x01c6, 0x01d6, 0x0136, 0x0146,
++      0x0156, 0x080c, 0x129f, 0x080c, 0x1f12, 0x0804, 0x2b15, 0x0106,
++      0x0006, 0x0126, 0x01c6, 0x01d6, 0x0136, 0x0146, 0x0156, 0x080c,
++      0x1eda, 0x080c, 0x20bf, 0x080c, 0x129f, 0x080c, 0x1f12, 0x0804,
++      0x2b15, 0x0106, 0x0006, 0x0126, 0x01c6, 0x01d6, 0x0136, 0x0146,
++      0x0156, 0x080c, 0x2500, 0x0804, 0x2b15, 0x0106, 0x0006, 0x0126,
++      0x01c6, 0x01d6, 0x0136, 0x0146, 0x0156, 0x080c, 0x2500, 0x080c,
++      0x20bf, 0x0804, 0x2b15, 0x0106, 0x0006, 0x0126, 0x01c6, 0x01d6,
++      0x0136, 0x0146, 0x0156, 0x080c, 0x2500, 0x080c, 0x1eda, 0x0804,
++      0x2b15, 0x0106, 0x0006, 0x0126, 0x01c6, 0x01d6, 0x0136, 0x0146,
++      0x0156, 0x080c, 0x2500, 0x080c, 0x1eda, 0x080c, 0x20bf, 0x0804,
++      0x2b15, 0x0106, 0x0006, 0x0126, 0x01c6, 0x01d6, 0x0136, 0x0146,
++      0x0156, 0x080c, 0x2500, 0x080c, 0x1f12, 0x0804, 0x2b15, 0x0106,
++      0x0006, 0x0126, 0x01c6, 0x01d6, 0x0136, 0x0146, 0x0156, 0x080c,
++      0x2500, 0x080c, 0x20bf, 0x080c, 0x1f12, 0x0804, 0x2b15, 0x0106,
++      0x0006, 0x0126, 0x01c6, 0x01d6, 0x0136, 0x0146, 0x0156, 0x080c,
++      0x2500, 0x080c, 0x1eda, 0x080c, 0x1f12, 0x0804, 0x2b15, 0x0106,
++      0x0006, 0x0126, 0x01c6, 0x01d6, 0x0136, 0x0146, 0x0156, 0x080c,
++      0x2500, 0x080c, 0x1eda, 0x080c, 0x20bf, 0x080c, 0x1f12, 0x0804,
++      0x2b15, 0x0106, 0x0006, 0x0126, 0x01c6, 0x01d6, 0x0136, 0x0146,
++      0x0156, 0x080c, 0x2500, 0x080c, 0x129f, 0x0804, 0x2b15, 0x0106,
++      0x0006, 0x0126, 0x01c6, 0x01d6, 0x0136, 0x0146, 0x0156, 0x080c,
++      0x2500, 0x080c, 0x20bf, 0x080c, 0x129f, 0x0804, 0x2b15, 0x0106,
++      0x0006, 0x0126, 0x01c6, 0x01d6, 0x0136, 0x0146, 0x0156, 0x080c,
++      0x2500, 0x080c, 0x1eda, 0x080c, 0x129f, 0x0804, 0x2b15, 0x0106,
++      0x0006, 0x0126, 0x01c6, 0x01d6, 0x0136, 0x0146, 0x0156, 0x080c,
++      0x2500, 0x080c, 0x20bf, 0x080c, 0x129f, 0x080c, 0x1f12, 0x0804,
++      0x2b15, 0x0106, 0x0006, 0x0126, 0x01c6, 0x01d6, 0x0136, 0x0146,
++      0x0156, 0x080c, 0x2500, 0x080c, 0x1eda, 0x080c, 0x20bf, 0x080c,
++      0x129f, 0x0498, 0x0106, 0x0006, 0x0126, 0x01c6, 0x01d6, 0x0136,
++      0x0146, 0x0156, 0x080c, 0x2500, 0x080c, 0x1eda, 0x080c, 0x129f,
++      0x080c, 0x1f12, 0x0410, 0x0106, 0x0006, 0x0126, 0x01c6, 0x01d6,
++      0x0136, 0x0146, 0x0156, 0x080c, 0x2500, 0x080c, 0x129f, 0x080c,
++      0x1f12, 0x0098, 0x0106, 0x0006, 0x0126, 0x01c6, 0x01d6, 0x0136,
++      0x0146, 0x0156, 0x080c, 0x2500, 0x080c, 0x1eda, 0x080c, 0x20bf,
++      0x080c, 0x129f, 0x080c, 0x1f12, 0x0000, 0x015e, 0x014e, 0x013e,
++      0x01de, 0x01ce, 0x012e, 0x000e, 0x010e, 0x000d, 0x00b6, 0x00c6,
++      0x0026, 0x0046, 0x9026, 0x080c, 0x5eeb, 0x1904, 0x2c03, 0x72d8,
++      0x2001, 0x194b, 0x2004, 0x9005, 0x1110, 0xd29c, 0x0148, 0xd284,
++      0x1138, 0xd2bc, 0x1904, 0x2c03, 0x080c, 0x2c08, 0x0804, 0x2c03,
++      0xd2cc, 0x1904, 0x2c03, 0x080c, 0x6877, 0x1120, 0x70a7, 0xffff,
++      0x0804, 0x2c03, 0xd294, 0x0120, 0x70a7, 0xffff, 0x0804, 0x2c03,
++      0x080c, 0x2e64, 0x0140, 0x080c, 0xb759, 0x1904, 0x2ba4, 0x70a7,
++      0xffff, 0x0804, 0x2c03, 0x2001, 0x1816, 0x203c, 0x728c, 0xd284,
++      0x0904, 0x2ba4, 0xd28c, 0x1904, 0x2ba4, 0x0036, 0x73a4, 0x938e,
++      0xffff, 0x1110, 0x2019, 0x0001, 0x8314, 0x92e0, 0x1c80, 0x2c04,
++      0x938c, 0x0001, 0x0120, 0x9084, 0xff00, 0x8007, 0x0010, 0x9084,
++      0x00ff, 0x970e, 0x0540, 0x908e, 0x0000, 0x0528, 0x908e, 0x00ff,
++      0x1150, 0x7230, 0xd284, 0x1518, 0x728c, 0xc28d, 0x728e, 0x70a7,
++      0xffff, 0x003e, 0x0408, 0x900e, 0x080c, 0x23fd, 0x080c, 0x5bb0,
++      0x11a0, 0x080c, 0x5f2d, 0x1150, 0x7030, 0xd08c, 0x0118, 0xb800,
++      0xd0bc, 0x0120, 0x080c, 0x2c1f, 0x0140, 0x0028, 0x080c, 0x2d5b,
++      0x080c, 0x2c4b, 0x0110, 0x8318, 0x0838, 0x73a6, 0x0010, 0x70a7,
++      0xffff, 0x003e, 0x0804, 0x2c03, 0x9780, 0x2e6e, 0x203d, 0x97bc,
++      0xff00, 0x873f, 0x2041, 0x007e, 0x70a4, 0x9096, 0xffff, 0x1118,
++      0x900e, 0x28a8, 0x0050, 0x9812, 0x0220, 0x2008, 0x9802, 0x20a8,
++      0x0020, 0x70a7, 0xffff, 0x0804, 0x2c03, 0x2700, 0x0156, 0x0016,
++      0x9106, 0x05b0, 0xc484, 0x080c, 0x5c0d, 0x0138, 0x080c, 0xb759,
++      0x1578, 0x080c, 0x5bb0, 0x15a0, 0x0008, 0xc485, 0x080c, 0x5f2d,
++      0x1130, 0x7030, 0xd08c, 0x01f8, 0xb800, 0xd0bc, 0x11e0, 0x728c,
++      0xd28c, 0x0180, 0x080c, 0x5f2d, 0x9082, 0x0006, 0x02c8, 0xd484,
++      0x1118, 0x080c, 0x5bd1, 0x0028, 0x080c, 0x2de6, 0x0188, 0x080c,
++      0x2e11, 0x0070, 0x080c, 0x2d5b, 0x080c, 0xb759, 0x1148, 0x080c,
++      0x2c4b, 0x0170, 0x0028, 0x080c, 0x2de6, 0x0110, 0x0441, 0x0140,
++      0x001e, 0x8108, 0x015e, 0x1f04, 0x2bbd, 0x70a7, 0xffff, 0x0018,
++      0x001e, 0x015e, 0x71a6, 0x004e, 0x002e, 0x00ce, 0x00be, 0x0005,
++      0x00c6, 0x0016, 0x70a7, 0x0001, 0x2009, 0x007e, 0x080c, 0x5bb0,
++      0x1158, 0xb813, 0x00ff, 0xb817, 0xfffe, 0x080c, 0x2d5b, 0x0499,
++      0x0118, 0x70d8, 0xc0bd, 0x70da, 0x001e, 0x00ce, 0x0005, 0x0016,
++      0x0076, 0x00d6, 0x00c6, 0x2001, 0x1857, 0x2004, 0x9084, 0x00ff,
++      0xb842, 0x080c, 0x95a1, 0x01d0, 0x2b00, 0x6012, 0x080c, 0xb4e6,
++      0x6023, 0x0001, 0x9006, 0x080c, 0x5b4d, 0x2001, 0x0000, 0x080c,
++      0x5b61, 0x0126, 0x2091, 0x8000, 0x70a0, 0x8000, 0x70a2, 0x012e,
++      0x2009, 0x0004, 0x080c, 0x95ce, 0x9085, 0x0001, 0x00ce, 0x00de,
++      0x007e, 0x001e, 0x0005, 0x0016, 0x0076, 0x00d6, 0x00c6, 0x2001,
++      0x1857, 0x2004, 0x9084, 0x00ff, 0xb842, 0x080c, 0x95a1, 0x0548,
++      0x2b00, 0x6012, 0xb800, 0xc0c4, 0xb802, 0xb8a0, 0x9086, 0x007e,
++      0x0140, 0xb804, 0x9084, 0x00ff, 0x9086, 0x0006, 0x1110, 0x080c,
++      0x2d1a, 0x080c, 0xb4e6, 0x6023, 0x0001, 0x9006, 0x080c, 0x5b4d,
++      0x2001, 0x0002, 0x080c, 0x5b61, 0x0126, 0x2091, 0x8000, 0x70a0,
++      0x8000, 0x70a2, 0x012e, 0x2009, 0x0002, 0x080c, 0x95ce, 0x9085,
++      0x0001, 0x00ce, 0x00de, 0x007e, 0x001e, 0x0005, 0x00b6, 0x00c6,
++      0x0026, 0x2009, 0x0080, 0x080c, 0x5bb0, 0x1140, 0xb813, 0x00ff,
++      0xb817, 0xfffc, 0x0039, 0x0110, 0x70df, 0xffff, 0x002e, 0x00ce,
++      0x00be, 0x0005, 0x0016, 0x0076, 0x00d6, 0x00c6, 0x080c, 0x94fe,
++      0x01d0, 0x2b00, 0x6012, 0x080c, 0xb4e6, 0x6023, 0x0001, 0x9006,
++      0x080c, 0x5b4d, 0x2001, 0x0002, 0x080c, 0x5b61, 0x0126, 0x2091,
++      0x8000, 0x70e0, 0x8000, 0x70e2, 0x012e, 0x2009, 0x0002, 0x080c,
++      0x95ce, 0x9085, 0x0001, 0x00ce, 0x00de, 0x007e, 0x001e, 0x0005,
++      0x00c6, 0x00d6, 0x0126, 0x2091, 0x8000, 0x2009, 0x007f, 0x080c,
++      0x5bb0, 0x11b8, 0xb813, 0x00ff, 0xb817, 0xfffd, 0xb8bf, 0x0004,
++      0x080c, 0x94fe, 0x0170, 0x2b00, 0x6012, 0x6316, 0x6023, 0x0001,
++      0x620a, 0x080c, 0xb4e6, 0x2009, 0x0022, 0x080c, 0x95ce, 0x9085,
++      0x0001, 0x012e, 0x00de, 0x00ce, 0x0005, 0x00e6, 0x00c6, 0x0066,
++      0x0036, 0x0026, 0x00b6, 0x21f0, 0x080c, 0x7d60, 0x080c, 0x7cef,
++      0x080c, 0x93ac, 0x080c, 0xa3ab, 0x3e08, 0x2130, 0x81ff, 0x0120,
++      0x20a9, 0x007e, 0x900e, 0x0018, 0x20a9, 0x007f, 0x900e, 0x0016,
++      0x080c, 0x5c0d, 0x1140, 0x9686, 0x0002, 0x1118, 0xb800, 0xd0bc,
++      0x1110, 0x080c, 0x56f3, 0x001e, 0x8108, 0x1f04, 0x2cff, 0x86ff,
++      0x1110, 0x080c, 0x2e3e, 0x00be, 0x002e, 0x003e, 0x006e, 0x00ce,
++      0x00ee, 0x0005, 0x00e6, 0x00c6, 0x0036, 0x0026, 0x0016, 0x00b6,
++      0x6210, 0x2258, 0xbaa0, 0x0026, 0x2019, 0x0029, 0x080c, 0x7d55,
++      0x0076, 0x2039, 0x0000, 0x080c, 0x7c4d, 0x2c08, 0x080c, 0xc73e,
++      0x007e, 0x001e, 0xba10, 0xbb14, 0x080c, 0x56f3, 0xba12, 0xbb16,
++      0x00be, 0x001e, 0x002e, 0x003e, 0x00ce, 0x00ee, 0x0005, 0x00e6,
++      0x0006, 0x00b6, 0x6010, 0x2058, 0xb8a0, 0x00be, 0x9086, 0x0080,
++      0x0150, 0x2071, 0x1800, 0x70a0, 0x9005, 0x0110, 0x8001, 0x70a2,
++      0x000e, 0x00ee, 0x0005, 0x2071, 0x1800, 0x70e0, 0x9005, 0x0dc0,
++      0x8001, 0x70e2, 0x0ca8, 0xb800, 0xc08c, 0xb802, 0x0005, 0x00f6,
++      0x00e6, 0x00c6, 0x0036, 0x0026, 0x0016, 0x0156, 0x2178, 0x81ff,
++      0x1118, 0x20a9, 0x0001, 0x0088, 0x080c, 0x4dea, 0xd0c4, 0x0150,
++      0xd0a4, 0x0140, 0x9006, 0x0046, 0x2020, 0x2009, 0x002d, 0x080c,
++      0xc9c5, 0x004e, 0x20a9, 0x0800, 0x9016, 0x0026, 0x928e, 0x007e,
++      0x0904, 0x2dc7, 0x928e, 0x007f, 0x0904, 0x2dc7, 0x928e, 0x0080,
++      0x05f0, 0x9288, 0x1000, 0x210c, 0x81ff, 0x05c8, 0x8fff, 0x1148,
++      0x2001, 0x195b, 0x0006, 0x2003, 0x0001, 0x04e9, 0x000e, 0x2003,
++      0x0000, 0x00b6, 0x00c6, 0x2158, 0x2001, 0x0001, 0x080c, 0x5ef7,
++      0x00ce, 0x00be, 0x2019, 0x0029, 0x080c, 0x7d55, 0x0076, 0x2039,
++      0x0000, 0x080c, 0x7c4d, 0x00b6, 0x00c6, 0x0026, 0x2158, 0xba04,
++      0x9294, 0x00ff, 0x9286, 0x0006, 0x1118, 0xb807, 0x0404, 0x0028,
++      0x2001, 0x0004, 0x8007, 0x9215, 0xba06, 0x002e, 0x00ce, 0x00be,
++      0x0016, 0x2c08, 0x080c, 0xc73e, 0x001e, 0x007e, 0x2160, 0x002e,
++      0x8210, 0x1f04, 0x2d7d, 0x015e, 0x001e, 0x002e, 0x003e, 0x00ce,
++      0x00ee, 0x00fe, 0x0005, 0x0046, 0x0026, 0x0016, 0x080c, 0x4dea,
++      0xd0c4, 0x0140, 0xd0a4, 0x0130, 0x9006, 0x2220, 0x2009, 0x0029,
++      0x080c, 0xc9c5, 0x001e, 0x002e, 0x004e, 0x0005, 0x0016, 0x0026,
++      0x0036, 0x00c6, 0x728c, 0x82ff, 0x01e8, 0x080c, 0x5f25, 0x11d0,
++      0x2100, 0x080c, 0x2430, 0x81ff, 0x01b8, 0x2019, 0x0001, 0x8314,
++      0x92e0, 0x1c80, 0x2c04, 0xd384, 0x0120, 0x9084, 0xff00, 0x8007,
++      0x0010, 0x9084, 0x00ff, 0x9116, 0x0138, 0x9096, 0x00ff, 0x0110,
++      0x8318, 0x0c68, 0x9085, 0x0001, 0x00ce, 0x003e, 0x002e, 0x001e,
++      0x0005, 0x0016, 0x00c6, 0x0126, 0x2091, 0x8000, 0x0036, 0x2019,
++      0x0029, 0x00a9, 0x003e, 0x9180, 0x1000, 0x2004, 0x9065, 0x0158,
++      0x0016, 0x00c6, 0x2061, 0x1a72, 0x001e, 0x6112, 0x080c, 0x2d1a,
++      0x001e, 0x080c, 0x5bd1, 0x012e, 0x00ce, 0x001e, 0x0005, 0x0016,
++      0x0026, 0x2110, 0x080c, 0x905b, 0x080c, 0xcc7a, 0x002e, 0x001e,
++      0x0005, 0x2001, 0x1836, 0x2004, 0xd0cc, 0x0005, 0x00c6, 0x080c,
++      0x6877, 0x1118, 0x20a9, 0x0800, 0x0010, 0x20a9, 0x0782, 0x080c,
++      0x6877, 0x1110, 0x900e, 0x0010, 0x2009, 0x007e, 0x9180, 0x1000,
++      0x2004, 0x9065, 0x0110, 0x080c, 0x5bd1, 0x8108, 0x1f04, 0x2e4e,
++      0x2061, 0x1800, 0x6077, 0x0000, 0x6078, 0x9084, 0x00ff, 0x607a,
++      0x60ab, 0x0000, 0x00ce, 0x0005, 0x2001, 0x1874, 0x2004, 0xd0bc,
++      0x0005, 0x2011, 0x1853, 0x2214, 0xd2ec, 0x0005, 0x7eef, 0x7de8,
++      0x7ce4, 0x80e2, 0x7be1, 0x80e0, 0x80dc, 0x80da, 0x7ad9, 0x80d6,
++      0x80d5, 0x80d4, 0x80d3, 0x80d2, 0x80d1, 0x79ce, 0x78cd, 0x80cc,
++      0x80cb, 0x80ca, 0x80c9, 0x80c7, 0x80c6, 0x77c5, 0x76c3, 0x80bc,
++      0x80ba, 0x75b9, 0x80b6, 0x74b5, 0x73b4, 0x72b3, 0x80b2, 0x80b1,
++      0x80ae, 0x71ad, 0x80ac, 0x70ab, 0x6faa, 0x6ea9, 0x80a7, 0x6da6,
++      0x6ca5, 0x6ba3, 0x6a9f, 0x699e, 0x689d, 0x809b, 0x8098, 0x6797,
++      0x6690, 0x658f, 0x6488, 0x6384, 0x6282, 0x8081, 0x8080, 0x617c,
++      0x607a, 0x8079, 0x5f76, 0x8075, 0x8074, 0x8073, 0x8072, 0x8071,
++      0x806e, 0x5e6d, 0x806c, 0x5d6b, 0x5c6a, 0x5b69, 0x8067, 0x5a66,
++      0x5965, 0x5863, 0x575c, 0x565a, 0x5559, 0x8056, 0x8055, 0x5454,
++      0x5353, 0x5252, 0x5151, 0x504e, 0x4f4d, 0x804c, 0x804b, 0x4e4a,
++      0x4d49, 0x8047, 0x4c46, 0x8045, 0x8043, 0x803c, 0x803a, 0x8039,
++      0x8036, 0x4b35, 0x8034, 0x4a33, 0x4932, 0x4831, 0x802e, 0x472d,
++      0x462c, 0x452b, 0x442a, 0x4329, 0x4227, 0x8026, 0x8025, 0x4123,
++      0x401f, 0x3f1e, 0x3e1d, 0x3d1b, 0x3c18, 0x8017, 0x8010, 0x3b0f,
++      0x3a08, 0x8004, 0x3902, 0x8001, 0x8000, 0x8000, 0x3800, 0x3700,
++      0x3600, 0x8000, 0x3500, 0x8000, 0x8000, 0x8000, 0x3400, 0x8000,
++      0x8000, 0x8000, 0x8000, 0x8000, 0x8000, 0x3300, 0x3200, 0x8000,
++      0x8000, 0x8000, 0x8000, 0x8000, 0x8000, 0x3100, 0x3000, 0x8000,
++      0x8000, 0x2f00, 0x8000, 0x2e00, 0x2d00, 0x2c00, 0x8000, 0x8000,
++      0x8000, 0x2b00, 0x8000, 0x2a00, 0x2900, 0x2800, 0x8000, 0x2700,
++      0x2600, 0x2500, 0x2400, 0x2300, 0x2200, 0x8000, 0x8000, 0x2100,
++      0x2000, 0x1f00, 0x1e00, 0x1d00, 0x1c00, 0x8000, 0x8000, 0x1b00,
++      0x1a00, 0x8000, 0x1900, 0x8000, 0x8000, 0x8000, 0x8000, 0x8000,
++      0x8000, 0x1800, 0x8000, 0x1700, 0x1600, 0x1500, 0x8000, 0x1400,
++      0x1300, 0x1200, 0x1100, 0x1000, 0x0f00, 0x8000, 0x8000, 0x0e00,
++      0x0d00, 0x0c00, 0x0b00, 0x0a00, 0x0900, 0x8000, 0x8000, 0x0800,
++      0x0700, 0x8000, 0x0600, 0x8000, 0x8000, 0x8000, 0x0500, 0x0400,
++      0x0300, 0x8000, 0x0200, 0x8000, 0x8000, 0x8000, 0x0100, 0x8000,
++      0x8000, 0x8000, 0x8000, 0x8000, 0x8000, 0x0000, 0x8000, 0x8000,
++      0x8000, 0x8000, 0x8000, 0x8000, 0x8000, 0x8000, 0x8000, 0x8000,
++      0x8000, 0x8000, 0x8000, 0x8000, 0x8000, 0x8000, 0x2071, 0x1893,
++      0x7003, 0x0002, 0x9006, 0x7012, 0x7016, 0x7046, 0x704a, 0x7037,
++      0x18ae, 0x703b, 0x18ae, 0x7007, 0x0001, 0x080c, 0x0fc7, 0x090c,
++      0x0d84, 0x2900, 0x7066, 0xa867, 0x0002, 0xa8ab, 0xdcb0, 0x080c,
++      0x0fc7, 0x090c, 0x0d84, 0x2900, 0x706a, 0xa867, 0x0002, 0xa8ab,
++      0xdcb0, 0x0005, 0x2071, 0x1893, 0x7004, 0x0002, 0x2f9a, 0x2f9b,
++      0x2fa3, 0x2fb7, 0x0005, 0x1004, 0x2fa2, 0x0e04, 0x2fa2, 0x2079,
++      0x0000, 0x0458, 0x0005, 0x2079, 0x0000, 0x2061, 0x18ac, 0x2c4c,
++      0xa86c, 0x908e, 0x0100, 0x0128, 0x9086, 0x0200, 0x0904, 0x3089,
++      0x0005, 0x7014, 0x2048, 0x2061, 0x1800, 0x7018, 0x0807, 0x7010,
++      0x2048, 0xa864, 0x9094, 0x00ff, 0x9296, 0x0029, 0x1120, 0xaa78,
++      0xd2fc, 0x0128, 0x0005, 0x9086, 0x0103, 0x0108, 0x0005, 0x2079,
++      0x0000, 0x2061, 0x1800, 0x7018, 0x0807, 0x2061, 0x1800, 0x7880,
++      0x908a, 0x0040, 0x1210, 0x61cc, 0x0042, 0x2100, 0x908a, 0x003f,
++      0x1a04, 0x3086, 0x61cc, 0x0804, 0x301d, 0x305f, 0x3095, 0x309f,
++      0x30a3, 0x30ad, 0x30b3, 0x30b7, 0x30c7, 0x30ca, 0x30d4, 0x30d9,
++      0x30de, 0x30e9, 0x30f4, 0x3103, 0x3112, 0x3120, 0x3137, 0x3152,
++      0x31f2, 0x31f7, 0x3235, 0x32dd, 0x32ee, 0x3311, 0x3086, 0x3086,
++      0x3086, 0x3349, 0x3367, 0x3370, 0x339f, 0x33a5, 0x3086, 0x33dd,
++      0x3086, 0x3086, 0x3086, 0x3086, 0x3086, 0x33e8, 0x33f1, 0x33f9,
++      0x3086, 0x3086, 0x3086, 0x3086, 0x3086, 0x3086, 0x3086, 0x33fb,
++      0x3086, 0x3086, 0x3086, 0x3086, 0x3086, 0x3418, 0x3475, 0x3086,
++      0x3086, 0x3086, 0x3086, 0x3086, 0x3086, 0x0002, 0x349f, 0x34a2,
++      0x3502, 0x351b, 0x354b, 0x37ed, 0x3086, 0x49c6, 0x3086, 0x3086,
++      0x3086, 0x3086, 0x3086, 0x3086, 0x3086, 0x3086, 0x30d4, 0x30d9,
++      0x3cbf, 0x3086, 0x3cd6, 0x4a55, 0x4aa5, 0x4ba8, 0x3086, 0x4c0a,
++      0x4c46, 0x4c77, 0x4d79, 0x4ca4, 0x4cfb, 0x3086, 0x3cda, 0x3ea6,
++      0x3ebc, 0x3ed8, 0x3f3d, 0x3fb1, 0x3fd1, 0x403b, 0x404c, 0x405d,
++      0x4060, 0x4085, 0x40f9, 0x415b, 0x4163, 0x428b, 0x43b4, 0x43dd,
++      0x4504, 0x4522, 0x452e, 0x45d0, 0x46a0, 0x3086, 0x3086, 0x3086,
++      0x3086, 0x4706, 0x4721, 0x48ac, 0x4982, 0x7148, 0x0000, 0x2021,
++      0x4000, 0x080c, 0x445b, 0x0126, 0x2091, 0x8000, 0x0e04, 0x3069,
++      0x0010, 0x012e, 0x0cc0, 0x7c36, 0x9486, 0x4000, 0x0118, 0x7833,
++      0x0011, 0x0010, 0x7833, 0x0010, 0x7c82, 0x7986, 0x7a8a, 0x7b8e,
++      0x2091, 0x4080, 0x2001, 0x0089, 0x2004, 0xd084, 0x190c, 0x113e,
++      0x7007, 0x0001, 0x2091, 0x5000, 0x012e, 0x0005, 0x2021, 0x4001,
++      0x08c0, 0x2021, 0x4002, 0x08a8, 0x2021, 0x4003, 0x0890, 0x2021,
++      0x4005, 0x0878, 0x2021, 0x4006, 0x0860, 0x2039, 0x0001, 0x902e,
++      0x2520, 0x7b88, 0x7a8c, 0x7884, 0x7990, 0x0804, 0x4468, 0x7883,
++      0x0004, 0x7884, 0x0807, 0x2039, 0x0001, 0x902e, 0x2520, 0x7b88,
++      0x7a8c, 0x7884, 0x7990, 0x0804, 0x446b, 0x7984, 0x7888, 0x2114,
++      0x200a, 0x0804, 0x305f, 0x7984, 0x2114, 0x0804, 0x305f, 0x20e1,
++      0x0000, 0x2099, 0x0021, 0x20e9, 0x0000, 0x20a1, 0x0021, 0x20a9,
++      0x001f, 0x4003, 0x7984, 0x7a88, 0x7b8c, 0x0804, 0x305f, 0x7884,
++      0x2060, 0x04d8, 0x2009, 0x0003, 0x2011, 0x0002, 0x2019, 0x000a,
++      0x789b, 0x0117, 0x0804, 0x305f, 0x2039, 0x0001, 0x7d98, 0x7c9c,
++      0x0800, 0x2039, 0x0001, 0x7d98, 0x7c9c, 0x0848, 0x79a0, 0x9182,
++      0x0040, 0x0210, 0x0804, 0x3092, 0x2138, 0x7d98, 0x7c9c, 0x0804,
++      0x3099, 0x79a0, 0x9182, 0x0040, 0x0210, 0x0804, 0x3092, 0x2138,
++      0x7d98, 0x7c9c, 0x0804, 0x30a7, 0x79a0, 0x9182, 0x0040, 0x0210,
++      0x0804, 0x3092, 0x21e8, 0x7984, 0x7888, 0x20a9, 0x0001, 0x21a0,
++      0x4004, 0x0804, 0x305f, 0x2061, 0x0800, 0xe10c, 0x9006, 0x2c15,
++      0x9200, 0x8c60, 0x8109, 0x1dd8, 0x2010, 0x9005, 0x0904, 0x305f,
++      0x0804, 0x308c, 0x79a0, 0x9182, 0x0040, 0x0210, 0x0804, 0x3092,
++      0x21e0, 0x20a9, 0x0001, 0x7984, 0x2198, 0x4012, 0x0804, 0x305f,
++      0x2069, 0x1852, 0x7884, 0x7990, 0x911a, 0x1a04, 0x3092, 0x8019,
++      0x0904, 0x3092, 0x684a, 0x6942, 0x788c, 0x6852, 0x7888, 0x6856,
++      0x9006, 0x685a, 0x685e, 0x080c, 0x6b71, 0x0804, 0x305f, 0x2069,
++      0x1852, 0x7884, 0x7994, 0x911a, 0x1a04, 0x3092, 0x8019, 0x0904,
++      0x3092, 0x684e, 0x6946, 0x788c, 0x6862, 0x7888, 0x6866, 0x9006,
++      0x686a, 0x686e, 0x0126, 0x2091, 0x8000, 0x080c, 0x5f97, 0x012e,
++      0x0804, 0x305f, 0x902e, 0x2520, 0x81ff, 0x1904, 0x308f, 0x7984,
++      0x7b88, 0x7a8c, 0x20a9, 0x0005, 0x20e9, 0x0001, 0x20a1, 0x189a,
++      0x4101, 0x080c, 0x441f, 0x0904, 0x308f, 0x2009, 0x0020, 0xa85c,
++      0x9080, 0x0019, 0xaf60, 0x080c, 0x4468, 0x701b, 0x3170, 0x0005,
++      0xa864, 0x2008, 0x9084, 0x00ff, 0x9096, 0x0011, 0x0168, 0x9096,
++      0x0019, 0x0150, 0x9096, 0x0015, 0x0138, 0x9096, 0x0048, 0x0120,
++      0x9096, 0x0029, 0x1904, 0x308f, 0x810f, 0x918c, 0x00ff, 0x0904,
++      0x308f, 0x710e, 0x700c, 0x8001, 0x0548, 0x700e, 0x080c, 0x441f,
++      0x0904, 0x308f, 0x2009, 0x0020, 0x7064, 0x2040, 0xa28c, 0xa390,
++      0xa494, 0xa598, 0x9290, 0x0040, 0x9399, 0x0000, 0x94a1, 0x0000,
++      0x95a9, 0x0000, 0xa85c, 0x9080, 0x0019, 0xaf60, 0x080c, 0x4468,
++      0x701b, 0x31ab, 0x0005, 0xa864, 0x9084, 0x00ff, 0x9096, 0x0002,
++      0x0120, 0x9096, 0x000a, 0x1904, 0x308f, 0x08a0, 0x7010, 0x2048,
++      0xa868, 0xc0fd, 0xa86a, 0xa864, 0x9084, 0x00ff, 0x9096, 0x0029,
++      0x1160, 0xc2fd, 0xaa7a, 0x080c, 0x57e4, 0x0150, 0x0126, 0x2091,
++      0x8000, 0xa87a, 0xa982, 0x012e, 0x0050, 0x080c, 0x5ac6, 0x1128,
++      0x7007, 0x0003, 0x701b, 0x31d7, 0x0005, 0x080c, 0x63d1, 0x0126,
++      0x2091, 0x8000, 0x20a9, 0x0005, 0x20e1, 0x0001, 0x2099, 0x189a,
++      0x400a, 0x2100, 0x9210, 0x9399, 0x0000, 0x94a1, 0x0000, 0x95a9,
++      0x0000, 0xa85c, 0x9080, 0x0019, 0x2009, 0x0020, 0x012e, 0xaf60,
++      0x0804, 0x446b, 0x61b4, 0x7884, 0x60b6, 0x0804, 0x305f, 0x2091,
++      0x8000, 0x7837, 0x4000, 0x7833, 0x0010, 0x7883, 0x4000, 0x7887,
++      0x4953, 0x788b, 0x5020, 0x788f, 0x2020, 0x2009, 0x017f, 0x2104,
++      0x7892, 0x3f00, 0x7896, 0x2061, 0x0100, 0x6200, 0x2061, 0x0200,
++      0x603c, 0x8007, 0x9205, 0x789a, 0x2009, 0x04fd, 0x2104, 0x789e,
++      0x2091, 0x5000, 0x2091, 0x4080, 0x2001, 0x0089, 0x2004, 0xd084,
++      0x0180, 0x2001, 0x19e7, 0x2004, 0x9005, 0x0128, 0x2001, 0x008b,
++      0x2004, 0xd0fc, 0x0dd8, 0x2001, 0x008a, 0x2003, 0x0002, 0x2003,
++      0x1001, 0x2071, 0x0080, 0x0804, 0x0427, 0x81ff, 0x1904, 0x308f,
++      0x7984, 0x080c, 0x5c0d, 0x1904, 0x3092, 0x7e98, 0x9684, 0x3fff,
++      0x9082, 0x4000, 0x0210, 0x0804, 0x3092, 0x7c88, 0x7d8c, 0x080c,
++      0x5d70, 0x080c, 0x5d3f, 0x0000, 0x1518, 0x2061, 0x1cd0, 0x0126,
++      0x2091, 0x8000, 0x6000, 0x9086, 0x0000, 0x0148, 0x6014, 0x904d,
++      0x0130, 0xa86c, 0x9406, 0x1118, 0xa870, 0x9506, 0x0150, 0x012e,
++      0x9ce0, 0x0018, 0x2001, 0x1818, 0x2004, 0x9c02, 0x1a04, 0x308f,
++      0x0c30, 0x080c, 0xad1e, 0x012e, 0x0904, 0x308f, 0x0804, 0x305f,
++      0x900e, 0x2001, 0x0005, 0x080c, 0x63d1, 0x0126, 0x2091, 0x8000,
++      0x080c, 0xb37a, 0x080c, 0x61a9, 0x012e, 0x0804, 0x305f, 0x00a6,
++      0x2950, 0xb198, 0x080c, 0x5c0d, 0x1904, 0x32ca, 0xb6a4, 0x9684,
++      0x3fff, 0x9082, 0x4000, 0x0208, 0x04e8, 0xb49c, 0xb5a0, 0x080c,
++      0x5d70, 0x080c, 0x5d3f, 0x1520, 0x2061, 0x1cd0, 0x0126, 0x2091,
++      0x8000, 0x6000, 0x9086, 0x0000, 0x0148, 0x6014, 0x904d, 0x0130,
++      0xa86c, 0x9406, 0x1118, 0xa870, 0x9506, 0x0158, 0x012e, 0x9ce0,
++      0x0018, 0x2001, 0x1818, 0x2004, 0x9c02, 0x2009, 0x000d, 0x12b0,
++      0x0c28, 0x080c, 0xad1e, 0x012e, 0x2009, 0x0003, 0x0178, 0x00e0,
++      0x900e, 0x2001, 0x0005, 0x080c, 0x63d1, 0x0126, 0x2091, 0x8000,
++      0x080c, 0xb37a, 0x080c, 0x61a9, 0x012e, 0x0070, 0xb097, 0x4005,
++      0xb19a, 0x0010, 0xb097, 0x4006, 0x900e, 0x9085, 0x0001, 0x2001,
++      0x0030, 0x2a48, 0x00ae, 0x0005, 0xb097, 0x4000, 0x9006, 0x918d,
++      0x0001, 0x2008, 0x2a48, 0x00ae, 0x0005, 0x81ff, 0x1904, 0x308f,
++      0x080c, 0x4436, 0x0904, 0x3092, 0x080c, 0x5cd4, 0x0904, 0x308f,
++      0x080c, 0x5d76, 0x0904, 0x308f, 0x0804, 0x3fc8, 0x81ff, 0x1904,
++      0x308f, 0x080c, 0x4452, 0x0904, 0x3092, 0x080c, 0x5e04, 0x0904,
++      0x308f, 0x2019, 0x0005, 0x79a8, 0x080c, 0x5d91, 0x0904, 0x308f,
++      0x7888, 0x908a, 0x1000, 0x1a04, 0x3092, 0x8003, 0x800b, 0x810b,
++      0x9108, 0x080c, 0x7826, 0x7984, 0xd184, 0x1904, 0x305f, 0x0804,
++      0x3fc8, 0x0126, 0x2091, 0x8000, 0x81ff, 0x0118, 0x2009, 0x0001,
++      0x0450, 0x2029, 0x07ff, 0x6454, 0x2400, 0x9506, 0x01f8, 0x2508,
++      0x080c, 0x5c0d, 0x11d8, 0x080c, 0x5e04, 0x1128, 0x2009, 0x0002,
++      0x62bc, 0x2518, 0x00c0, 0x2019, 0x0004, 0x900e, 0x080c, 0x5d91,
++      0x1118, 0x2009, 0x0006, 0x0078, 0x7884, 0x908a, 0x1000, 0x1270,
++      0x8003, 0x800b, 0x810b, 0x9108, 0x080c, 0x7826, 0x8529, 0x1ae0,
++      0x012e, 0x0804, 0x305f, 0x012e, 0x0804, 0x308f, 0x012e, 0x0804,
++      0x3092, 0x080c, 0x4436, 0x0904, 0x3092, 0x080c, 0x5cd4, 0x0904,
++      0x308f, 0xbaa0, 0x2019, 0x0005, 0x00c6, 0x2061, 0x0000, 0x080c,
++      0x7d55, 0x0076, 0x2039, 0x0000, 0x080c, 0x7c4d, 0x900e, 0x080c,
++      0xc73e, 0x007e, 0x00ce, 0x080c, 0x5d70, 0x0804, 0x305f, 0x080c,
++      0x4436, 0x0904, 0x3092, 0x080c, 0x5d70, 0x2208, 0x0804, 0x305f,
++      0x0156, 0x00d6, 0x00e6, 0x2069, 0x1904, 0x6810, 0x6914, 0x910a,
++      0x1208, 0x900e, 0x6816, 0x9016, 0x901e, 0x20a9, 0x007e, 0x2069,
++      0x1000, 0x2d04, 0x905d, 0x0118, 0xb84c, 0x0059, 0x9210, 0x8d68,
++      0x1f04, 0x3381, 0x2300, 0x9218, 0x00ee, 0x00de, 0x015e, 0x0804,
++      0x305f, 0x00f6, 0x0016, 0x907d, 0x0138, 0x9006, 0x8000, 0x2f0c,
++      0x81ff, 0x0110, 0x2178, 0x0cd0, 0x001e, 0x00fe, 0x0005, 0x2069,
++      0x1904, 0x6910, 0x62b8, 0x0804, 0x305f, 0x81ff, 0x1904, 0x308f,
++      0x6154, 0x9190, 0x2e6e, 0x2215, 0x9294, 0x00ff, 0x6374, 0x83ff,
++      0x0108, 0x6278, 0x67d8, 0x97c4, 0x000a, 0x98c6, 0x000a, 0x1118,
++      0x2031, 0x0001, 0x00f0, 0x97c4, 0x0022, 0x98c6, 0x0022, 0x1118,
++      0x2031, 0x0003, 0x00b0, 0x97c4, 0x0012, 0x98c6, 0x0012, 0x1118,
++      0x2031, 0x0002, 0x0070, 0x080c, 0x6877, 0x1118, 0x2031, 0x0004,
++      0x0040, 0xd79c, 0x0120, 0x2009, 0x0005, 0x0804, 0x308f, 0x2031,
++      0x0000, 0x7e9a, 0x7f9e, 0x0804, 0x305f, 0x6144, 0x6248, 0x2019,
++      0x1953, 0x231c, 0x2001, 0x1954, 0x2004, 0x789a, 0x0804, 0x305f,
++      0x0126, 0x2091, 0x8000, 0x6134, 0x6238, 0x633c, 0x012e, 0x0804,
++      0x305f, 0x080c, 0x4452, 0x0904, 0x3092, 0xba44, 0xbb38, 0x0804,
++      0x305f, 0x080c, 0x0d84, 0x6144, 0x6248, 0x7884, 0x6046, 0x7b88,
++      0x634a, 0x2069, 0x1852, 0x831f, 0x9305, 0x6816, 0x788c, 0x2069,
++      0x1953, 0x2d1c, 0x206a, 0x7e98, 0x9682, 0x0014, 0x1210, 0x2031,
++      0x07d0, 0x2069, 0x1954, 0x2d04, 0x266a, 0x789a, 0x0804, 0x305f,
++      0x0126, 0x2091, 0x8000, 0x6134, 0x7884, 0x6036, 0x910e, 0xd1b4,
++      0x190c, 0x0e56, 0xd0c4, 0x01a8, 0x00d6, 0x78a8, 0x2009, 0x196a,
++      0x200a, 0x78ac, 0x2011, 0x196b, 0x2012, 0x2069, 0x0100, 0x6838,
++      0x9086, 0x0007, 0x1118, 0x2214, 0x6a5a, 0x0010, 0x210c, 0x695a,
++      0x00de, 0x7884, 0x7888, 0x603a, 0x2011, 0x0114, 0x220c, 0x7888,
++      0xd08c, 0x0118, 0x918d, 0x0080, 0x0010, 0x918c, 0xff7f, 0x2112,
++      0x613c, 0x788c, 0x603e, 0x910e, 0xd1e4, 0x190c, 0x0e73, 0x603c,
++      0xd0cc, 0x0120, 0x78b0, 0x2011, 0x0114, 0x2012, 0x012e, 0x0804,
++      0x305f, 0x00f6, 0x2079, 0x1800, 0x7a34, 0xa898, 0x9084, 0xfebf,
++      0x9215, 0xa89c, 0x9084, 0xfebf, 0x8002, 0x9214, 0x79ec, 0x7834,
++      0x9084, 0x0140, 0x9215, 0x7a36, 0xa897, 0x4000, 0x900e, 0x9085,
++      0x0001, 0x2001, 0x0000, 0x00fe, 0x0005, 0x7898, 0x9005, 0x01a8,
++      0x7888, 0x9025, 0x0904, 0x3092, 0x788c, 0x902d, 0x0904, 0x3092,
++      0x900e, 0x080c, 0x5c0d, 0x1120, 0xba44, 0xbb38, 0xbc46, 0xbd3a,
++      0x9186, 0x07ff, 0x0190, 0x8108, 0x0ca0, 0x080c, 0x4452, 0x0904,
++      0x3092, 0x7888, 0x900d, 0x0904, 0x3092, 0x788c, 0x9005, 0x0904,
++      0x3092, 0xba44, 0xb946, 0xbb38, 0xb83a, 0x0804, 0x305f, 0x2011,
++      0xbc09, 0x0010, 0x2011, 0xbc05, 0x080c, 0x4dfe, 0x1904, 0x308f,
++      0x00c6, 0x2061, 0x0100, 0x7984, 0x9186, 0x00ff, 0x1130, 0x2001,
++      0x1816, 0x2004, 0x9085, 0xff00, 0x0088, 0x9182, 0x007f, 0x16e8,
++      0x9188, 0x2e6e, 0x210d, 0x918c, 0x00ff, 0x2001, 0x1816, 0x2004,
++      0x0026, 0x9116, 0x002e, 0x0588, 0x810f, 0x9105, 0x0126, 0x2091,
++      0x8000, 0x0006, 0x080c, 0x94fe, 0x000e, 0x0518, 0x6016, 0x600b,
++      0xbc05, 0x7984, 0x00b6, 0x080c, 0x5bb0, 0x2b08, 0x00be, 0x1500,
++      0x6112, 0x6023, 0x0001, 0x080c, 0x441f, 0x01d0, 0x9006, 0xa866,
++      0x7007, 0x0003, 0xa832, 0xa868, 0xc0fd, 0xa86a, 0x701b, 0x34fb,
++      0x2900, 0x6016, 0x2009, 0x0032, 0x080c, 0x95ce, 0x012e, 0x00ce,
++      0x0005, 0x012e, 0x00ce, 0x0804, 0x308f, 0x00ce, 0x0804, 0x3092,
++      0x080c, 0x9554, 0x0cb0, 0xa830, 0x9086, 0x0100, 0x0904, 0x308f,
++      0x0804, 0x305f, 0x2061, 0x1a3d, 0x0126, 0x2091, 0x8000, 0x6000,
++      0xd084, 0x0170, 0x6104, 0x6208, 0x2061, 0x1800, 0x634c, 0x606c,
++      0x789a, 0x60bc, 0x789e, 0x60b8, 0x78aa, 0x012e, 0x0804, 0x305f,
++      0x900e, 0x2110, 0x0c88, 0x81ff, 0x1904, 0x308f, 0x080c, 0x6877,
++      0x0904, 0x308f, 0x0126, 0x2091, 0x8000, 0x624c, 0x606c, 0x9202,
++      0x0248, 0x9085, 0x0001, 0x080c, 0x2466, 0x080c, 0x4fc7, 0x012e,
++      0x0804, 0x305f, 0x012e, 0x0804, 0x3092, 0x0006, 0x0016, 0x00c6,
++      0x00e6, 0x2001, 0x1976, 0x2070, 0x2061, 0x1852, 0x6008, 0x2072,
++      0x900e, 0x2011, 0x1400, 0x080c, 0x7a4b, 0x7206, 0x00ee, 0x00ce,
++      0x001e, 0x000e, 0x0005, 0x0126, 0x2091, 0x8000, 0x81ff, 0x0128,
++      0x012e, 0x2021, 0x400b, 0x0804, 0x3061, 0x7884, 0xd0fc, 0x0148,
++      0x2001, 0x002a, 0x2004, 0x9082, 0x00e1, 0x02a8, 0x012e, 0x0804,
++      0x3092, 0x2001, 0x002a, 0x2004, 0x2069, 0x1852, 0x6908, 0x9102,
++      0x1218, 0x012e, 0x0804, 0x3092, 0x614c, 0x606c, 0x9106, 0x0118,
++      0x012e, 0x0804, 0x308f, 0x080c, 0x94d3, 0x0dd0, 0x7884, 0xd0fc,
++      0x0904, 0x35ca, 0x00c6, 0x080c, 0x441f, 0x00ce, 0x0d88, 0xa867,
++      0x0000, 0x7884, 0xa80a, 0x7898, 0xa80e, 0x789c, 0xa812, 0x2001,
++      0x002e, 0x2004, 0xa81a, 0x2001, 0x002f, 0x2004, 0xa81e, 0x2001,
++      0x0030, 0x2004, 0xa822, 0x2001, 0x0031, 0x2004, 0xa826, 0x2001,
++      0x0034, 0x2004, 0xa82a, 0x2001, 0x0035, 0x2004, 0xa82e, 0x2001,
++      0x002a, 0x2004, 0x9080, 0x0003, 0x9084, 0x00fc, 0x8004, 0xa816,
++      0x080c, 0x3750, 0x0928, 0x7010, 0x2048, 0xad2c, 0xac28, 0xab1c,
++      0xaa18, 0xa930, 0xa808, 0xd0b4, 0x1120, 0x2029, 0x0000, 0x2021,
++      0x0000, 0x8906, 0x8006, 0x8007, 0x90bc, 0x003f, 0x9084, 0xffc0,
++      0x9080, 0x001b, 0x080c, 0x4468, 0x701b, 0x368d, 0x701f, 0x0001,
++      0x012e, 0x0005, 0x0046, 0x0086, 0x0096, 0x00a6, 0x00b6, 0x00c6,
++      0x00d6, 0x00e6, 0x00f6, 0x080c, 0x3535, 0x2001, 0x196c, 0x2003,
++      0x0000, 0x2021, 0x000a, 0x2061, 0x0100, 0x6104, 0x0016, 0x60bb,
++      0x0000, 0x60bf, 0x32e1, 0x60bf, 0x0012, 0x080c, 0x37bf, 0x080c,
++      0x377e, 0x00f6, 0x00e6, 0x0086, 0x2940, 0x2071, 0x1a33, 0x2079,
++      0x0090, 0x00d6, 0x2069, 0x0000, 0x6884, 0xd0b4, 0x0140, 0x2001,
++      0x0035, 0x2004, 0x780e, 0x2001, 0x0034, 0x2004, 0x780a, 0x00de,
++      0x2011, 0x0001, 0x080c, 0x3b2b, 0x008e, 0x00ee, 0x00fe, 0x080c,
++      0x3a61, 0x080c, 0x396a, 0x05b8, 0x2001, 0x020b, 0x2004, 0x9084,
++      0x0140, 0x1db8, 0x080c, 0x3b7f, 0x00f6, 0x2079, 0x0300, 0x78bc,
++      0x00fe, 0x908c, 0x0070, 0x1560, 0x2071, 0x0200, 0x7037, 0x0000,
++      0x7050, 0x9084, 0xff00, 0x9086, 0x3200, 0x1510, 0x7037, 0x0001,
++      0x7050, 0x9084, 0xff00, 0x9086, 0xe100, 0x11d0, 0x7037, 0x0000,
++      0x7054, 0x7037, 0x0000, 0x715c, 0x9106, 0x1190, 0x2001, 0x181e,
++      0x2004, 0x9106, 0x1168, 0x00c6, 0x2061, 0x0100, 0x6024, 0x9084,
++      0x1e00, 0x00ce, 0x0138, 0x080c, 0x3974, 0x080c, 0x3779, 0x0058,
++      0x080c, 0x3779, 0x080c, 0x3ac3, 0x080c, 0x3a57, 0x2001, 0x020b,
++      0x2004, 0xd0e4, 0x0dd8, 0x2001, 0x032a, 0x2003, 0x0004, 0x2061,
++      0x0100, 0x6027, 0x0002, 0x001e, 0x6106, 0x2011, 0x020d, 0x2013,
++      0x0020, 0x60bb, 0x0000, 0x60bf, 0x0108, 0x60bf, 0x0012, 0x2001,
++      0x0004, 0x200c, 0x918c, 0xfffd, 0x2102, 0x080c, 0x1245, 0x2009,
++      0x0028, 0x080c, 0x2014, 0x2001, 0x0227, 0x200c, 0x2102, 0x00fe,
++      0x00ee, 0x00de, 0x00ce, 0x00be, 0x00ae, 0x009e, 0x008e, 0x004e,
++      0x2001, 0x196c, 0x2004, 0x9005, 0x1118, 0x012e, 0x0804, 0x305f,
++      0x012e, 0x2021, 0x400c, 0x0804, 0x3061, 0x0016, 0x0026, 0x0036,
++      0x0046, 0x0056, 0x0076, 0x0086, 0x0096, 0x00d6, 0x0156, 0x7010,
++      0x2048, 0x701c, 0x20a8, 0x8000, 0x701e, 0xa804, 0x9005, 0x0904,
++      0x36e9, 0x2048, 0x1f04, 0x369d, 0x7064, 0x2040, 0xa28c, 0xa390,
++      0xa494, 0xa598, 0xa930, 0xa808, 0xd0b4, 0x1120, 0x2029, 0x0000,
++      0x2021, 0x0000, 0x0096, 0x7010, 0x2048, 0xa864, 0x009e, 0x9086,
++      0x0103, 0x0170, 0x8906, 0x8006, 0x8007, 0x90bc, 0x003f, 0x9084,
++      0xffc0, 0x9080, 0x001b, 0x080c, 0x4468, 0x701b, 0x368d, 0x00b0,
++      0x8906, 0x8006, 0x8007, 0x90bc, 0x003f, 0x9084, 0xffc0, 0x9080,
++      0x001b, 0x21a8, 0x27e0, 0x2098, 0x27e8, 0x20a0, 0x0006, 0x080c,
++      0x0f2b, 0x000e, 0x080c, 0x446b, 0x701b, 0x368d, 0x015e, 0x00de,
++      0x009e, 0x008e, 0x007e, 0x005e, 0x004e, 0x003e, 0x002e, 0x001e,
++      0x0005, 0x7010, 0x2048, 0xa864, 0x9086, 0x0103, 0x1118, 0x701b,
++      0x374e, 0x0450, 0x7010, 0x2048, 0xa868, 0xc0fd, 0xa86a, 0x2009,
++      0x007f, 0x080c, 0x5bb0, 0x0110, 0x9006, 0x0030, 0xb813, 0x00ff,
++      0xb817, 0xfffd, 0x080c, 0xb535, 0x015e, 0x00de, 0x009e, 0x008e,
++      0x007e, 0x005e, 0x004e, 0x003e, 0x002e, 0x001e, 0x0904, 0x308f,
++      0x0016, 0x0026, 0x0036, 0x0046, 0x0056, 0x0076, 0x0086, 0x0096,
++      0x00d6, 0x0156, 0x701b, 0x3720, 0x7007, 0x0003, 0x0804, 0x36de,
++      0x0076, 0xa830, 0x9086, 0x0100, 0x2021, 0x400c, 0x0904, 0x3061,
++      0xad10, 0xac0c, 0xab24, 0xaa20, 0xa930, 0xa808, 0xd0b4, 0x1120,
++      0x2029, 0x0000, 0x2021, 0x0000, 0x8906, 0x8006, 0x8007, 0x90bc,
++      0x003f, 0x9084, 0xffc0, 0x9080, 0x001b, 0x21a8, 0x27e0, 0x2098,
++      0x27e8, 0x20a0, 0x0006, 0x080c, 0x0f2b, 0x000e, 0x080c, 0x446b,
++      0x007e, 0x701b, 0x368d, 0x701f, 0x0001, 0x0005, 0x0804, 0x305f,
++      0x0156, 0x00c6, 0xa814, 0x908a, 0x001e, 0x0218, 0xa833, 0x001e,
++      0x0010, 0xa832, 0x0078, 0x81ff, 0x0168, 0x0016, 0x080c, 0x441f,
++      0x001e, 0x0130, 0xa800, 0x2040, 0xa008, 0xa80a, 0x2100, 0x0c58,
++      0x9006, 0x0010, 0x9085, 0x0001, 0x00ce, 0x015e, 0x0005, 0x0006,
++      0x00f6, 0x2079, 0x0000, 0x7880, 0x9086, 0x0044, 0x00fe, 0x000e,
++      0x0005, 0x2001, 0x196c, 0x2003, 0x0001, 0x0005, 0x00f6, 0x00e6,
++      0x00c6, 0x2061, 0x0200, 0x2001, 0x1977, 0x2004, 0x601a, 0x2061,
++      0x0100, 0x2001, 0x1976, 0x2004, 0x60ce, 0x6104, 0xc1ac, 0x6106,
++      0x080c, 0x441f, 0xa813, 0x0019, 0xa817, 0x0001, 0x2900, 0xa85a,
++      0x2001, 0x002e, 0x2004, 0xa866, 0x2001, 0x002f, 0x2004, 0xa86a,
++      0x2061, 0x0090, 0x2079, 0x0100, 0x2001, 0x1976, 0x2004, 0x6036,
++      0x2009, 0x0040, 0x080c, 0x2014, 0x2001, 0x002a, 0x2004, 0x9084,
++      0xfff8, 0xa86e, 0x601a, 0xa873, 0x0000, 0x601f, 0x0000, 0x78ca,
++      0x9006, 0x600a, 0x600e, 0x00ce, 0x00ee, 0x00fe, 0x0005, 0x00e6,
++      0x080c, 0x441f, 0x2940, 0xa013, 0x0019, 0xa017, 0x0001, 0x2800,
++      0xa05a, 0x2001, 0x0030, 0x2004, 0xa866, 0x2001, 0x0031, 0x2004,
++      0xa86a, 0x2001, 0x002a, 0x2004, 0x9084, 0xfff8, 0xa86e, 0xa873,
++      0x0000, 0x2001, 0x032a, 0x2003, 0x0004, 0x2001, 0x0300, 0x2003,
++      0x0000, 0x2001, 0x020d, 0x2003, 0x0000, 0x2001, 0x0004, 0x200c,
++      0x918d, 0x0002, 0x2102, 0x00ee, 0x0005, 0x0126, 0x2091, 0x8000,
++      0x81ff, 0x0148, 0x080c, 0x27e7, 0x1130, 0x9006, 0x080c, 0x2747,
++      0x9006, 0x080c, 0x272a, 0x7884, 0x9084, 0x0007, 0x0002, 0x380a,
++      0x3813, 0x381c, 0x3807, 0x3807, 0x3807, 0x3807, 0x3807, 0x012e,
++      0x0804, 0x3092, 0x2009, 0x0114, 0x2104, 0x9085, 0x0800, 0x200a,
++      0x080c, 0x39ba, 0x00c0, 0x2009, 0x0114, 0x2104, 0x9085, 0x4000,
++      0x200a, 0x080c, 0x39ba, 0x0078, 0x080c, 0x6877, 0x1128, 0x012e,
++      0x2009, 0x0016, 0x0804, 0x308f, 0x81ff, 0x0128, 0x012e, 0x2021,
++      0x400b, 0x0804, 0x3061, 0x0086, 0x0096, 0x00a6, 0x00b6, 0x00c6,
++      0x00d6, 0x00e6, 0x00f6, 0x080c, 0x3535, 0x2009, 0x0101, 0x210c,
++      0x0016, 0x7ec8, 0x7dcc, 0x9006, 0x2068, 0x2060, 0x2058, 0x080c,
++      0x3c52, 0x080c, 0x3bab, 0x903e, 0x2720, 0x00f6, 0x00e6, 0x0086,
++      0x2940, 0x2071, 0x1a33, 0x2079, 0x0090, 0x00d6, 0x2069, 0x0000,
++      0x6884, 0xd0b4, 0x0120, 0x68d4, 0x780e, 0x68d0, 0x780a, 0x00de,
++      0x2011, 0x0001, 0x080c, 0x3b2b, 0x080c, 0x27ef, 0x080c, 0x27ef,
++      0x080c, 0x27ef, 0x080c, 0x27ef, 0x080c, 0x3b2b, 0x008e, 0x00ee,
++      0x00fe, 0x080c, 0x3a61, 0x2001, 0x020b, 0x2004, 0x9084, 0x0140,
++      0x1dd0, 0x00f6, 0x2079, 0x0000, 0x7884, 0x00fe, 0xd0bc, 0x0178,
++      0x2001, 0x0201, 0x200c, 0x81ff, 0x0150, 0x080c, 0x3a3f, 0x2d00,
++      0x9c05, 0x9b05, 0x0120, 0x080c, 0x3974, 0x0804, 0x3921, 0x080c,
++      0x3b7f, 0x080c, 0x3ac3, 0x080c, 0x3a22, 0x080c, 0x3a57, 0x00f6,
++      0x2079, 0x0100, 0x7824, 0xd0ac, 0x0130, 0x8b58, 0x080c, 0x3974,
++      0x00fe, 0x0804, 0x3921, 0x00fe, 0x080c, 0x396a, 0x1150, 0x8d68,
++      0x2001, 0x0032, 0x2602, 0x2001, 0x0033, 0x2502, 0x080c, 0x3974,
++      0x0080, 0x87ff, 0x0138, 0x2001, 0x0201, 0x2004, 0x9005, 0x1908,
++      0x8739, 0x0038, 0x2001, 0x1a30, 0x2004, 0x9086, 0x0000, 0x1904,
++      0x3871, 0x2001, 0x032f, 0x2003, 0x00f6, 0x8631, 0x1208, 0x8529,
++      0x2500, 0x9605, 0x0904, 0x3921, 0x7884, 0xd0bc, 0x0128, 0x2d00,
++      0x9c05, 0x9b05, 0x1904, 0x3921, 0xa013, 0x0019, 0x2001, 0x032a,
++      0x2003, 0x0004, 0x7884, 0xd0ac, 0x1148, 0x2001, 0x1a30, 0x2003,
++      0x0003, 0x2001, 0x032a, 0x2003, 0x0009, 0x0030, 0xa017, 0x0001,
++      0x78b4, 0x9005, 0x0108, 0xa016, 0x2800, 0xa05a, 0x2009, 0x0040,
++      0x080c, 0x2014, 0x2900, 0xa85a, 0xa813, 0x0019, 0x7884, 0xd0a4,
++      0x1180, 0xa817, 0x0000, 0x00c6, 0x20a9, 0x0004, 0x2061, 0x0090,
++      0x602b, 0x0008, 0x2001, 0x0203, 0x2004, 0x1f04, 0x38f8, 0x00ce,
++      0x0030, 0xa817, 0x0001, 0x78b0, 0x9005, 0x0108, 0xa816, 0x00f6,
++      0x00c6, 0x2079, 0x0100, 0x2061, 0x0090, 0x7827, 0x0002, 0x2001,
++      0x002a, 0x2004, 0x9084, 0xfff8, 0x601a, 0x0006, 0x2001, 0x002b,
++      0x2004, 0x601e, 0x78c6, 0x000e, 0x78ca, 0x00ce, 0x00fe, 0x0804,
++      0x3845, 0x001e, 0x00c6, 0x2001, 0x032a, 0x2003, 0x0004, 0x2061,
++      0x0100, 0x6027, 0x0002, 0x6106, 0x2011, 0x020d, 0x2013, 0x0020,
++      0x2001, 0x0004, 0x200c, 0x918c, 0xfffd, 0x2102, 0x080c, 0x1245,
++      0x7884, 0x9084, 0x0003, 0x9086, 0x0002, 0x01a0, 0x2009, 0x0028,
++      0x080c, 0x2014, 0x2001, 0x0227, 0x200c, 0x2102, 0x6050, 0x9084,
++      0xb7ef, 0x6052, 0x602f, 0x0000, 0x604b, 0xf7f7, 0x6043, 0x0090,
++      0x6043, 0x0010, 0x00ce, 0x2d08, 0x2c10, 0x2b18, 0x2b00, 0x9c05,
++      0x9d05, 0x00fe, 0x00ee, 0x00de, 0x00ce, 0x00be, 0x00ae, 0x009e,
++      0x008e, 0x1118, 0x012e, 0x0804, 0x305f, 0x012e, 0x2021, 0x400c,
++      0x0804, 0x3061, 0x9085, 0x0001, 0x1d04, 0x3973, 0x2091, 0x6000,
++      0x8420, 0x9486, 0x0064, 0x0005, 0x2001, 0x0105, 0x2003, 0x0010,
++      0x2001, 0x032a, 0x2003, 0x0004, 0x2001, 0x1a30, 0x2003, 0x0000,
++      0x0051, 0x2009, 0x0048, 0x080c, 0x2014, 0x2001, 0x0227, 0x2024,
++      0x2402, 0x9026, 0x0005, 0x00f6, 0x00e6, 0x2071, 0x1a33, 0x7000,
++      0x9086, 0x0000, 0x0520, 0x2079, 0x0090, 0x2009, 0x0206, 0x2104,
++      0x2009, 0x0203, 0x210c, 0x9106, 0x1120, 0x2009, 0x0040, 0x080c,
++      0x2014, 0x782c, 0xd0fc, 0x0d88, 0x080c, 0x3b7f, 0x7000, 0x9086,
++      0x0000, 0x1d58, 0x782b, 0x0004, 0x782c, 0xd0ac, 0x1de8, 0x2009,
++      0x0040, 0x080c, 0x2014, 0x782b, 0x0002, 0x7003, 0x0000, 0x00ee,
++      0x00fe, 0x0005, 0x00f6, 0x2079, 0x0100, 0x2001, 0x1816, 0x200c,
++      0x7932, 0x7936, 0x080c, 0x2446, 0x7850, 0x9084, 0xfbff, 0x9085,
++      0x0030, 0x7852, 0x2019, 0x01f4, 0x8319, 0x1df0, 0x9084, 0xffcf,
++      0x9085, 0x2000, 0x7852, 0x20a9, 0x0046, 0x1d04, 0x39d5, 0x2091,
++      0x6000, 0x1f04, 0x39d5, 0x7850, 0x9085, 0x0400, 0x9084, 0xdfff,
++      0x7852, 0x2001, 0x0021, 0x2004, 0x9084, 0x0003, 0x9086, 0x0001,
++      0x1120, 0x7850, 0x9084, 0xdfff, 0x7852, 0x784b, 0xf7f7, 0x7843,
++      0x0090, 0x7843, 0x0010, 0x20a9, 0x0028, 0xa001, 0x1f04, 0x39f5,
++      0x7850, 0x9085, 0x1400, 0x7852, 0x2019, 0x61a8, 0x7854, 0xa001,
++      0xa001, 0xd08c, 0x1110, 0x8319, 0x1dc8, 0x7827, 0x0048, 0x7850,
++      0x9085, 0x0400, 0x7852, 0x7843, 0x0040, 0x2019, 0x01f4, 0xa001,
++      0xa001, 0x8319, 0x1de0, 0x2001, 0x0100, 0x080c, 0x28a5, 0x7827,
++      0x0020, 0x7843, 0x0000, 0x9006, 0x080c, 0x28a5, 0x7827, 0x0048,
++      0x00fe, 0x0005, 0x7884, 0xd0ac, 0x11c8, 0x00f6, 0x00e6, 0x2071,
++      0x1a30, 0x2079, 0x0320, 0x2001, 0x0201, 0x2004, 0x9005, 0x0160,
++      0x7000, 0x9086, 0x0000, 0x1140, 0x0051, 0xd0bc, 0x0108, 0x8738,
++      0x7003, 0x0003, 0x782b, 0x0019, 0x00ee, 0x00fe, 0x0005, 0x00f6,
++      0x2079, 0x0300, 0x78bc, 0x00fe, 0x908c, 0x0070, 0x0178, 0x2009,
++      0x0032, 0x260a, 0x2009, 0x0033, 0x250a, 0xd0b4, 0x0108, 0x8c60,
++      0xd0ac, 0x0108, 0x8d68, 0xd0a4, 0x0108, 0x8b58, 0x0005, 0x00f6,
++      0x2079, 0x0200, 0x781c, 0xd084, 0x0110, 0x7837, 0x0050, 0x00fe,
++      0x0005, 0x00e6, 0x2071, 0x0100, 0x2001, 0x1977, 0x2004, 0x70e2,
++      0x080c, 0x376f, 0x1188, 0x2001, 0x181e, 0x2004, 0x2009, 0x181d,
++      0x210c, 0x918c, 0x00ff, 0x706e, 0x716a, 0x7066, 0x918d, 0x3200,
++      0x7162, 0x7073, 0xe109, 0x0080, 0x702c, 0x9085, 0x0002, 0x702e,
++      0x2009, 0x1816, 0x210c, 0x716e, 0x7063, 0x0100, 0x7166, 0x719e,
++      0x706b, 0x0000, 0x7073, 0x0809, 0x7077, 0x0008, 0x7078, 0x9080,
++      0x0100, 0x707a, 0x7080, 0x8000, 0x7082, 0x7087, 0xaaaa, 0x9006,
++      0x708a, 0x708e, 0x707e, 0x70d6, 0x70ab, 0x0036, 0x70af, 0x95d5,
++      0x7014, 0x9084, 0x1984, 0x9085, 0x0012, 0x7016, 0x080c, 0x3b7f,
++      0x00f6, 0x2071, 0x1a30, 0x2079, 0x0320, 0x00d6, 0x2069, 0x0000,
++      0x6884, 0xd0b4, 0x0120, 0x689c, 0x780e, 0x6898, 0x780a, 0x00de,
++      0x2011, 0x0011, 0x080c, 0x3b2b, 0x2011, 0x0001, 0x080c, 0x3b2b,
++      0x00fe, 0x00ee, 0x0005, 0x00f6, 0x00e6, 0x2071, 0x1a30, 0x2079,
++      0x0320, 0x792c, 0xd1fc, 0x0904, 0x3b28, 0x782b, 0x0002, 0x9026,
++      0xd19c, 0x1904, 0x3b24, 0x7000, 0x0002, 0x3b28, 0x3ad9, 0x3b09,
++      0x3b24, 0xd1bc, 0x1170, 0xd1dc, 0x1190, 0x8001, 0x7002, 0x2011,
++      0x0001, 0x080c, 0x3b2b, 0x0904, 0x3b28, 0x080c, 0x3b2b, 0x0804,
++      0x3b28, 0x00f6, 0x2079, 0x0300, 0x78bf, 0x0000, 0x00fe, 0x7810,
++      0x7914, 0x782b, 0x0004, 0x7812, 0x7916, 0x2001, 0x0201, 0x200c,
++      0x81ff, 0x0de8, 0x080c, 0x3a3f, 0x2009, 0x0001, 0x00f6, 0x2079,
++      0x0300, 0x78b8, 0x00fe, 0xd0ec, 0x0110, 0x2009, 0x0011, 0x792a,
++      0x00f8, 0x8001, 0x7002, 0x9184, 0x0880, 0x1140, 0x782c, 0xd0fc,
++      0x1904, 0x3acd, 0x2011, 0x0001, 0x00b1, 0x0090, 0xa010, 0x9092,
++      0x0004, 0x9086, 0x0015, 0x1120, 0xa000, 0xa05a, 0x2011, 0x0031,
++      0xa212, 0xd1dc, 0x1960, 0x0828, 0x782b, 0x0004, 0x7003, 0x0000,
++      0x00ee, 0x00fe, 0x0005, 0xa014, 0x9005, 0x0540, 0x8001, 0x0036,
++      0x0096, 0xa016, 0xa058, 0x2048, 0xa010, 0x2009, 0x0025, 0x911a,
++      0x831c, 0x831c, 0x938a, 0x0004, 0x1a0c, 0x0d84, 0x9398, 0x3b57,
++      0x231d, 0x083f, 0x9080, 0x0004, 0x7a2a, 0x7100, 0x8108, 0x7102,
++      0x009e, 0x003e, 0x908a, 0x0029, 0x1130, 0xa058, 0x2048, 0xa804,
++      0xa05a, 0x2001, 0x0019, 0xa012, 0x9085, 0x0001, 0x0005, 0x3b76,
++      0x3b6d, 0x3b64, 0x3b5b, 0xa964, 0x7902, 0xa968, 0x7906, 0xa96c,
++      0x7912, 0xa970, 0x7916, 0x0005, 0xa974, 0x7902, 0xa978, 0x7906,
++      0xa97c, 0x7912, 0xa980, 0x7916, 0x0005, 0xa984, 0x7902, 0xa988,
++      0x7906, 0xa98c, 0x7912, 0xa990, 0x7916, 0x0005, 0xa994, 0x7902,
++      0xa998, 0x7906, 0xa99c, 0x7912, 0xa9a0, 0x7916, 0x0005, 0x00f6,
++      0x00e6, 0x0086, 0x2071, 0x1a33, 0x2079, 0x0090, 0x792c, 0xd1fc,
++      0x01f0, 0x782b, 0x0002, 0x2940, 0x9026, 0x7000, 0x0002, 0x3ba7,
++      0x3b92, 0x3b9e, 0x8001, 0x7002, 0xd19c, 0x1188, 0x2011, 0x0001,
++      0x080c, 0x3b2b, 0x0160, 0x080c, 0x3b2b, 0x0048, 0x8001, 0x7002,
++      0x782c, 0xd0fc, 0x1d30, 0x2011, 0x0001, 0x080c, 0x3b2b, 0x008e,
++      0x00ee, 0x00fe, 0x0005, 0x00f6, 0x00e6, 0x00c6, 0x0086, 0x2061,
++      0x0200, 0x2001, 0x1977, 0x2004, 0x601a, 0x2061, 0x0100, 0x2001,
++      0x1976, 0x2004, 0x60ce, 0x6104, 0xc1ac, 0x6106, 0x2001, 0x002c,
++      0x2004, 0x9005, 0x0518, 0x2038, 0x2001, 0x002e, 0x2024, 0x2001,
++      0x002f, 0x201c, 0x080c, 0x441f, 0xa813, 0x0019, 0xaf16, 0x2900,
++      0xa85a, 0x978a, 0x0007, 0x0220, 0x2138, 0x2009, 0x0007, 0x0010,
++      0x2708, 0x903e, 0x0096, 0xa858, 0x2048, 0xa85c, 0x9080, 0x0019,
++      0x009e, 0x04c1, 0x1d70, 0x2900, 0xa85a, 0x0080, 0x080c, 0x441f,
++      0xa813, 0x0019, 0xa817, 0x0001, 0x2900, 0xa85a, 0x2001, 0x002e,
++      0x2004, 0xa866, 0x2001, 0x002f, 0x2004, 0xa86a, 0x2061, 0x0090,
++      0x2079, 0x0100, 0x2001, 0x1976, 0x2004, 0x6036, 0x2009, 0x0040,
++      0x080c, 0x2014, 0x2001, 0x002a, 0x2004, 0x9084, 0xfff8, 0xa86e,
++      0x601a, 0x0006, 0x2001, 0x002b, 0x2004, 0xa872, 0x601e, 0x78c6,
++      0x000e, 0x78ca, 0x9006, 0x600a, 0x600e, 0x008e, 0x00ce, 0x00ee,
++      0x00fe, 0x0005, 0x00e6, 0x2071, 0x0080, 0xaa60, 0x22e8, 0x20a0,
++      0x20e1, 0x0000, 0x2099, 0x0088, 0x702b, 0x0026, 0x7402, 0x7306,
++      0x9006, 0x700a, 0x700e, 0x810b, 0x810b, 0x21a8, 0x810b, 0x7112,
++      0x702b, 0x0041, 0x702c, 0xd0fc, 0x0de8, 0x702b, 0x0002, 0x702b,
++      0x0040, 0x4005, 0x7400, 0x7304, 0x87ff, 0x0190, 0x0086, 0x0096,
++      0x2940, 0x0086, 0x080c, 0x441f, 0x008e, 0xa058, 0x00a6, 0x2050,
++      0x2900, 0xb006, 0xa05a, 0x00ae, 0x009e, 0x008e, 0x9085, 0x0001,
++      0x00ee, 0x0005, 0x00e6, 0x2001, 0x002d, 0x2004, 0x9005, 0x0528,
++      0x2038, 0x2001, 0x0030, 0x2024, 0x2001, 0x0031, 0x201c, 0x080c,
++      0x441f, 0x2940, 0xa813, 0x0019, 0xaf16, 0x2900, 0xa85a, 0x978a,
++      0x0007, 0x0220, 0x2138, 0x2009, 0x0007, 0x0010, 0x2708, 0x903e,
++      0x0096, 0xa858, 0x2048, 0xa85c, 0x9080, 0x0019, 0x009e, 0x080c,
++      0x3c1a, 0x1d68, 0x2900, 0xa85a, 0x00d8, 0x080c, 0x441f, 0x2940,
++      0xa013, 0x0019, 0xa017, 0x0001, 0x2800, 0xa05a, 0x2001, 0x0030,
++      0x2004, 0xa066, 0x2001, 0x0031, 0x2004, 0xa06a, 0x2001, 0x002a,
++      0x2004, 0x9084, 0xfff8, 0xa06e, 0x2001, 0x002b, 0x2004, 0xa072,
++      0x2001, 0x032a, 0x2003, 0x0004, 0x7884, 0xd0ac, 0x1180, 0x2001,
++      0x0101, 0x200c, 0x918d, 0x0200, 0x2102, 0xa017, 0x0000, 0x2001,
++      0x1a30, 0x2003, 0x0003, 0x2001, 0x032a, 0x2003, 0x0009, 0x2001,
++      0x0300, 0x2003, 0x0000, 0x2001, 0x020d, 0x2003, 0x0000, 0x2001,
++      0x0004, 0x200c, 0x918d, 0x0002, 0x2102, 0x00ee, 0x0005, 0x0126,
++      0x2091, 0x8000, 0x20a9, 0x0012, 0x2001, 0x1840, 0x20e9, 0x0001,
++      0x20a0, 0x9006, 0x4004, 0x2009, 0x013c, 0x200a, 0x012e, 0x7880,
++      0x9086, 0x0052, 0x0108, 0x0005, 0x0804, 0x305f, 0x7d98, 0x7c9c,
++      0x0804, 0x3154, 0x080c, 0x6877, 0x0110, 0x080c, 0x569e, 0x2069,
++      0x1852, 0x2d00, 0x2009, 0x0030, 0x7a8c, 0x7b88, 0x7c9c, 0x7d98,
++      0x2039, 0x0001, 0x080c, 0x4468, 0x701b, 0x3cef, 0x0005, 0x080c,
++      0x4df9, 0x1130, 0x3b00, 0x3a08, 0xc194, 0xc095, 0x20d8, 0x21d0,
++      0x2069, 0x1852, 0x6800, 0x9005, 0x0904, 0x3092, 0x6804, 0xd0ac,
++      0x0118, 0xd0a4, 0x0904, 0x3092, 0xd094, 0x00c6, 0x2061, 0x0100,
++      0x6104, 0x0138, 0x6200, 0x9292, 0x0005, 0x0218, 0x918c, 0xffdf,
++      0x0010, 0x918d, 0x0020, 0x6106, 0x00ce, 0xd08c, 0x00c6, 0x2061,
++      0x0100, 0x6104, 0x0118, 0x918d, 0x0010, 0x0010, 0x918c, 0xffef,
++      0x6106, 0x00ce, 0xd084, 0x0158, 0x6a28, 0x928a, 0x007f, 0x1a04,
++      0x3092, 0x9288, 0x2e6e, 0x210d, 0x918c, 0x00ff, 0x615e, 0xd0dc,
++      0x0130, 0x6828, 0x908a, 0x007f, 0x1a04, 0x3092, 0x6056, 0x6888,
++      0x9084, 0x0030, 0x8004, 0x8004, 0x8004, 0x8004, 0x0006, 0x2009,
++      0x197e, 0x9080, 0x2539, 0x2005, 0x200a, 0x000e, 0x2009, 0x197f,
++      0x9080, 0x253d, 0x2005, 0x200a, 0x6808, 0x908a, 0x0100, 0x0a04,
++      0x3092, 0x908a, 0x0841, 0x1a04, 0x3092, 0x9084, 0x0007, 0x1904,
++      0x3092, 0x680c, 0x9005, 0x0904, 0x3092, 0x6810, 0x9005, 0x0904,
++      0x3092, 0x6848, 0x6940, 0x910a, 0x1a04, 0x3092, 0x8001, 0x0904,
++      0x3092, 0x684c, 0x6944, 0x910a, 0x1a04, 0x3092, 0x8001, 0x0904,
++      0x3092, 0x6980, 0xd1e4, 0x0140, 0x00c6, 0x2061, 0x0100, 0x6004,
++      0x9085, 0x0100, 0x6006, 0x00ce, 0x2009, 0x194e, 0x200b, 0x0000,
++      0x2001, 0x1874, 0x2004, 0xd0c4, 0x0140, 0x7884, 0x200a, 0x2009,
++      0x017f, 0x200a, 0x3b00, 0xc085, 0x20d8, 0x6814, 0x908c, 0x00ff,
++      0x6146, 0x8007, 0x9084, 0x00ff, 0x604a, 0x080c, 0x6b71, 0x080c,
++      0x5f63, 0x080c, 0x5f97, 0x6808, 0x602a, 0x080c, 0x1f86, 0x2009,
++      0x0170, 0x200b, 0x0080, 0xa001, 0xa001, 0x200b, 0x0000, 0x0036,
++      0x6b08, 0x080c, 0x24a0, 0x003e, 0x6000, 0x9086, 0x0000, 0x1904,
++      0x3e96, 0x6818, 0x691c, 0x6a20, 0x6b24, 0x8007, 0x810f, 0x8217,
++      0x831f, 0x6016, 0x611a, 0x621e, 0x6322, 0x6c04, 0xd4f4, 0x0148,
++      0x6830, 0x6934, 0x6a38, 0x6b3c, 0x8007, 0x810f, 0x8217, 0x831f,
++      0x0010, 0x9084, 0xf0ff, 0x6006, 0x610a, 0x620e, 0x6312, 0x8007,
++      0x810f, 0x8217, 0x831f, 0x20a9, 0x0004, 0x20a1, 0x1980, 0x20e9,
++      0x0001, 0x4001, 0x20a9, 0x0004, 0x20a1, 0x199a, 0x20e9, 0x0001,
++      0x4001, 0x080c, 0x791c, 0x00c6, 0x900e, 0x20a9, 0x0001, 0x6b70,
++      0xd384, 0x0510, 0x0068, 0x2009, 0x0100, 0x210c, 0x918e, 0x0008,
++      0x1110, 0x839d, 0x0010, 0x83f5, 0x3e18, 0x12b0, 0x3508, 0x8109,
++      0x080c, 0x70f4, 0x6878, 0x6016, 0x6874, 0x2008, 0x9084, 0xff00,
++      0x8007, 0x600a, 0x9184, 0x00ff, 0x6006, 0x8108, 0x1118, 0x6003,
++      0x0003, 0x0010, 0x6003, 0x0001, 0x1f04, 0x3deb, 0x00ce, 0x00c6,
++      0x2061, 0x1969, 0x6a88, 0x9284, 0xc000, 0x2010, 0x9286, 0x0000,
++      0x1158, 0x2063, 0x0000, 0x2001, 0x0001, 0x080c, 0x2747, 0x2001,
++      0x0001, 0x080c, 0x272a, 0x0088, 0x9286, 0x4000, 0x1148, 0x2063,
++      0x0001, 0x9006, 0x080c, 0x2747, 0x9006, 0x080c, 0x272a, 0x0028,
++      0x9286, 0x8000, 0x1d30, 0x2063, 0x0002, 0x00ce, 0x00e6, 0x2c70,
++      0x080c, 0x0e3b, 0x00ee, 0x6888, 0xd0ec, 0x0130, 0x2011, 0x0114,
++      0x2204, 0x9085, 0x0100, 0x2012, 0x6a80, 0x9284, 0x0030, 0x9086,
++      0x0030, 0x1128, 0x9294, 0xffcf, 0x9295, 0x0020, 0x6a82, 0x2001,
++      0x194b, 0x6a80, 0x9294, 0x0030, 0x928e, 0x0000, 0x0170, 0x928e,
++      0x0010, 0x0118, 0x928e, 0x0020, 0x0140, 0x2003, 0xaaaa, 0x080c,
++      0x2515, 0x2001, 0x193c, 0x2102, 0x0008, 0x2102, 0x00c6, 0x2061,
++      0x0100, 0x602f, 0x0040, 0x602f, 0x0000, 0x00ce, 0x080c, 0x6877,
++      0x0128, 0x080c, 0x46fa, 0x0110, 0x080c, 0x2466, 0x60d0, 0x9005,
++      0x01c0, 0x6003, 0x0001, 0x2009, 0x3e7e, 0x00d0, 0x080c, 0x6877,
++      0x1168, 0x2011, 0x6739, 0x080c, 0x781a, 0x2011, 0x672c, 0x080c,
++      0x78e7, 0x080c, 0x6b45, 0x080c, 0x67be, 0x0040, 0x080c, 0x55a0,
++      0x0028, 0x6003, 0x0004, 0x2009, 0x3e96, 0x0010, 0x0804, 0x305f,
++      0x2001, 0x0170, 0x2004, 0x9084, 0x00ff, 0x9086, 0x004c, 0x1118,
++      0x2091, 0x30bd, 0x0817, 0x2091, 0x303d, 0x0817, 0x6000, 0x9086,
++      0x0000, 0x0904, 0x308f, 0x2069, 0x1852, 0x7890, 0x6842, 0x7894,
++      0x6846, 0x2d00, 0x2009, 0x0030, 0x7a8c, 0x7b88, 0x7c9c, 0x7d98,
++      0x2039, 0x0001, 0x0804, 0x446b, 0x9006, 0x080c, 0x2466, 0x81ff,
++      0x1904, 0x308f, 0x080c, 0x6877, 0x1168, 0x080c, 0x6b40, 0x080c,
++      0x56d9, 0x080c, 0x2e69, 0x0118, 0x6130, 0xc18d, 0x6132, 0x080c,
++      0x67be, 0x0020, 0x080c, 0x569e, 0x080c, 0x55a0, 0x0804, 0x305f,
++      0x81ff, 0x1904, 0x308f, 0x080c, 0x6877, 0x1110, 0x0804, 0x308f,
++      0x618c, 0x81ff, 0x01a8, 0x704b, 0x0000, 0x2001, 0x1c80, 0x2009,
++      0x0040, 0x7a8c, 0x7b88, 0x7c9c, 0x7d98, 0x0126, 0x2091, 0x8000,
++      0x2039, 0x0001, 0x080c, 0x446b, 0x701b, 0x305d, 0x012e, 0x0005,
++      0x704b, 0x0001, 0x00d6, 0x2069, 0x1c80, 0x20a9, 0x0040, 0x20e9,
++      0x0001, 0x20a1, 0x1c80, 0x2019, 0xffff, 0x4304, 0x6554, 0x9588,
++      0x2e6e, 0x210d, 0x918c, 0x00ff, 0x216a, 0x900e, 0x2011, 0x0002,
++      0x2100, 0x9506, 0x01a8, 0x080c, 0x5c0d, 0x1190, 0xb814, 0x821c,
++      0x0238, 0x9398, 0x1c80, 0x9085, 0xff00, 0x8007, 0x201a, 0x0038,
++      0x9398, 0x1c80, 0x2324, 0x94a4, 0xff00, 0x9405, 0x201a, 0x8210,
++      0x8108, 0x9182, 0x0080, 0x1208, 0x0c18, 0x8201, 0x8007, 0x2d0c,
++      0x9105, 0x206a, 0x00de, 0x20a9, 0x0040, 0x20a1, 0x1c80, 0x2099,
++      0x1c80, 0x080c, 0x5634, 0x0804, 0x3ee5, 0x080c, 0x4452, 0x0904,
++      0x3092, 0x080c, 0x441f, 0x1120, 0x2009, 0x0002, 0x0804, 0x308f,
++      0x080c, 0x4dea, 0xd0b4, 0x0558, 0x7884, 0x908e, 0x007e, 0x0538,
++      0x908e, 0x007f, 0x0520, 0x908e, 0x0080, 0x0508, 0x080c, 0x2e64,
++      0x1148, 0xb800, 0xd08c, 0x11d8, 0xb804, 0x9084, 0x00ff, 0x9086,
++      0x0006, 0x11a8, 0xa867, 0x0000, 0xa868, 0xc0fd, 0xa86a, 0x080c,
++      0xb258, 0x1120, 0x2009, 0x0003, 0x0804, 0x308f, 0x7007, 0x0003,
++      0x701b, 0x3f73, 0x0005, 0x080c, 0x4452, 0x0904, 0x3092, 0x20a9,
++      0x002b, 0xb8b4, 0x20e0, 0xb8b8, 0x2098, 0xa860, 0x20e8, 0xa85c,
++      0x9080, 0x0002, 0x20a0, 0x4003, 0x20a9, 0x0008, 0x9080, 0x0006,
++      0x20a0, 0xb8b4, 0x20e0, 0xb8b8, 0x9080, 0x0006, 0x2098, 0x080c,
++      0x0f2b, 0x0070, 0x20a9, 0x0004, 0xa85c, 0x9080, 0x000a, 0x20a0,
++      0xb8b4, 0x20e0, 0xb8b8, 0x9080, 0x000a, 0x2098, 0x080c, 0x0f2b,
++      0x8906, 0x8006, 0x8007, 0x90bc, 0x003f, 0x9084, 0xffc0, 0x9080,
++      0x0002, 0x2009, 0x002b, 0x7a8c, 0x7b88, 0x7c9c, 0x7d98, 0x0804,
++      0x446b, 0x81ff, 0x1904, 0x308f, 0x080c, 0x4436, 0x0904, 0x3092,
++      0x080c, 0x5d7f, 0x0904, 0x308f, 0x0058, 0xa878, 0x9005, 0x0120,
++      0x2009, 0x0004, 0x0804, 0x308f, 0xa974, 0xaa94, 0x0804, 0x305f,
++      0x080c, 0x4df2, 0x0904, 0x305f, 0x701b, 0x3fbd, 0x7007, 0x0003,
++      0x0005, 0x81ff, 0x1904, 0x308f, 0x7888, 0x908a, 0x1000, 0x1a04,
++      0x3092, 0x080c, 0x4452, 0x0904, 0x3092, 0x080c, 0x5e04, 0x0904,
++      0x308f, 0x2019, 0x0004, 0x900e, 0x080c, 0x5d91, 0x0904, 0x308f,
++      0x7984, 0x7a88, 0x0499, 0x08e0, 0xa89c, 0x908a, 0x1000, 0x12c8,
++      0x080c, 0x4450, 0x01b0, 0x080c, 0x5e04, 0x2009, 0x0002, 0x0168,
++      0x2009, 0x0002, 0x2019, 0x0004, 0x080c, 0x5d91, 0x2009, 0x0003,
++      0x0120, 0xa998, 0xaa9c, 0x00d1, 0x0060, 0xa897, 0x4005, 0xa99a,
++      0x0010, 0xa897, 0x4006, 0x900e, 0x9085, 0x0001, 0x2001, 0x0030,
++      0x0005, 0xa897, 0x4000, 0x080c, 0x4df2, 0x0110, 0x9006, 0x0018,
++      0x900e, 0x9085, 0x0001, 0x2001, 0x0000, 0x0005, 0x9186, 0x00ff,
++      0x0110, 0x0071, 0x0060, 0x2029, 0x007e, 0x2061, 0x1800, 0x6454,
++      0x2400, 0x9506, 0x0110, 0x2508, 0x0019, 0x8529, 0x1ec8, 0x0005,
++      0x080c, 0x5c0d, 0x1138, 0x2200, 0x8003, 0x800b, 0x810b, 0x9108,
++      0x080c, 0x7826, 0x0005, 0x81ff, 0x1904, 0x308f, 0x080c, 0x4436,
++      0x0904, 0x3092, 0x080c, 0x5cd4, 0x0904, 0x308f, 0x080c, 0x5d88,
++      0x0904, 0x308f, 0x0804, 0x3fc8, 0x81ff, 0x1904, 0x308f, 0x080c,
++      0x4436, 0x0904, 0x3092, 0x080c, 0x5cd4, 0x0904, 0x308f, 0x080c,
++      0x5d76, 0x0904, 0x308f, 0x0804, 0x3fc8, 0x6100, 0x0804, 0x305f,
++      0x080c, 0x4452, 0x0904, 0x3092, 0x080c, 0x4dfe, 0x1904, 0x308f,
++      0x79a8, 0xd184, 0x1158, 0xb834, 0x8007, 0x789e, 0xb830, 0x8007,
++      0x789a, 0xbb2c, 0x831f, 0xba28, 0x8217, 0x0050, 0xb824, 0x8007,
++      0x789e, 0xb820, 0x8007, 0x789a, 0xbb1c, 0x831f, 0xba18, 0x8217,
++      0xb900, 0x918c, 0x0200, 0x0804, 0x305f, 0x78a8, 0x909c, 0x0003,
++      0xd0b4, 0x1150, 0x939a, 0x0003, 0x1a04, 0x308f, 0x6254, 0x9294,
++      0x00ff, 0x7884, 0x9206, 0x1560, 0x2031, 0x1848, 0x2009, 0x013c,
++      0x2136, 0x2001, 0x1840, 0x2009, 0x000c, 0x7a8c, 0x7b88, 0x7c9c,
++      0x7d98, 0x2039, 0x0001, 0x0006, 0x78a8, 0x9084, 0x0080, 0x1118,
++      0x000e, 0x0804, 0x446b, 0x000e, 0x2031, 0x0000, 0x2061, 0x18ac,
++      0x2c44, 0xa66a, 0xa17a, 0xa772, 0xa076, 0xa28e, 0xa392, 0xa496,
++      0xa59a, 0x080c, 0x108c, 0x7007, 0x0002, 0x701b, 0x40df, 0x0005,
++      0x81ff, 0x1904, 0x308f, 0x080c, 0x4452, 0x0904, 0x3092, 0x080c,
++      0x5f2d, 0x1904, 0x308f, 0x00c6, 0x080c, 0x441f, 0x00ce, 0x0904,
++      0x308f, 0xa867, 0x0000, 0xa868, 0xc0fd, 0xa86a, 0x080c, 0xb1fe,
++      0x0904, 0x308f, 0x7007, 0x0003, 0x701b, 0x40e3, 0x0005, 0x080c,
++      0x3cbf, 0x0804, 0x305f, 0xa830, 0x9086, 0x0100, 0x0904, 0x308f,
++      0x8906, 0x8006, 0x8007, 0x90bc, 0x003f, 0x9084, 0xffc0, 0x9080,
++      0x001b, 0x2009, 0x000c, 0x7a8c, 0x7b88, 0x7c9c, 0x7d98, 0x0804,
++      0x446b, 0x9006, 0x080c, 0x2466, 0x78a8, 0x9084, 0x00ff, 0x9086,
++      0x00ff, 0x0118, 0x81ff, 0x1904, 0x308f, 0x080c, 0x6877, 0x0110,
++      0x080c, 0x569e, 0x7888, 0x908a, 0x1000, 0x1a04, 0x3092, 0x7984,
++      0x9186, 0x00ff, 0x0138, 0x9182, 0x007f, 0x1a04, 0x3092, 0x2100,
++      0x080c, 0x2430, 0x0026, 0x00c6, 0x0126, 0x2091, 0x8000, 0x2061,
++      0x19c7, 0x601b, 0x0000, 0x601f, 0x0000, 0x080c, 0x6877, 0x1158,
++      0x080c, 0x6b40, 0x080c, 0x56d9, 0x9085, 0x0001, 0x080c, 0x68c0,
++      0x080c, 0x67be, 0x00d0, 0x080c, 0x94da, 0x2061, 0x0100, 0x2001,
++      0x1816, 0x2004, 0x9084, 0x00ff, 0x810f, 0x9105, 0x604a, 0x6043,
++      0x0090, 0x6043, 0x0010, 0x2009, 0x1966, 0x200b, 0x0000, 0x2009,
++      0x002d, 0x2011, 0x55ca, 0x080c, 0x78a5, 0x7984, 0x080c, 0x6877,
++      0x1110, 0x2009, 0x00ff, 0x7a88, 0x080c, 0x401e, 0x012e, 0x00ce,
++      0x002e, 0x0804, 0x305f, 0x7984, 0x080c, 0x5bb0, 0x2b08, 0x1904,
++      0x3092, 0x0804, 0x305f, 0x81ff, 0x0120, 0x2009, 0x0001, 0x0804,
++      0x308f, 0x60d8, 0xd0ac, 0x1130, 0xd09c, 0x1120, 0x2009, 0x0005,
++      0x0804, 0x308f, 0x080c, 0x441f, 0x1120, 0x2009, 0x0002, 0x0804,
++      0x308f, 0x7984, 0x7a8c, 0x7b88, 0x7c9c, 0x7d98, 0xa85c, 0x9080,
++      0x0019, 0x7026, 0xaf60, 0x7732, 0x080c, 0x4468, 0x701b, 0x4189,
++      0x0005, 0x2009, 0x0080, 0x080c, 0x5c0d, 0x1118, 0x080c, 0x5f2d,
++      0x0120, 0x2021, 0x400a, 0x0804, 0x3061, 0x00d6, 0x0096, 0xa964,
++      0xaa6c, 0xab70, 0xac74, 0xad78, 0xae7c, 0xa884, 0x90be, 0x0100,
++      0x0904, 0x4222, 0x90be, 0x0112, 0x0904, 0x4222, 0x90be, 0x0113,
++      0x0904, 0x4222, 0x90be, 0x0114, 0x0904, 0x4222, 0x90be, 0x0117,
++      0x0904, 0x4222, 0x90be, 0x011a, 0x0904, 0x4222, 0x90be, 0x011c,
++      0x0904, 0x4222, 0x90be, 0x0121, 0x0904, 0x4209, 0x90be, 0x0131,
++      0x0904, 0x4209, 0x90be, 0x0171, 0x0904, 0x4222, 0x90be, 0x0173,
++      0x0904, 0x4222, 0x90be, 0x01a1, 0x1128, 0xa894, 0x8007, 0xa896,
++      0x0804, 0x422d, 0x90be, 0x0212, 0x0904, 0x4216, 0x90be, 0x0213,
++      0x05e8, 0x90be, 0x0214, 0x0500, 0x90be, 0x0217, 0x0188, 0x90be,
++      0x021a, 0x1120, 0xa89c, 0x8007, 0xa89e, 0x04e0, 0x90be, 0x021f,
++      0x05c8, 0x90be, 0x0300, 0x05b0, 0x009e, 0x00de, 0x0804, 0x3092,
++      0x7024, 0x9080, 0x0010, 0x2098, 0x20a0, 0x7030, 0x20e0, 0x20e8,
++      0x20a9, 0x0007, 0x080c, 0x426b, 0x7024, 0x9080, 0x000e, 0x2098,
++      0x20a0, 0x7030, 0x20e0, 0x20e8, 0x20a9, 0x0001, 0x080c, 0x426b,
++      0x00c8, 0x7024, 0x9080, 0x000c, 0x2098, 0x20a0, 0x7030, 0x20e0,
++      0x20e8, 0x20a9, 0x0001, 0x080c, 0x4278, 0x00b8, 0x7024, 0x9080,
++      0x000e, 0x2098, 0x20a0, 0x7030, 0x20e0, 0x20e8, 0x20a9, 0x0001,
++      0x080c, 0x4278, 0x7024, 0x9080, 0x000c, 0x2098, 0x20a0, 0x7030,
++      0x20e0, 0x20e8, 0x20a9, 0x0001, 0x04f1, 0x00c6, 0x080c, 0x441f,
++      0x0550, 0xa868, 0xc0fd, 0xa86a, 0xa867, 0x0119, 0x9006, 0xa882,
++      0xa87f, 0x0020, 0xa88b, 0x0001, 0x810b, 0xa9ae, 0xa8b2, 0xaab6,
++      0xabba, 0xacbe, 0xadc2, 0xa9c6, 0xa8ca, 0x00ce, 0x009e, 0x00de,
++      0xa866, 0xa822, 0xa868, 0xc0fd, 0xa86a, 0xa804, 0x2048, 0x080c,
++      0xb219, 0x1120, 0x2009, 0x0003, 0x0804, 0x308f, 0x7007, 0x0003,
++      0x701b, 0x4262, 0x0005, 0x00ce, 0x009e, 0x00de, 0x2009, 0x0002,
++      0x0804, 0x308f, 0xa820, 0x9086, 0x8001, 0x1904, 0x305f, 0x2009,
++      0x0004, 0x0804, 0x308f, 0x0016, 0x0026, 0x3510, 0x20a9, 0x0002,
++      0x4002, 0x4104, 0x4004, 0x8211, 0x1dc8, 0x002e, 0x001e, 0x0005,
++      0x0016, 0x0026, 0x0036, 0x0046, 0x3520, 0x20a9, 0x0004, 0x4002,
++      0x4304, 0x4204, 0x4104, 0x4004, 0x8421, 0x1db8, 0x004e, 0x003e,
++      0x002e, 0x001e, 0x0005, 0x81ff, 0x0120, 0x2009, 0x0001, 0x0804,
++      0x308f, 0x60d8, 0xd0ac, 0x1130, 0xd09c, 0x1120, 0x2009, 0x0005,
++      0x0804, 0x308f, 0x7984, 0x78a8, 0x2040, 0x080c, 0x94d3, 0x1120,
++      0x9182, 0x007f, 0x0a04, 0x3092, 0x9186, 0x00ff, 0x0904, 0x3092,
++      0x9182, 0x0800, 0x1a04, 0x3092, 0x7a8c, 0x7b88, 0x6074, 0x9306,
++      0x1140, 0x6078, 0x924e, 0x0904, 0x3092, 0x99cc, 0xff00, 0x0904,
++      0x3092, 0x080c, 0x435a, 0x0538, 0x90c6, 0x4000, 0x1170, 0x00c6,
++      0x0006, 0x900e, 0x080c, 0x5e2d, 0x1108, 0xc185, 0xb800, 0xd0bc,
++      0x0108, 0xc18d, 0x000e, 0x00ce, 0x0098, 0x90c6, 0x4007, 0x1110,
++      0x2408, 0x0070, 0x90c6, 0x4008, 0x1118, 0x2708, 0x2610, 0x0040,
++      0x90c6, 0x4009, 0x1108, 0x0020, 0x2001, 0x4005, 0x2009, 0x000a,
++      0x2020, 0x0804, 0x3061, 0x2b00, 0x7022, 0x0016, 0x00b6, 0x00c6,
++      0x00e6, 0x2c70, 0x080c, 0x95a1, 0x0904, 0x4330, 0x2b00, 0x6012,
++      0x080c, 0xb4e6, 0x2e58, 0x00ee, 0x00e6, 0x00c6, 0x080c, 0x441f,
++      0x00ce, 0x2b70, 0x1150, 0x080c, 0x9554, 0x00ee, 0x00ce, 0x00be,
++      0x001e, 0x2009, 0x0002, 0x0804, 0x308f, 0x900e, 0xa966, 0xa96a,
++      0x2900, 0x6016, 0xa932, 0xa868, 0xc0fd, 0xd88c, 0x0108, 0xc0f5,
++      0xa86a, 0x0126, 0x2091, 0x8000, 0x080c, 0x2d1a, 0x012e, 0x6023,
++      0x0001, 0x9006, 0x080c, 0x5b4d, 0x2001, 0x0002, 0x080c, 0x5b61,
++      0x2009, 0x0002, 0x080c, 0x95ce, 0x78a8, 0xd094, 0x0138, 0x00ee,
++      0x7020, 0x00e6, 0x2058, 0xb8bc, 0xc08d, 0xb8be, 0x9085, 0x0001,
++      0x00ee, 0x00ce, 0x00be, 0x001e, 0x1120, 0x2009, 0x0003, 0x0804,
++      0x308f, 0x7007, 0x0003, 0x701b, 0x433e, 0x0005, 0xa830, 0x9086,
++      0x0100, 0x7020, 0x2058, 0x1138, 0x2009, 0x0004, 0xba04, 0x9294,
++      0x00ff, 0x0804, 0x4d49, 0x900e, 0xa868, 0xd0f4, 0x1904, 0x305f,
++      0x080c, 0x5e2d, 0x1108, 0xc185, 0xb800, 0xd0bc, 0x0108, 0xc18d,
++      0x0804, 0x305f, 0x00e6, 0x00d6, 0x2029, 0x0000, 0x080c, 0x94d3,
++      0x0138, 0x2021, 0x0000, 0x20a9, 0x0800, 0x2071, 0x1000, 0x0030,
++      0x2021, 0x0080, 0x20a9, 0x0780, 0x2071, 0x1080, 0x2e04, 0x9005,
++      0x1130, 0x2100, 0x9406, 0x1550, 0x2428, 0xc5fd, 0x0438, 0x2058,
++      0xbf10, 0x2700, 0x9306, 0x11a0, 0xbe14, 0x2600, 0x9206, 0x1180,
++      0x2400, 0x9106, 0x1150, 0xd884, 0x0550, 0xd894, 0x1540, 0x080c,
++      0x5f2d, 0x1528, 0x2001, 0x4000, 0x0418, 0x2001, 0x4007, 0x0400,
++      0x2400, 0x9106, 0x1158, 0xbe14, 0x87ff, 0x1128, 0x86ff, 0x09e0,
++      0x080c, 0x94d3, 0x19c8, 0x2001, 0x4008, 0x0090, 0x8420, 0x8e70,
++      0x1f04, 0x436e, 0x85ff, 0x1130, 0x2001, 0x4009, 0x0048, 0x2001,
++      0x0001, 0x0030, 0x080c, 0x5bb0, 0x1dd0, 0xbb12, 0xba16, 0x9006,
++      0x9005, 0x00de, 0x00ee, 0x0005, 0x81ff, 0x1904, 0x308f, 0x080c,
++      0x441f, 0x0904, 0x308f, 0xa867, 0x0000, 0xa868, 0xc0fd, 0xa86a,
++      0x7884, 0x9005, 0x0904, 0x3092, 0x9096, 0x00ff, 0x0120, 0x9092,
++      0x0004, 0x1a04, 0x3092, 0x2010, 0x2918, 0x080c, 0x2cc0, 0x0904,
++      0x308f, 0x7007, 0x0003, 0x701b, 0x43d6, 0x0005, 0xa830, 0x9086,
++      0x0100, 0x0904, 0x308f, 0x0804, 0x305f, 0x7984, 0x080c, 0x94d3,
++      0x1120, 0x9182, 0x0080, 0x0a04, 0x3092, 0x9186, 0x00ff, 0x0904,
++      0x3092, 0x9182, 0x0800, 0x1a04, 0x3092, 0x2001, 0x9000, 0x080c,
++      0x4da2, 0x1904, 0x308f, 0x0804, 0x305f, 0xa998, 0x080c, 0x94d3,
++      0x1118, 0x9182, 0x0080, 0x0280, 0x9186, 0x00ff, 0x0168, 0x9182,
++      0x0800, 0x1250, 0x2001, 0x9000, 0x080c, 0x4da2, 0x11a8, 0x0060,
++      0xa897, 0x4005, 0xa99a, 0x0010, 0xa897, 0x4006, 0x900e, 0x9085,
++      0x0001, 0x2001, 0x0030, 0x0005, 0xa897, 0x4000, 0x900e, 0x9085,
++      0x0001, 0x2001, 0x0000, 0x0005, 0x2009, 0x000a, 0x0c48, 0x080c,
++      0x0fae, 0x0198, 0x9006, 0xa802, 0x7010, 0x9005, 0x1120, 0x2900,
++      0x7012, 0x7016, 0x0040, 0x7014, 0xa802, 0x0086, 0x2040, 0x2900,
++      0xa006, 0x7016, 0x008e, 0x9085, 0x0001, 0x0005, 0x7984, 0x080c,
++      0x5c0d, 0x1130, 0x7e88, 0x9684, 0x3fff, 0x9082, 0x4000, 0x0208,
++      0x905e, 0x8bff, 0x0005, 0xa998, 0x080c, 0x5c0d, 0x1130, 0xae9c,
++      0x9684, 0x3fff, 0x9082, 0x4000, 0x0208, 0x905e, 0x8bff, 0x0005,
++      0xae98, 0x0008, 0x7e84, 0x2608, 0x080c, 0x5c0d, 0x1108, 0x0008,
++      0x905e, 0x8bff, 0x0005, 0x0016, 0x7110, 0x81ff, 0x0128, 0x2148,
++      0xa904, 0x080c, 0x0fe0, 0x0cc8, 0x7112, 0x7116, 0x001e, 0x0005,
++      0x2031, 0x0001, 0x0010, 0x2031, 0x0000, 0x2061, 0x18ac, 0x2c44,
++      0xa66a, 0xa17a, 0xa772, 0xa076, 0xa28e, 0xa392, 0xa496, 0xa59a,
++      0x080c, 0x108c, 0x7007, 0x0002, 0x701b, 0x305f, 0x0005, 0x00f6,
++      0x0126, 0x2091, 0x8000, 0x2079, 0x0000, 0x2001, 0x18a4, 0x2004,
++      0x9005, 0x1188, 0x0e04, 0x449b, 0x7a36, 0x7833, 0x0012, 0x7a82,
++      0x7b86, 0x7c8a, 0x2091, 0x4080, 0x2001, 0x0089, 0x2004, 0xd084,
++      0x190c, 0x113e, 0x0408, 0x0016, 0x00c6, 0x00e6, 0x2071, 0x1893,
++      0x7144, 0x9182, 0x0010, 0x0218, 0x7034, 0x2060, 0x0078, 0x7034,
++      0x90e0, 0x0004, 0x9c82, 0x18ee, 0x0210, 0x2061, 0x18ae, 0x2c00,
++      0x7036, 0x81ff, 0x1108, 0x703a, 0x8108, 0x7146, 0x2262, 0x6306,
++      0x640a, 0x00ee, 0x00ce, 0x001e, 0x012e, 0x00fe, 0x0005, 0x00e6,
++      0x2071, 0x1893, 0x7044, 0x9005, 0x0590, 0x0126, 0x2091, 0x8000,
++      0x0e04, 0x44f6, 0x00f6, 0x2079, 0x0000, 0x00c6, 0x7038, 0x2060,
++      0x2c04, 0x7836, 0x7833, 0x0012, 0x7882, 0x6004, 0x7886, 0x6008,
++      0x788a, 0x2091, 0x4080, 0x2001, 0x0089, 0x2004, 0xd084, 0x190c,
++      0x113e, 0x7044, 0x8001, 0x7046, 0x9005, 0x1130, 0x7037, 0x18ae,
++      0x703b, 0x18ae, 0x00ce, 0x0048, 0x9c80, 0x0004, 0x90fa, 0x18ee,
++      0x0210, 0x2001, 0x18ae, 0x703a, 0x00ce, 0x00fe, 0x012e, 0x00ee,
++      0x0005, 0x0026, 0x080c, 0x4dea, 0xd0c4, 0x0120, 0x2011, 0x8014,
++      0x080c, 0x447f, 0x002e, 0x0005, 0x81ff, 0x1904, 0x308f, 0x0126,
++      0x2091, 0x8000, 0x6030, 0xc08d, 0xc085, 0xc0ac, 0x6032, 0x080c,
++      0x6877, 0x1158, 0x080c, 0x6b40, 0x080c, 0x56d9, 0x9085, 0x0001,
++      0x080c, 0x68c0, 0x080c, 0x67be, 0x0010, 0x080c, 0x55a0, 0x012e,
++      0x0804, 0x305f, 0x7884, 0x2008, 0x918c, 0xfffd, 0x1128, 0x61e4,
++      0x910d, 0x61e6, 0x0804, 0x305f, 0x0804, 0x3092, 0x81ff, 0x1904,
++      0x308f, 0x080c, 0x4dfe, 0x1904, 0x308f, 0x080c, 0x5f25, 0x1904,
++      0x308f, 0x080c, 0x2e64, 0x0128, 0x7984, 0x080c, 0x5bb0, 0x1904,
++      0x3092, 0x080c, 0x4452, 0x0904, 0x3092, 0x2b00, 0x7022, 0x080c,
++      0x5f2d, 0x7888, 0x1170, 0x9084, 0x0005, 0x1158, 0x900e, 0x080c,
++      0x5e2d, 0x1108, 0xc185, 0xb800, 0xd0bc, 0x0108, 0xc18d, 0x0804,
++      0x305f, 0x080c, 0x441f, 0x0904, 0x308f, 0x9006, 0xa866, 0xa832,
++      0xa868, 0xc0fd, 0xa86a, 0x080c, 0xb2a8, 0x0904, 0x308f, 0x7888,
++      0xd094, 0x0118, 0xb8bc, 0xc08d, 0xb8be, 0x7007, 0x0003, 0x701b,
++      0x45bd, 0x0005, 0x2061, 0x1800, 0x080c, 0x4dfe, 0x2009, 0x0007,
++      0x1570, 0x080c, 0x5f25, 0x2009, 0x0008, 0x1548, 0x080c, 0x2e64,
++      0x0120, 0xa998, 0x080c, 0x5bb0, 0x1530, 0x080c, 0x4450, 0x0518,
++      0x080c, 0x5f2d, 0xa89c, 0x1168, 0x9084, 0x0005, 0x1150, 0x900e,
++      0x080c, 0x5e2d, 0x1108, 0xc185, 0xb800, 0xd0bc, 0x0108, 0xc18d,
++      0x00d0, 0xa868, 0xc0fc, 0xa86a, 0x080c, 0xb2a8, 0x11e0, 0xa89c,
++      0xd094, 0x0118, 0xb8bc, 0xc08d, 0xb8be, 0x2009, 0x0003, 0xa897,
++      0x4005, 0xa99a, 0x0010, 0xa897, 0x4006, 0x900e, 0x9085, 0x0001,
++      0x2001, 0x0030, 0x0005, 0xa897, 0x4000, 0xa99a, 0x9006, 0x918d,
++      0x0001, 0x2008, 0x0005, 0x9006, 0x0005, 0xa830, 0x9086, 0x0100,
++      0x7020, 0x2058, 0x1110, 0x0804, 0x4d49, 0x900e, 0x080c, 0x5e2d,
++      0x1108, 0xc185, 0xb800, 0xd0bc, 0x0108, 0xc18d, 0x0804, 0x305f,
++      0x080c, 0x4dfe, 0x1904, 0x308f, 0x7f84, 0x7a8c, 0x7b88, 0x7c9c,
++      0x7d98, 0x080c, 0x441f, 0x0904, 0x308f, 0x900e, 0x2130, 0x7122,
++      0x712e, 0xa860, 0x20e8, 0x7032, 0xa85c, 0x9080, 0x0005, 0x7026,
++      0x20a0, 0x080c, 0x5c0d, 0x1904, 0x464d, 0x080c, 0x5f2d, 0x0120,
++      0x080c, 0x5f35, 0x1904, 0x464d, 0x080c, 0x5f25, 0x1130, 0x080c,
++      0x5e2d, 0x1118, 0xd79c, 0x0904, 0x464d, 0xd794, 0x1110, 0xd784,
++      0x01a8, 0xb8b4, 0x20e0, 0xb8b8, 0x9080, 0x0006, 0x2098, 0x3400,
++      0xd794, 0x0160, 0x20a9, 0x0008, 0x4003, 0x2098, 0x20a0, 0x3d00,
++      0x20e0, 0x20a9, 0x0002, 0x080c, 0x4278, 0x0048, 0x20a9, 0x0004,
++      0x4003, 0x2098, 0x20a0, 0x3d00, 0x20e0, 0x080c, 0x4278, 0x4104,
++      0xd794, 0x0528, 0xb8b4, 0x20e0, 0xb8b8, 0x2060, 0x9c80, 0x0000,
++      0x2098, 0x20a9, 0x0002, 0x4003, 0x9c80, 0x0003, 0x2098, 0x20a9,
++      0x0001, 0x4005, 0x9c80, 0x0004, 0x2098, 0x3400, 0x20a9, 0x0002,
++      0x4003, 0x2098, 0x20a0, 0x3d00, 0x20e0, 0x080c, 0x426b, 0x9c80,
++      0x0026, 0x2098, 0xb8b4, 0x20e0, 0x20a9, 0x0002, 0x4003, 0xd794,
++      0x0110, 0x96b0, 0x000b, 0x96b0, 0x0005, 0x8108, 0x080c, 0x94d3,
++      0x0118, 0x9186, 0x0800, 0x0040, 0xd78c, 0x0120, 0x9186, 0x0800,
++      0x0170, 0x0018, 0x9186, 0x007e, 0x0150, 0xd794, 0x0118, 0x9686,
++      0x0020, 0x0010, 0x9686, 0x0028, 0x0150, 0x0804, 0x45e9, 0x86ff,
++      0x1120, 0x7120, 0x810b, 0x0804, 0x305f, 0x702f, 0x0001, 0x711e,
++      0x7020, 0x9600, 0x7022, 0x772a, 0x2061, 0x18ac, 0x2c44, 0xa06b,
++      0x0000, 0xa67a, 0x7030, 0xa072, 0x7024, 0xa076, 0xa28e, 0xa392,
++      0xa496, 0xa59a, 0x080c, 0x108c, 0x7007, 0x0002, 0x701b, 0x4689,
++      0x0005, 0x702c, 0x9005, 0x1180, 0x711c, 0x7024, 0x20a0, 0x7728,
++      0x9036, 0x7030, 0x20e8, 0x2061, 0x18ac, 0x2c44, 0xa28c, 0xa390,
++      0xa494, 0xa598, 0x0804, 0x45e9, 0x7120, 0x810b, 0x0804, 0x305f,
++      0x2029, 0x007e, 0x7984, 0x7a88, 0x7b8c, 0x7c98, 0x9184, 0xff00,
++      0x8007, 0x90e2, 0x0020, 0x0a04, 0x3092, 0x9502, 0x0a04, 0x3092,
++      0x9184, 0x00ff, 0x90e2, 0x0020, 0x0a04, 0x3092, 0x9502, 0x0a04,
++      0x3092, 0x9284, 0xff00, 0x8007, 0x90e2, 0x0020, 0x0a04, 0x3092,
++      0x9502, 0x0a04, 0x3092, 0x9284, 0x00ff, 0x90e2, 0x0020, 0x0a04,
++      0x3092, 0x9502, 0x0a04, 0x3092, 0x9384, 0xff00, 0x8007, 0x90e2,
++      0x0020, 0x0a04, 0x3092, 0x9502, 0x0a04, 0x3092, 0x9384, 0x00ff,
++      0x90e2, 0x0020, 0x0a04, 0x3092, 0x9502, 0x0a04, 0x3092, 0x9484,
++      0xff00, 0x8007, 0x90e2, 0x0020, 0x0a04, 0x3092, 0x9502, 0x0a04,
++      0x3092, 0x9484, 0x00ff, 0x90e2, 0x0020, 0x0a04, 0x3092, 0x9502,
++      0x0a04, 0x3092, 0x2061, 0x1956, 0x6102, 0x6206, 0x630a, 0x640e,
++      0x0804, 0x305f, 0x0006, 0x080c, 0x4dea, 0xd0cc, 0x000e, 0x0005,
++      0x0006, 0x080c, 0x4dee, 0xd0bc, 0x000e, 0x0005, 0x616c, 0x7a84,
++      0x6300, 0x82ff, 0x1118, 0x7986, 0x0804, 0x305f, 0x83ff, 0x1904,
++      0x3092, 0x2001, 0xfff0, 0x9200, 0x1a04, 0x3092, 0x2019, 0xffff,
++      0x6070, 0x9302, 0x9200, 0x0a04, 0x3092, 0x7986, 0x626e, 0x0804,
++      0x305f, 0x080c, 0x4dfe, 0x1904, 0x308f, 0x7c88, 0x7d84, 0x7e98,
++      0x7f8c, 0x080c, 0x441f, 0x0904, 0x308f, 0x900e, 0x901e, 0x7322,
++      0x732e, 0xa860, 0x20e8, 0x7032, 0xa85c, 0x9080, 0x0003, 0x7026,
++      0x20a0, 0x91d8, 0x1000, 0x2b5c, 0x8bff, 0x0178, 0x080c, 0x5f2d,
++      0x0118, 0x080c, 0x5f35, 0x1148, 0x20a9, 0x0001, 0xb814, 0x4004,
++      0xb810, 0x4004, 0x4104, 0x9398, 0x0003, 0x8108, 0x9182, 0x0800,
++      0x0120, 0x9386, 0x003c, 0x0170, 0x0c20, 0x83ff, 0x1148, 0x7220,
++      0x900e, 0x2001, 0x0003, 0x080c, 0x7a4b, 0x2208, 0x0804, 0x305f,
++      0x702f, 0x0001, 0x711e, 0x7020, 0x9300, 0x7022, 0x2061, 0x18ac,
++      0x2c44, 0xa06b, 0x0000, 0xa37a, 0x7024, 0xa076, 0x7030, 0xa072,
++      0xa48e, 0xa592, 0xa696, 0xa79a, 0x080c, 0x108c, 0x7007, 0x0002,
++      0x701b, 0x477b, 0x0005, 0x702c, 0x9005, 0x1178, 0x711c, 0x7024,
++      0x20a0, 0x901e, 0x7030, 0x20e8, 0x2061, 0x18ac, 0x2c44, 0xa48c,
++      0xa590, 0xa694, 0xa798, 0x0804, 0x4739, 0x7220, 0x900e, 0x2001,
++      0x0003, 0x080c, 0x7a4b, 0x2208, 0x0804, 0x305f, 0x00f6, 0x00e6,
++      0x080c, 0x4dfe, 0x2009, 0x0007, 0x1904, 0x480e, 0x2071, 0x1893,
++      0x7458, 0x84ff, 0x2009, 0x000e, 0x1904, 0x480e, 0xac9c, 0xad98,
++      0xaea4, 0xafa0, 0x0096, 0x080c, 0x0fc7, 0x2009, 0x0002, 0x0904,
++      0x480e, 0x2900, 0x705a, 0x900e, 0x901e, 0x7352, 0x735e, 0xa860,
++      0x7062, 0xa85c, 0x9080, 0x0003, 0x7056, 0x20a0, 0x91d8, 0x1000,
++      0x2b5c, 0x8bff, 0x0178, 0x080c, 0x5f2d, 0x0118, 0x080c, 0x5f35,
++      0x1148, 0xb814, 0x20a9, 0x0001, 0x4004, 0xb810, 0x4004, 0x4104,
++      0x9398, 0x0003, 0x8108, 0x9182, 0x0800, 0x0120, 0x9386, 0x003c,
++      0x01e8, 0x0c20, 0x83ff, 0x11c0, 0x7250, 0x900e, 0x2001, 0x0003,
++      0x080c, 0x7a4b, 0x2208, 0x009e, 0xa897, 0x4000, 0xa99a, 0x7158,
++      0x81ff, 0x090c, 0x0d84, 0x2148, 0x080c, 0x0fe0, 0x9006, 0x705a,
++      0x918d, 0x0001, 0x2008, 0x0418, 0x705f, 0x0001, 0x714e, 0x7050,
++      0x9300, 0x7052, 0x2061, 0x18ad, 0x2c44, 0xa37a, 0x7054, 0xa076,
++      0x7060, 0xa072, 0xa48e, 0xa592, 0xa696, 0xa79a, 0xa09f, 0x481a,
++      0x000e, 0xa0a2, 0x080c, 0x108c, 0x9006, 0x0048, 0x009e, 0xa897,
++      0x4005, 0xa99a, 0x900e, 0x9085, 0x0001, 0x2001, 0x0030, 0x00ee,
++      0x00fe, 0x0005, 0x00f6, 0xa0a0, 0x904d, 0x090c, 0x0d84, 0x00e6,
++      0x2071, 0x1893, 0xa06c, 0x908e, 0x0100, 0x0138, 0xa87b, 0x0030,
++      0xa883, 0x0000, 0xa897, 0x4002, 0x00d8, 0x705c, 0x9005, 0x1158,
++      0x714c, 0x7054, 0x20a0, 0x901e, 0x7060, 0x20e8, 0xa48c, 0xa590,
++      0xa694, 0xa798, 0x0428, 0xa87b, 0x0000, 0xa883, 0x0000, 0xa897,
++      0x4000, 0x7250, 0x900e, 0x2001, 0x0003, 0x080c, 0x7a4b, 0xaa9a,
++      0x7158, 0x81ff, 0x090c, 0x0d84, 0x2148, 0x080c, 0x0fe0, 0x705b,
++      0x0000, 0xa0a0, 0x2048, 0x0126, 0x2091, 0x8000, 0x080c, 0x61a9,
++      0x012e, 0xa09f, 0x0000, 0xa0a3, 0x0000, 0x00ee, 0x00fe, 0x0005,
++      0x91d8, 0x1000, 0x2b5c, 0x8bff, 0x0178, 0x080c, 0x5f2d, 0x0118,
++      0x080c, 0x5f35, 0x1148, 0xb814, 0x20a9, 0x0001, 0x4004, 0xb810,
++      0x4004, 0x4104, 0x9398, 0x0003, 0x8108, 0x9182, 0x0800, 0x0120,
++      0x9386, 0x003c, 0x0518, 0x0c20, 0x83ff, 0x11f0, 0x7150, 0x810c,
++      0xa99a, 0xa897, 0x4000, 0x7158, 0x81ff, 0x090c, 0x0d84, 0x2148,
++      0x080c, 0x0fe0, 0x9006, 0x705a, 0x918d, 0x0001, 0x2008, 0xa0a0,
++      0x2048, 0x0126, 0x2091, 0x8000, 0x080c, 0x61a9, 0x012e, 0xa09f,
++      0x0000, 0xa0a3, 0x0000, 0x0070, 0x705f, 0x0001, 0x714e, 0x7050,
++      0x9300, 0x7052, 0xa37a, 0xa48e, 0xa592, 0xa696, 0xa79a, 0x080c,
++      0x108c, 0x9006, 0x00ee, 0x0005, 0x81ff, 0x1904, 0x308f, 0x60d8,
++      0xd0ac, 0x1118, 0xd09c, 0x0904, 0x308f, 0x080c, 0x441f, 0x0904,
++      0x308f, 0x7984, 0x7a8c, 0x7b88, 0x7c9c, 0x7d98, 0xa85c, 0x9080,
++      0x0019, 0xaf60, 0x080c, 0x4468, 0x701b, 0x48c7, 0x0005, 0x0096,
++      0xa88c, 0x90be, 0x7000, 0x0148, 0x90be, 0x7100, 0x0130, 0x90be,
++      0x7200, 0x0118, 0x009e, 0x0804, 0x3092, 0xa884, 0xa988, 0x080c,
++      0x23fd, 0x1500, 0x080c, 0x5bb0, 0x11e8, 0x7122, 0xbe12, 0xbd16,
++      0xae7c, 0x080c, 0x441f, 0x01b0, 0x080c, 0x441f, 0x0198, 0x009e,
++      0xa867, 0x0000, 0xa868, 0xc0fd, 0xa86a, 0xa887, 0x0000, 0xa804,
++      0x2048, 0x080c, 0xb239, 0x0904, 0x308f, 0x7007, 0x0003, 0x701b,
++      0x48fd, 0x0005, 0x009e, 0x0804, 0x308f, 0x7120, 0x080c, 0x2e11,
++      0xa884, 0x9086, 0x8001, 0x0904, 0x308f, 0x2900, 0x701e, 0xa804,
++      0x2040, 0x0086, 0xa05c, 0x9080, 0x0002, 0x2098, 0x20a0, 0xa060,
++      0x20e0, 0x20e8, 0x20a9, 0x002a, 0x080c, 0x0f2b, 0xaa6c, 0xab70,
++      0xac74, 0xad78, 0x2061, 0x18ac, 0x2c44, 0xa06b, 0x0000, 0xae64,
++      0xaf8c, 0x97c6, 0x7000, 0x1108, 0x0018, 0x97c6, 0x7100, 0x1190,
++      0x96c2, 0x0004, 0x0a04, 0x3092, 0x2009, 0x0004, 0x009e, 0x8906,
++      0x8006, 0x8007, 0x90bc, 0x003f, 0x9084, 0xffc0, 0x9080, 0x0002,
++      0x0804, 0x446b, 0x97c6, 0x7200, 0x1904, 0x3092, 0x96c2, 0x0054,
++      0x0a04, 0x3092, 0x009e, 0x2061, 0x18ac, 0x2c44, 0x8906, 0x8006,
++      0x8007, 0x90bc, 0x003f, 0x9084, 0xffc0, 0x9080, 0x0002, 0xa076,
++      0xa772, 0xa07b, 0x002a, 0xa28e, 0xa392, 0xa496, 0xa59a, 0x080c,
++      0x108c, 0x7007, 0x0002, 0x701b, 0x495e, 0x0005, 0x701c, 0x2048,
++      0xa804, 0x2048, 0xa804, 0x2048, 0x8906, 0x8006, 0x8007, 0x90bc,
++      0x003f, 0x9084, 0xffc0, 0x9080, 0x0002, 0x2098, 0x20a0, 0x27e0,
++      0x27e8, 0x20a9, 0x002a, 0x080c, 0x0f2b, 0x2100, 0x2238, 0x2061,
++      0x18ac, 0x2c44, 0xa28c, 0xa390, 0xa494, 0xa598, 0x2009, 0x002a,
++      0x0804, 0x446b, 0x81ff, 0x1904, 0x308f, 0x798c, 0x2001, 0x194d,
++      0x2102, 0x080c, 0x4436, 0x0904, 0x3092, 0x080c, 0x5cd4, 0x0904,
++      0x308f, 0x0126, 0x2091, 0x8000, 0x080c, 0x5d9a, 0x012e, 0x0904,
++      0x308f, 0x0804, 0x3fc8, 0xa9a0, 0x2001, 0x194d, 0xc18d, 0x2102,
++      0x080c, 0x4443, 0x0170, 0x080c, 0x5cd4, 0x2009, 0x0002, 0x0128,
++      0x080c, 0x5d9a, 0x1170, 0x2009, 0x0003, 0xa897, 0x4005, 0xa99a,
++      0x0010, 0xa897, 0x4006, 0x900e, 0x9085, 0x0001, 0x2001, 0x0030,
++      0x0005, 0xa897, 0x4000, 0x080c, 0x4df2, 0x0110, 0x9006, 0x0018,
++      0x900e, 0x9085, 0x0001, 0x2001, 0x0000, 0x0005, 0x78a8, 0xd08c,
++      0x1118, 0xd084, 0x0904, 0x3f3d, 0x080c, 0x4452, 0x0904, 0x3092,
++      0x080c, 0x441f, 0x1120, 0x2009, 0x0002, 0x0804, 0x308f, 0x080c,
++      0x5f2d, 0x0130, 0x908e, 0x0004, 0x0118, 0x908e, 0x0005, 0x15a0,
++      0x78a8, 0xd08c, 0x0120, 0xb800, 0xc08c, 0xb802, 0x0028, 0x080c,
++      0x4dea, 0xd0b4, 0x0904, 0x3f77, 0x7884, 0x908e, 0x007e, 0x0904,
++      0x3f77, 0x908e, 0x007f, 0x0904, 0x3f77, 0x908e, 0x0080, 0x0904,
++      0x3f77, 0xb800, 0xd08c, 0x1904, 0x3f77, 0xa867, 0x0000, 0xa868,
++      0xc0fd, 0xa86a, 0x080c, 0xb258, 0x1120, 0x2009, 0x0003, 0x0804,
++      0x308f, 0x7007, 0x0003, 0x701b, 0x4a0e, 0x0005, 0x080c, 0x4452,
++      0x0904, 0x3092, 0x0804, 0x3f77, 0x080c, 0x2e64, 0x0108, 0x0005,
++      0x2009, 0x1833, 0x210c, 0x81ff, 0x0120, 0x2009, 0x0001, 0x0804,
++      0x308f, 0x080c, 0x4dfe, 0x0120, 0x2009, 0x0007, 0x0804, 0x308f,
++      0x080c, 0x5f25, 0x0120, 0x2009, 0x0008, 0x0804, 0x308f, 0xb89c,
++      0xd0a4, 0x1118, 0xd0ac, 0x1904, 0x3f77, 0x9006, 0xa866, 0xa832,
++      0xa868, 0xc0fd, 0xa86a, 0x080c, 0xb2a8, 0x1120, 0x2009, 0x0003,
++      0x0804, 0x308f, 0x7007, 0x0003, 0x701b, 0x4a47, 0x0005, 0xa830,
++      0x9086, 0x0100, 0x1120, 0x2009, 0x0004, 0x0804, 0x4d49, 0x080c,
++      0x4452, 0x0904, 0x3092, 0x0804, 0x49e0, 0x81ff, 0x2009, 0x0001,
++      0x1904, 0x308f, 0x080c, 0x4dfe, 0x2009, 0x0007, 0x1904, 0x308f,
++      0x080c, 0x5f25, 0x2009, 0x0008, 0x1904, 0x308f, 0x080c, 0x4452,
++      0x0904, 0x3092, 0x080c, 0x5f2d, 0x2009, 0x0009, 0x1904, 0x308f,
++      0x080c, 0x441f, 0x2009, 0x0002, 0x0904, 0x308f, 0x9006, 0xa866,
++      0xa832, 0xa868, 0xc0fd, 0xa86a, 0x7988, 0x9194, 0xff00, 0x918c,
++      0x00ff, 0x9006, 0x82ff, 0x1128, 0xc0ed, 0xa952, 0x798c, 0xa956,
++      0x0038, 0x928e, 0x0100, 0x1904, 0x3092, 0xc0e5, 0xa952, 0xa956,
++      0xa83e, 0x080c, 0xb4e7, 0x2009, 0x0003, 0x0904, 0x308f, 0x7007,
++      0x0003, 0x701b, 0x4a9c, 0x0005, 0xa830, 0x9086, 0x0100, 0x2009,
++      0x0004, 0x0904, 0x308f, 0x0804, 0x305f, 0x7aa8, 0x9284, 0xc000,
++      0x0148, 0xd2ec, 0x01a0, 0x080c, 0x4dfe, 0x1188, 0x2009, 0x0014,
++      0x0804, 0x308f, 0xd2dc, 0x1568, 0x81ff, 0x2009, 0x0001, 0x1904,
++      0x308f, 0x080c, 0x4dfe, 0x2009, 0x0007, 0x1904, 0x308f, 0xd2f4,
++      0x0130, 0x9284, 0x5000, 0x080c, 0x4dc5, 0x0804, 0x305f, 0xd2fc,
++      0x0158, 0x080c, 0x4452, 0x0904, 0x3092, 0x7984, 0x9284, 0x9000,
++      0x080c, 0x4da2, 0x0804, 0x305f, 0x080c, 0x4452, 0x0904, 0x3092,
++      0xb804, 0x9084, 0x00ff, 0x9086, 0x0006, 0x2009, 0x0009, 0x1904,
++      0x4b85, 0x080c, 0x441f, 0x2009, 0x0002, 0x0904, 0x4b85, 0xa85c,
++      0x9080, 0x001b, 0xaf60, 0x2009, 0x0008, 0x7a8c, 0x7b88, 0x7c9c,
++      0x7d98, 0x080c, 0x4468, 0x701b, 0x4af6, 0x0005, 0xa86c, 0x9086,
++      0x0500, 0x1138, 0xa870, 0x9005, 0x1120, 0xa874, 0x9084, 0xff00,
++      0x0110, 0x1904, 0x3092, 0xa866, 0xa832, 0xa868, 0xc0fd, 0xa86a,
++      0x080c, 0x4452, 0x1110, 0x0804, 0x3092, 0x2009, 0x0043, 0x080c,
++      0xb54f, 0x2009, 0x0003, 0x0904, 0x4b85, 0x7007, 0x0003, 0x701b,
++      0x4b1a, 0x0005, 0xa830, 0x9086, 0x0100, 0x2009, 0x0004, 0x0904,
++      0x4b85, 0x7984, 0x7aa8, 0x9284, 0x1000, 0x080c, 0x4da2, 0x0804,
++      0x305f, 0x00c6, 0xaab0, 0x9284, 0xc000, 0x0140, 0xd2ec, 0x0168,
++      0x080c, 0x4dfe, 0x1150, 0x2009, 0x0014, 0x04f0, 0x2061, 0x1800,
++      0x080c, 0x4dfe, 0x2009, 0x0007, 0x15b8, 0xd2f4, 0x0128, 0x9284,
++      0x5000, 0x080c, 0x4dc5, 0x0050, 0xd2fc, 0x0178, 0x080c, 0x4450,
++      0x0588, 0xa998, 0x9284, 0x9000, 0x080c, 0x4da2, 0xa87b, 0x0000,
++      0xa883, 0x0000, 0xa897, 0x4000, 0x0438, 0x080c, 0x4450, 0x0510,
++      0x080c, 0x5f2d, 0x2009, 0x0009, 0x11b8, 0xa8c4, 0x9086, 0x0500,
++      0x11c8, 0xa8c8, 0x9005, 0x11b0, 0xa8cc, 0x9084, 0xff00, 0x1190,
++      0x080c, 0x4450, 0x1108, 0x0070, 0x2009, 0x004b, 0x080c, 0xb54f,
++      0x2009, 0x0003, 0x0108, 0x0078, 0x0429, 0x19c0, 0xa897, 0x4005,
++      0xa99a, 0x0010, 0xa897, 0x4006, 0x900e, 0x9085, 0x0001, 0x2001,
++      0x0030, 0x00ce, 0x0005, 0x9006, 0x0ce0, 0x7aa8, 0xd2dc, 0x0904,
++      0x308f, 0x0016, 0x7984, 0x9284, 0x1000, 0xc0fd, 0x080c, 0x4da2,
++      0x001e, 0x1904, 0x308f, 0x0804, 0x305f, 0x00f6, 0x2d78, 0x0011,
++      0x00fe, 0x0005, 0xaab0, 0xd2dc, 0x0150, 0x0016, 0xa998, 0x9284,
++      0x1000, 0xc0fd, 0x080c, 0x4da2, 0x001e, 0x9085, 0x0001, 0x0005,
++      0x81ff, 0x0120, 0x2009, 0x0001, 0x0804, 0x308f, 0x080c, 0x4dfe,
++      0x0120, 0x2009, 0x0007, 0x0804, 0x308f, 0x7984, 0x7ea8, 0x96b4,
++      0x00ff, 0x080c, 0x5c0d, 0x1904, 0x3092, 0x9186, 0x007f, 0x0138,
++      0x080c, 0x5f2d, 0x0120, 0x2009, 0x0009, 0x0804, 0x308f, 0x080c,
++      0x441f, 0x1120, 0x2009, 0x0002, 0x0804, 0x308f, 0xa867, 0x0000,
++      0xa868, 0xc0fd, 0xa86a, 0x2001, 0x0100, 0x8007, 0xa80a, 0x080c,
++      0xb272, 0x1120, 0x2009, 0x0003, 0x0804, 0x308f, 0x7007, 0x0003,
++      0x701b, 0x4be3, 0x0005, 0xa808, 0x8007, 0x9086, 0x0100, 0x1120,
++      0x2009, 0x0004, 0x0804, 0x308f, 0xa8e0, 0xa866, 0xa810, 0x8007,
++      0x9084, 0x00ff, 0x800c, 0xa814, 0x8007, 0x9084, 0x00ff, 0x8004,
++      0x9080, 0x0002, 0x9108, 0x8906, 0x8006, 0x8007, 0x90bc, 0x003f,
++      0x9084, 0xffc0, 0x9080, 0x0004, 0x7a8c, 0x7b88, 0x7c9c, 0x7d98,
++      0x0804, 0x446b, 0x080c, 0x441f, 0x1120, 0x2009, 0x0002, 0x0804,
++      0x308f, 0x7984, 0x9194, 0xff00, 0x918c, 0x00ff, 0x8217, 0x82ff,
++      0x1118, 0x701f, 0x1980, 0x0040, 0x92c6, 0x0001, 0x1118, 0x701f,
++      0x199a, 0x0010, 0x0804, 0x3092, 0x2009, 0x001a, 0x7a8c, 0x7b88,
++      0x7c9c, 0x7d98, 0xa85c, 0x9080, 0x0019, 0xaf60, 0x080c, 0x4468,
++      0x701b, 0x4c33, 0x0005, 0x2001, 0x182c, 0x2003, 0x0001, 0xa85c,
++      0x9080, 0x0019, 0x2098, 0xa860, 0x20e0, 0x20a9, 0x001a, 0x701c,
++      0x20a0, 0x20e9, 0x0001, 0x4003, 0x0804, 0x305f, 0x080c, 0x441f,
++      0x1120, 0x2009, 0x0002, 0x0804, 0x308f, 0x7984, 0x9194, 0xff00,
++      0x918c, 0x00ff, 0x8217, 0x82ff, 0x1118, 0x2099, 0x1980, 0x0040,
++      0x92c6, 0x0001, 0x1118, 0x2099, 0x199a, 0x0010, 0x0804, 0x3092,
++      0xa85c, 0x9080, 0x0019, 0x20a0, 0xa860, 0x20e8, 0x20a9, 0x001a,
++      0x20e1, 0x0001, 0x4003, 0x2009, 0x001a, 0x7a8c, 0x7b88, 0x7c9c,
++      0x7d98, 0xa85c, 0x9080, 0x0019, 0xaf60, 0x0804, 0x446b, 0x7884,
++      0x908a, 0x1000, 0x1a04, 0x3092, 0x0126, 0x2091, 0x8000, 0x8003,
++      0x800b, 0x810b, 0x9108, 0x00c6, 0x2061, 0x19c7, 0x6146, 0x00ce,
++      0x012e, 0x0804, 0x305f, 0x00c6, 0x080c, 0x6877, 0x1160, 0x080c,
++      0x6b40, 0x080c, 0x56d9, 0x9085, 0x0001, 0x080c, 0x68c0, 0x080c,
++      0x67be, 0x080c, 0x0d84, 0x2061, 0x1800, 0x6030, 0xc09d, 0x6032,
++      0x080c, 0x55a0, 0x00ce, 0x0005, 0x00c6, 0x2001, 0x1800, 0x2004,
++      0x908e, 0x0000, 0x0904, 0x308f, 0x7884, 0x9005, 0x0188, 0x7888,
++      0x2061, 0x1969, 0x2c0c, 0x2062, 0x080c, 0x27d7, 0x01a0, 0x080c,
++      0x27df, 0x0188, 0x080c, 0x27e7, 0x0170, 0x2162, 0x0804, 0x3092,
++      0x2061, 0x0100, 0x6038, 0x9086, 0x0007, 0x1118, 0x2009, 0x0001,
++      0x0010, 0x2009, 0x0000, 0x7884, 0x9086, 0x0002, 0x1548, 0x2061,
++      0x0100, 0x6028, 0xc09c, 0x602a, 0x0026, 0x2011, 0x0003, 0x080c,
++      0x8e99, 0x2011, 0x0002, 0x080c, 0x8ea3, 0x002e, 0x080c, 0x8d59,
++      0x0036, 0x901e, 0x080c, 0x8dfe, 0x003e, 0x60e3, 0x0000, 0x080c,
++      0xcd0a, 0x080c, 0xcd25, 0x9085, 0x0001, 0x080c, 0x68c0, 0x9006,
++      0x080c, 0x28a5, 0x2001, 0x1800, 0x2003, 0x0004, 0x6027, 0x0008,
++      0x00ce, 0x0804, 0x305f, 0x81ff, 0x0120, 0x2009, 0x0001, 0x0804,
++      0x308f, 0x080c, 0x4dfe, 0x0120, 0x2009, 0x0007, 0x0804, 0x308f,
++      0x7984, 0x7ea8, 0x96b4, 0x00ff, 0x080c, 0x5c0d, 0x1904, 0x3092,
++      0x9186, 0x007f, 0x0138, 0x080c, 0x5f2d, 0x0120, 0x2009, 0x0009,
++      0x0804, 0x308f, 0x080c, 0x441f, 0x1120, 0x2009, 0x0002, 0x0804,
++      0x308f, 0xa867, 0x0000, 0xa868, 0xc0fd, 0xa86a, 0x080c, 0xb275,
++      0x1120, 0x2009, 0x0003, 0x0804, 0x308f, 0x7007, 0x0003, 0x701b,
++      0x4d32, 0x0005, 0xa830, 0x9086, 0x0100, 0x1120, 0x2009, 0x0004,
++      0x0804, 0x308f, 0xa8e0, 0xa866, 0xa834, 0x8007, 0x800c, 0xa85c,
++      0x9080, 0x000c, 0x7a8c, 0x7b88, 0x7c9c, 0x7d98, 0xaf60, 0x0804,
++      0x446b, 0xa898, 0x9086, 0x000d, 0x1904, 0x308f, 0x2021, 0x4005,
++      0x0126, 0x2091, 0x8000, 0x0e04, 0x4d56, 0x0010, 0x012e, 0x0cc0,
++      0x7c36, 0x9486, 0x4000, 0x0118, 0x7833, 0x0011, 0x0010, 0x7833,
++      0x0010, 0x7883, 0x4005, 0xa998, 0x7986, 0xa9a4, 0x799a, 0xa9a8,
++      0x799e, 0x080c, 0x445b, 0x2091, 0x4080, 0x2001, 0x0089, 0x2004,
++      0xd084, 0x190c, 0x113e, 0x7007, 0x0001, 0x2091, 0x5000, 0x012e,
++      0x0005, 0x0126, 0x2091, 0x8000, 0x00c6, 0x2061, 0x19c7, 0x7984,
++      0x6156, 0x6152, 0x605b, 0x0000, 0x604f, 0x0009, 0x7898, 0x606e,
++      0x789c, 0x606a, 0x7888, 0x6066, 0x788c, 0x6062, 0x2001, 0x19d5,
++      0x2044, 0x2001, 0x19dd, 0xa076, 0xa060, 0xa072, 0xa07b, 0x0001,
++      0xa07f, 0x0002, 0xa06b, 0x0000, 0xa09f, 0x0000, 0x00ce, 0x012e,
++      0x0804, 0x305f, 0x0126, 0x2091, 0x8000, 0x00b6, 0x00c6, 0x90e4,
++      0xc000, 0x0128, 0x0006, 0x080c, 0xb0e3, 0x000e, 0x1198, 0xd0e4,
++      0x0160, 0x9180, 0x1000, 0x2004, 0x905d, 0x0160, 0x080c, 0x56f3,
++      0x080c, 0x94d3, 0x0110, 0xb817, 0x0000, 0x9006, 0x00ce, 0x00be,
++      0x012e, 0x0005, 0x9085, 0x0001, 0x0cc8, 0x0126, 0x2091, 0x8000,
++      0x0156, 0x2010, 0x900e, 0x20a9, 0x0800, 0x0016, 0x9180, 0x1000,
++      0x2004, 0x9005, 0x0180, 0x9186, 0x007e, 0x0168, 0x9186, 0x007f,
++      0x0150, 0x9186, 0x0080, 0x0138, 0x9186, 0x00ff, 0x0120, 0x0026,
++      0x2200, 0x0801, 0x002e, 0x001e, 0x8108, 0x1f04, 0x4dcd, 0x015e,
++      0x012e, 0x0005, 0x2001, 0x1853, 0x2004, 0x0005, 0x2001, 0x1872,
++      0x2004, 0x0005, 0x0006, 0x2001, 0x180f, 0x2004, 0xd0d4, 0x000e,
++      0x0005, 0x2001, 0x180d, 0x2004, 0xd0b4, 0x0005, 0x2001, 0x1800,
++      0x2004, 0x9086, 0x0003, 0x0005, 0x0126, 0x0156, 0x0136, 0x0146,
++      0x01c6, 0x01d6, 0x00c6, 0x00d6, 0x00e6, 0x00f6, 0x2061, 0x0100,
++      0x2069, 0x0200, 0x2071, 0x1800, 0x6044, 0xd0a4, 0x11e8, 0xd084,
++      0x0118, 0x080c, 0x4fa3, 0x0068, 0xd08c, 0x0118, 0x080c, 0x4eb6,
++      0x0040, 0xd094, 0x0118, 0x080c, 0x4e86, 0x0018, 0xd09c, 0x0108,
++      0x0099, 0x00fe, 0x00ee, 0x00de, 0x00ce, 0x01de, 0x01ce, 0x014e,
++      0x013e, 0x015e, 0x012e, 0x0005, 0x0016, 0x6128, 0xd19c, 0x1110,
++      0xc19d, 0x612a, 0x001e, 0x0c68, 0x0006, 0x7090, 0x9005, 0x000e,
++      0x0120, 0x7093, 0x0000, 0x708b, 0x0000, 0x624c, 0x9286, 0xf0f0,
++      0x1150, 0x6048, 0x9086, 0xf0f0, 0x0130, 0x624a, 0x6043, 0x0090,
++      0x6043, 0x0010, 0x0490, 0x9294, 0xff00, 0x9296, 0xf700, 0x0178,
++      0x7134, 0xd1a4, 0x1160, 0x6240, 0x9295, 0x0100, 0x6242, 0x9294,
++      0x0010, 0x0128, 0x2009, 0x00f7, 0x080c, 0x5660, 0x00f0, 0x6040,
++      0x9084, 0x0010, 0x9085, 0x0140, 0x6042, 0x6043, 0x0000, 0x707f,
++      0x0000, 0x709b, 0x0001, 0x70c3, 0x0000, 0x70db, 0x0000, 0x2009,
++      0x1c80, 0x200b, 0x0000, 0x708f, 0x0000, 0x7083, 0x000f, 0x2009,
++      0x000f, 0x2011, 0x5546, 0x080c, 0x78a5, 0x0005, 0x2001, 0x1874,
++      0x2004, 0xd08c, 0x0110, 0x7057, 0xffff, 0x7080, 0x9005, 0x1528,
++      0x2011, 0x5546, 0x080c, 0x781a, 0x6040, 0x9094, 0x0010, 0x9285,
++      0x0020, 0x6042, 0x20a9, 0x00c8, 0x6044, 0xd08c, 0x1168, 0x1f04,
++      0x4e9c, 0x6242, 0x7093, 0x0000, 0x6040, 0x9094, 0x0010, 0x9285,
++      0x0080, 0x6042, 0x6242, 0x0048, 0x6242, 0x7093, 0x0000, 0x7087,
++      0x0000, 0x9006, 0x080c, 0x56de, 0x0000, 0x0005, 0x7084, 0x908a,
++      0x0003, 0x1a0c, 0x0d84, 0x000b, 0x0005, 0x4ec0, 0x4f07, 0x4fa2,
++      0x00f6, 0x7087, 0x0001, 0x6803, 0x00fc, 0x20a9, 0x0004, 0x6800,
++      0x9084, 0x00fc, 0x0120, 0x1f04, 0x4ec7, 0x080c, 0x0d84, 0x68a0,
++      0x68a2, 0x689c, 0x689e, 0x6898, 0x689a, 0xa001, 0x6803, 0x1600,
++      0x6837, 0x0020, 0x080c, 0x56ba, 0x2079, 0x1c00, 0x7833, 0x1101,
++      0x7837, 0x0000, 0x20e1, 0x0001, 0x2099, 0x1805, 0x20e9, 0x0001,
++      0x20a1, 0x1c0e, 0x20a9, 0x0004, 0x4003, 0x080c, 0x9363, 0x20e1,
++      0x0001, 0x2099, 0x1c00, 0x20e9, 0x0000, 0x20a1, 0x0240, 0x20a9,
++      0x0014, 0x4003, 0x60c3, 0x000c, 0x600f, 0x0000, 0x080c, 0x557c,
++      0x00fe, 0x9006, 0x708a, 0x6043, 0x0008, 0x6042, 0x0005, 0x00f6,
++      0x7088, 0x708b, 0x0000, 0x9025, 0x0904, 0x4f7f, 0x6020, 0xd0b4,
++      0x1904, 0x4f7d, 0x7198, 0x81ff, 0x0904, 0x4f6b, 0x9486, 0x000c,
++      0x1904, 0x4f78, 0x9480, 0x0018, 0x8004, 0x20a8, 0x080c, 0x56b3,
++      0x2011, 0x0260, 0x2019, 0x1c00, 0x220c, 0x2304, 0x9106, 0x11e8,
++      0x8210, 0x8318, 0x1f04, 0x4f24, 0x6043, 0x0004, 0x2061, 0x0140,
++      0x605b, 0xbc94, 0x605f, 0xf0f0, 0x2061, 0x0100, 0x6043, 0x0006,
++      0x7087, 0x0002, 0x7093, 0x0002, 0x2009, 0x07d0, 0x2011, 0x554d,
++      0x080c, 0x78a5, 0x080c, 0x56ba, 0x04c0, 0x080c, 0x56b3, 0x2079,
++      0x0260, 0x7930, 0x918e, 0x1101, 0x1558, 0x7834, 0x9005, 0x1540,
++      0x7900, 0x918c, 0x00ff, 0x1118, 0x7804, 0x9005, 0x0190, 0x080c,
++      0x56b3, 0x2011, 0x026e, 0x2019, 0x1805, 0x20a9, 0x0004, 0x220c,
++      0x2304, 0x9102, 0x0230, 0x11a0, 0x8210, 0x8318, 0x1f04, 0x4f5f,
++      0x0078, 0x709b, 0x0000, 0x080c, 0x56b3, 0x20e1, 0x0000, 0x2099,
++      0x0260, 0x20e9, 0x0001, 0x20a1, 0x1c00, 0x20a9, 0x0014, 0x4003,
++      0x6043, 0x0008, 0x6043, 0x0000, 0x0010, 0x00fe, 0x0005, 0x6040,
++      0x9085, 0x0100, 0x6042, 0x6020, 0xd0b4, 0x1db8, 0x080c, 0x9363,
++      0x20e1, 0x0001, 0x2099, 0x1c00, 0x20e9, 0x0000, 0x20a1, 0x0240,
++      0x20a9, 0x0014, 0x4003, 0x60c3, 0x000c, 0x2011, 0x19be, 0x2013,
++      0x0000, 0x708b, 0x0000, 0x60a3, 0x0056, 0x60a7, 0x9575, 0x080c,
++      0x8b47, 0x08d8, 0x0005, 0x7090, 0x908a, 0x001d, 0x1a0c, 0x0d84,
++      0x000b, 0x0005, 0x4fd4, 0x4fe7, 0x5010, 0x5030, 0x5056, 0x5085,
++      0x50ab, 0x50e3, 0x5109, 0x5137, 0x5172, 0x51aa, 0x51c8, 0x51f3,
++      0x5215, 0x5230, 0x523a, 0x526e, 0x5294, 0x52c3, 0x52e9, 0x5321,
++      0x5365, 0x53a2, 0x53c3, 0x541c, 0x543e, 0x546c, 0x546c, 0x00c6,
++      0x2061, 0x1800, 0x6003, 0x0007, 0x2061, 0x0100, 0x6004, 0x9084,
++      0xfff9, 0x6006, 0x00ce, 0x0005, 0x2061, 0x0140, 0x605b, 0xbc94,
++      0x605f, 0xf0f0, 0x2061, 0x0100, 0x6043, 0x0002, 0x7093, 0x0001,
++      0x2009, 0x07d0, 0x2011, 0x554d, 0x080c, 0x78a5, 0x0005, 0x00f6,
++      0x7088, 0x9086, 0x0014, 0x1510, 0x6042, 0x6020, 0xd0b4, 0x11f0,
++      0x080c, 0x56b3, 0x2079, 0x0260, 0x7a30, 0x9296, 0x1102, 0x11a0,
++      0x7834, 0x9005, 0x1188, 0x7a38, 0xd2fc, 0x0128, 0x70c0, 0x9005,
++      0x1110, 0x70c3, 0x0001, 0x2011, 0x554d, 0x080c, 0x781a, 0x7093,
++      0x0010, 0x080c, 0x523a, 0x0010, 0x708b, 0x0000, 0x00fe, 0x0005,
++      0x00f6, 0x7093, 0x0003, 0x6043, 0x0004, 0x2011, 0x554d, 0x080c,
++      0x781a, 0x080c, 0x5642, 0x2079, 0x0240, 0x7833, 0x1102, 0x7837,
++      0x0000, 0x20a9, 0x0008, 0x9f88, 0x000e, 0x200b, 0x0000, 0x8108,
++      0x1f04, 0x5025, 0x60c3, 0x0014, 0x080c, 0x557c, 0x00fe, 0x0005,
++      0x00f6, 0x7088, 0x9005, 0x0500, 0x2011, 0x554d, 0x080c, 0x781a,
++      0x9086, 0x0014, 0x11b8, 0x080c, 0x56b3, 0x2079, 0x0260, 0x7a30,
++      0x9296, 0x1102, 0x1178, 0x7834, 0x9005, 0x1160, 0x7a38, 0xd2fc,
++      0x0128, 0x70c0, 0x9005, 0x1110, 0x70c3, 0x0001, 0x7093, 0x0004,
++      0x0029, 0x0010, 0x080c, 0x568f, 0x00fe, 0x0005, 0x00f6, 0x7093,
++      0x0005, 0x080c, 0x5642, 0x2079, 0x0240, 0x7833, 0x1103, 0x7837,
++      0x0000, 0x080c, 0x56b3, 0x080c, 0x5696, 0x1170, 0x707c, 0x9005,
++      0x1158, 0x7154, 0x9186, 0xffff, 0x0138, 0x2011, 0x0008, 0x080c,
++      0x54fa, 0x0168, 0x080c, 0x5677, 0x20a9, 0x0008, 0x20e1, 0x0000,
++      0x2099, 0x026e, 0x20e9, 0x0000, 0x20a1, 0x024e, 0x4003, 0x60c3,
++      0x0014, 0x080c, 0x557c, 0x00fe, 0x0005, 0x00f6, 0x7088, 0x9005,
++      0x0500, 0x2011, 0x554d, 0x080c, 0x781a, 0x9086, 0x0014, 0x11b8,
++      0x080c, 0x56b3, 0x2079, 0x0260, 0x7a30, 0x9296, 0x1103, 0x1178,
++      0x7834, 0x9005, 0x1160, 0x7a38, 0xd2fc, 0x0128, 0x70c0, 0x9005,
++      0x1110, 0x70c3, 0x0001, 0x7093, 0x0006, 0x0029, 0x0010, 0x080c,
++      0x568f, 0x00fe, 0x0005, 0x00f6, 0x7093, 0x0007, 0x080c, 0x5642,
++      0x2079, 0x0240, 0x7833, 0x1104, 0x7837, 0x0000, 0x080c, 0x56b3,
++      0x080c, 0x5696, 0x11b8, 0x707c, 0x9005, 0x11a0, 0x715c, 0x9186,
++      0xffff, 0x0180, 0x9180, 0x2e6e, 0x200d, 0x918c, 0xff00, 0x810f,
++      0x2011, 0x0008, 0x080c, 0x54fa, 0x0180, 0x080c, 0x4700, 0x0110,
++      0x080c, 0x2466, 0x20a9, 0x0008, 0x20e1, 0x0000, 0x2099, 0x026e,
++      0x20e9, 0x0000, 0x20a1, 0x024e, 0x4003, 0x60c3, 0x0014, 0x080c,
++      0x557c, 0x00fe, 0x0005, 0x00f6, 0x7088, 0x9005, 0x0500, 0x2011,
++      0x554d, 0x080c, 0x781a, 0x9086, 0x0014, 0x11b8, 0x080c, 0x56b3,
++      0x2079, 0x0260, 0x7a30, 0x9296, 0x1104, 0x1178, 0x7834, 0x9005,
++      0x1160, 0x7a38, 0xd2fc, 0x0128, 0x70c0, 0x9005, 0x1110, 0x70c3,
++      0x0001, 0x7093, 0x0008, 0x0029, 0x0010, 0x080c, 0x568f, 0x00fe,
++      0x0005, 0x00f6, 0x7093, 0x0009, 0x080c, 0x5642, 0x2079, 0x0240,
++      0x7833, 0x1105, 0x7837, 0x0100, 0x080c, 0x5696, 0x1150, 0x707c,
++      0x9005, 0x1138, 0x080c, 0x546d, 0x1188, 0x9085, 0x0001, 0x080c,
++      0x2466, 0x20a9, 0x0008, 0x080c, 0x56b3, 0x20e1, 0x0000, 0x2099,
++      0x026e, 0x20e9, 0x0000, 0x20a1, 0x024e, 0x4003, 0x60c3, 0x0014,
++      0x080c, 0x557c, 0x0010, 0x080c, 0x4fc7, 0x00fe, 0x0005, 0x00f6,
++      0x7088, 0x9005, 0x05a8, 0x2011, 0x554d, 0x080c, 0x781a, 0x9086,
++      0x0014, 0x1560, 0x080c, 0x56b3, 0x2079, 0x0260, 0x7a30, 0x9296,
++      0x1105, 0x1520, 0x7834, 0x9084, 0x0100, 0x2011, 0x0100, 0x921e,
++      0x1160, 0x7a38, 0xd2fc, 0x0128, 0x70c0, 0x9005, 0x1110, 0x70c3,
++      0x0001, 0x7093, 0x000a, 0x00b1, 0x0098, 0x9005, 0x1178, 0x7a38,
++      0xd2fc, 0x0128, 0x70c0, 0x9005, 0x1110, 0x70c3, 0x0001, 0x708f,
++      0x0000, 0x7093, 0x000e, 0x080c, 0x5215, 0x0010, 0x080c, 0x568f,
++      0x00fe, 0x0005, 0x00f6, 0x7093, 0x000b, 0x2011, 0x1c0e, 0x20e9,
++      0x0001, 0x22a0, 0x20a9, 0x0040, 0x2019, 0xffff, 0x4304, 0x080c,
++      0x5642, 0x2079, 0x0240, 0x7833, 0x1106, 0x7837, 0x0000, 0x080c,
++      0x5696, 0x0118, 0x2013, 0x0000, 0x0020, 0x7058, 0x9085, 0x0100,
++      0x2012, 0x20a9, 0x0040, 0x2009, 0x024e, 0x2011, 0x1c0e, 0x220e,
++      0x8210, 0x8108, 0x9186, 0x0260, 0x1128, 0x6810, 0x8000, 0x6812,
++      0x2009, 0x0240, 0x1f04, 0x5197, 0x60c3, 0x0084, 0x080c, 0x557c,
++      0x00fe, 0x0005, 0x00f6, 0x7088, 0x9005, 0x01c0, 0x2011, 0x554d,
++      0x080c, 0x781a, 0x9086, 0x0084, 0x1178, 0x080c, 0x56b3, 0x2079,
++      0x0260, 0x7a30, 0x9296, 0x1106, 0x1138, 0x7834, 0x9005, 0x1120,
++      0x7093, 0x000c, 0x0029, 0x0010, 0x080c, 0x568f, 0x00fe, 0x0005,
++      0x00f6, 0x7093, 0x000d, 0x080c, 0x5642, 0x2079, 0x0240, 0x7833,
++      0x1107, 0x7837, 0x0000, 0x080c, 0x56b3, 0x20a9, 0x0040, 0x2011,
++      0x026e, 0x2009, 0x024e, 0x220e, 0x8210, 0x8108, 0x9186, 0x0260,
++      0x1150, 0x6810, 0x8000, 0x6812, 0x2009, 0x0240, 0x6814, 0x8000,
++      0x6816, 0x2011, 0x0260, 0x1f04, 0x51db, 0x60c3, 0x0084, 0x080c,
++      0x557c, 0x00fe, 0x0005, 0x00f6, 0x7088, 0x9005, 0x01e0, 0x2011,
++      0x554d, 0x080c, 0x781a, 0x9086, 0x0084, 0x1198, 0x080c, 0x56b3,
++      0x2079, 0x0260, 0x7a30, 0x9296, 0x1107, 0x1158, 0x7834, 0x9005,
++      0x1140, 0x708f, 0x0001, 0x080c, 0x5614, 0x7093, 0x000e, 0x0029,
++      0x0010, 0x080c, 0x568f, 0x00fe, 0x0005, 0x918d, 0x0001, 0x080c,
++      0x56de, 0x7093, 0x000f, 0x708b, 0x0000, 0x2061, 0x0140, 0x605b,
++      0xbc85, 0x605f, 0xb5b5, 0x2061, 0x0100, 0x6043, 0x0005, 0x6043,
++      0x0004, 0x2009, 0x07d0, 0x2011, 0x554d, 0x080c, 0x780e, 0x0005,
++      0x7088, 0x9005, 0x0130, 0x2011, 0x554d, 0x080c, 0x781a, 0x7093,
++      0x0000, 0x0005, 0x7093, 0x0011, 0x080c, 0x9363, 0x080c, 0x56b3,
++      0x20e1, 0x0000, 0x2099, 0x0260, 0x20e9, 0x0000, 0x20a1, 0x0240,
++      0x7488, 0x9480, 0x0018, 0x9080, 0x0007, 0x9084, 0x03f8, 0x8004,
++      0x20a8, 0x4003, 0x080c, 0x5696, 0x11a0, 0x7174, 0x81ff, 0x0188,
++      0x900e, 0x7078, 0x9084, 0x00ff, 0x0160, 0x080c, 0x23fd, 0x9186,
++      0x007e, 0x0138, 0x9186, 0x0080, 0x0120, 0x2011, 0x0008, 0x080c,
++      0x54fa, 0x60c3, 0x0014, 0x080c, 0x557c, 0x0005, 0x00f6, 0x7088,
++      0x9005, 0x0500, 0x2011, 0x554d, 0x080c, 0x781a, 0x9086, 0x0014,
++      0x11b8, 0x080c, 0x56b3, 0x2079, 0x0260, 0x7a30, 0x9296, 0x1103,
++      0x1178, 0x7834, 0x9005, 0x1160, 0x7a38, 0xd2fc, 0x0128, 0x70c0,
++      0x9005, 0x1110, 0x70c3, 0x0001, 0x7093, 0x0012, 0x0029, 0x0010,
++      0x708b, 0x0000, 0x00fe, 0x0005, 0x00f6, 0x7093, 0x0013, 0x080c,
++      0x5650, 0x2079, 0x0240, 0x7833, 0x1103, 0x7837, 0x0000, 0x080c,
++      0x56b3, 0x080c, 0x5696, 0x1170, 0x707c, 0x9005, 0x1158, 0x7154,
++      0x9186, 0xffff, 0x0138, 0x2011, 0x0008, 0x080c, 0x54fa, 0x0168,
++      0x080c, 0x5677, 0x20a9, 0x0008, 0x20e1, 0x0000, 0x2099, 0x026e,
++      0x20e9, 0x0000, 0x20a1, 0x024e, 0x4003, 0x60c3, 0x0014, 0x080c,
++      0x557c, 0x00fe, 0x0005, 0x00f6, 0x7088, 0x9005, 0x0500, 0x2011,
++      0x554d, 0x080c, 0x781a, 0x9086, 0x0014, 0x11b8, 0x080c, 0x56b3,
++      0x2079, 0x0260, 0x7a30, 0x9296, 0x1104, 0x1178, 0x7834, 0x9005,
++      0x1160, 0x7a38, 0xd2fc, 0x0128, 0x70c0, 0x9005, 0x1110, 0x70c3,
++      0x0001, 0x7093, 0x0014, 0x0029, 0x0010, 0x708b, 0x0000, 0x00fe,
++      0x0005, 0x00f6, 0x7093, 0x0015, 0x080c, 0x5650, 0x2079, 0x0240,
++      0x7833, 0x1104, 0x7837, 0x0000, 0x080c, 0x56b3, 0x080c, 0x5696,
++      0x11b8, 0x707c, 0x9005, 0x11a0, 0x715c, 0x9186, 0xffff, 0x0180,
++      0x9180, 0x2e6e, 0x200d, 0x918c, 0xff00, 0x810f, 0x2011, 0x0008,
++      0x080c, 0x54fa, 0x0180, 0x080c, 0x4700, 0x0110, 0x080c, 0x2466,
++      0x20a9, 0x0008, 0x20e1, 0x0000, 0x2099, 0x026e, 0x20e9, 0x0000,
++      0x20a1, 0x024e, 0x4003, 0x60c3, 0x0014, 0x080c, 0x557c, 0x00fe,
++      0x0005, 0x00f6, 0x7088, 0x9005, 0x05f0, 0x2011, 0x554d, 0x080c,
++      0x781a, 0x9086, 0x0014, 0x15a8, 0x080c, 0x56b3, 0x2079, 0x0260,
++      0x7a30, 0x9296, 0x1105, 0x1568, 0x7834, 0x9084, 0x0100, 0x2011,
++      0x0100, 0x921e, 0x1168, 0x9085, 0x0001, 0x080c, 0x56de, 0x7a38,
++      0xd2fc, 0x0128, 0x70c0, 0x9005, 0x1110, 0x70c3, 0x0001, 0x0080,
++      0x9005, 0x11b8, 0x7a38, 0xd2fc, 0x0128, 0x70c0, 0x9005, 0x1110,
++      0x70c3, 0x0001, 0x9085, 0x0001, 0x080c, 0x56de, 0x708f, 0x0000,
++      0x7a38, 0xd2f4, 0x0110, 0x70db, 0x0008, 0x7093, 0x0016, 0x0029,
++      0x0010, 0x708b, 0x0000, 0x00fe, 0x0005, 0x080c, 0x9363, 0x080c,
++      0x56b3, 0x20e1, 0x0000, 0x2099, 0x0260, 0x20e9, 0x0000, 0x20a1,
++      0x0240, 0x20a9, 0x000e, 0x4003, 0x2011, 0x026d, 0x2204, 0x9084,
++      0x0100, 0x2011, 0x024d, 0x2012, 0x2011, 0x026e, 0x7093, 0x0017,
++      0x080c, 0x5696, 0x1150, 0x707c, 0x9005, 0x1138, 0x080c, 0x546d,
++      0x1188, 0x9085, 0x0001, 0x080c, 0x2466, 0x20a9, 0x0008, 0x080c,
++      0x56b3, 0x20e1, 0x0000, 0x2099, 0x026e, 0x20e9, 0x0000, 0x20a1,
++      0x024e, 0x4003, 0x60c3, 0x0014, 0x080c, 0x557c, 0x0010, 0x080c,
++      0x4fc7, 0x0005, 0x00f6, 0x7088, 0x9005, 0x01d8, 0x2011, 0x554d,
++      0x080c, 0x781a, 0x9086, 0x0084, 0x1190, 0x080c, 0x56b3, 0x2079,
++      0x0260, 0x7a30, 0x9296, 0x1106, 0x1150, 0x7834, 0x9005, 0x1138,
++      0x9006, 0x080c, 0x56de, 0x7093, 0x0018, 0x0029, 0x0010, 0x708b,
++      0x0000, 0x00fe, 0x0005, 0x00f6, 0x7093, 0x0019, 0x080c, 0x5650,
++      0x2079, 0x0240, 0x7833, 0x1106, 0x7837, 0x0000, 0x080c, 0x56b3,
++      0x2009, 0x026e, 0x2039, 0x1c0e, 0x20a9, 0x0040, 0x213e, 0x8738,
++      0x8108, 0x9186, 0x0280, 0x1128, 0x6814, 0x8000, 0x6816, 0x2009,
++      0x0260, 0x1f04, 0x53d6, 0x2039, 0x1c0e, 0x080c, 0x5696, 0x11e8,
++      0x2728, 0x2514, 0x8207, 0x9084, 0x00ff, 0x8000, 0x2018, 0x9294,
++      0x00ff, 0x8007, 0x9205, 0x202a, 0x7058, 0x2310, 0x8214, 0x92a0,
++      0x1c0e, 0x2414, 0x938c, 0x0001, 0x0118, 0x9294, 0xff00, 0x0018,
++      0x9294, 0x00ff, 0x8007, 0x9215, 0x2222, 0x20a9, 0x0040, 0x2009,
++      0x024e, 0x270e, 0x8738, 0x8108, 0x9186, 0x0260, 0x1128, 0x6810,
++      0x8000, 0x6812, 0x2009, 0x0240, 0x1f04, 0x5409, 0x60c3, 0x0084,
++      0x080c, 0x557c, 0x00fe, 0x0005, 0x00f6, 0x7088, 0x9005, 0x01e0,
++      0x2011, 0x554d, 0x080c, 0x781a, 0x9086, 0x0084, 0x1198, 0x080c,
++      0x56b3, 0x2079, 0x0260, 0x7a30, 0x9296, 0x1107, 0x1158, 0x7834,
++      0x9005, 0x1140, 0x708f, 0x0001, 0x080c, 0x5614, 0x7093, 0x001a,
++      0x0029, 0x0010, 0x708b, 0x0000, 0x00fe, 0x0005, 0x9085, 0x0001,
++      0x080c, 0x56de, 0x7093, 0x001b, 0x080c, 0x9363, 0x080c, 0x56b3,
++      0x2011, 0x0260, 0x2009, 0x0240, 0x7488, 0x9480, 0x0018, 0x9080,
++      0x0007, 0x9084, 0x03f8, 0x8004, 0x20a8, 0x220e, 0x8210, 0x8108,
++      0x9186, 0x0260, 0x1150, 0x6810, 0x8000, 0x6812, 0x2009, 0x0240,
++      0x6814, 0x8000, 0x6816, 0x2011, 0x0260, 0x1f04, 0x5455, 0x60c3,
++      0x0084, 0x080c, 0x557c, 0x0005, 0x0005, 0x0086, 0x0096, 0x2029,
++      0x1853, 0x252c, 0x20a9, 0x0008, 0x2041, 0x1c0e, 0x20e9, 0x0001,
++      0x28a0, 0x080c, 0x56b3, 0x20e1, 0x0000, 0x2099, 0x026e, 0x4003,
++      0x20a9, 0x0008, 0x2011, 0x0007, 0xd5d4, 0x0108, 0x9016, 0x2800,
++      0x9200, 0x200c, 0x91a6, 0xffff, 0x1148, 0xd5d4, 0x0110, 0x8210,
++      0x0008, 0x8211, 0x1f04, 0x5487, 0x0804, 0x54f6, 0x82ff, 0x1160,
++      0xd5d4, 0x0120, 0x91a6, 0x3fff, 0x0d90, 0x0020, 0x91a6, 0x3fff,
++      0x0904, 0x54f6, 0x918d, 0xc000, 0x20a9, 0x0010, 0x2019, 0x0001,
++      0xd5d4, 0x0110, 0x2019, 0x0010, 0x2120, 0xd5d4, 0x0110, 0x8423,
++      0x0008, 0x8424, 0x1240, 0xd5d4, 0x0110, 0x8319, 0x0008, 0x8318,
++      0x1f04, 0x54ad, 0x04d8, 0x23a8, 0x2021, 0x0001, 0x8426, 0x8425,
++      0x1f04, 0x54bf, 0x2328, 0x8529, 0x92be, 0x0007, 0x0158, 0x0006,
++      0x2039, 0x0007, 0x2200, 0x973a, 0x000e, 0x27a8, 0x95a8, 0x0010,
++      0x1f04, 0x54ce, 0x7556, 0x95c8, 0x2e6e, 0x292d, 0x95ac, 0x00ff,
++      0x757a, 0x6532, 0x6536, 0x0016, 0x2508, 0x080c, 0x2446, 0x001e,
++      0x60e7, 0x0000, 0x65ea, 0x2018, 0x2304, 0x9405, 0x201a, 0x707f,
++      0x0001, 0x20e9, 0x0000, 0x20a1, 0x024e, 0x20e1, 0x0001, 0x2898,
++      0x20a9, 0x0008, 0x4003, 0x9085, 0x0001, 0x0008, 0x9006, 0x009e,
++      0x008e, 0x0005, 0x0156, 0x01c6, 0x01d6, 0x0136, 0x0146, 0x22a8,
++      0x20e1, 0x0000, 0x2099, 0x026e, 0x20e9, 0x0000, 0x2011, 0x024e,
++      0x22a0, 0x4003, 0x014e, 0x013e, 0x01de, 0x01ce, 0x015e, 0x2118,
++      0x9026, 0x2001, 0x0007, 0x939a, 0x0010, 0x0218, 0x8420, 0x8001,
++      0x0cd0, 0x2118, 0x84ff, 0x0120, 0x939a, 0x0010, 0x8421, 0x1de0,
++      0x2021, 0x0001, 0x83ff, 0x0118, 0x8423, 0x8319, 0x1de8, 0x9238,
++      0x2029, 0x026e, 0x9528, 0x2504, 0x942c, 0x11b8, 0x9405, 0x203a,
++      0x7156, 0x91a0, 0x2e6e, 0x242d, 0x95ac, 0x00ff, 0x757a, 0x6532,
++      0x6536, 0x0016, 0x2508, 0x080c, 0x2446, 0x001e, 0x60e7, 0x0000,
++      0x65ea, 0x707f, 0x0001, 0x9084, 0x0000, 0x0005, 0x00e6, 0x2071,
++      0x1800, 0x7083, 0x0000, 0x00ee, 0x0005, 0x00e6, 0x00f6, 0x2079,
++      0x0100, 0x2071, 0x0140, 0x080c, 0x5603, 0x080c, 0x8b50, 0x7004,
++      0x9084, 0x4000, 0x0138, 0x2001, 0x1000, 0x080c, 0x28a5, 0x9006,
++      0x080c, 0x28a5, 0x0126, 0x2091, 0x8000, 0x2071, 0x1824, 0x2073,
++      0x0000, 0x7840, 0x0026, 0x0016, 0x2009, 0x00f7, 0x080c, 0x5660,
++      0x001e, 0x9094, 0x0010, 0x9285, 0x0080, 0x7842, 0x7a42, 0x002e,
++      0x012e, 0x00fe, 0x00ee, 0x0005, 0x0126, 0x2091, 0x8000, 0x2011,
++      0x19be, 0x2013, 0x0000, 0x708b, 0x0000, 0x012e, 0x60a3, 0x0056,
++      0x60a7, 0x9575, 0x080c, 0x8b47, 0x6144, 0xd184, 0x0120, 0x7190,
++      0x918d, 0x2000, 0x0018, 0x7184, 0x918d, 0x1000, 0x2011, 0x1966,
++      0x2112, 0x2009, 0x07d0, 0x2011, 0x554d, 0x080c, 0x78a5, 0x0005,
++      0x0016, 0x0026, 0x00c6, 0x0126, 0x2091, 0x8000, 0x080c, 0x94da,
++      0x2009, 0x00f7, 0x080c, 0x5660, 0x2061, 0x19c7, 0x900e, 0x611a,
++      0x611e, 0x2061, 0x1800, 0x6003, 0x0001, 0x2061, 0x0100, 0x6043,
++      0x0090, 0x6043, 0x0010, 0x2009, 0x1966, 0x200b, 0x0000, 0x2009,
++      0x002d, 0x2011, 0x55ca, 0x080c, 0x780e, 0x012e, 0x00ce, 0x002e,
++      0x001e, 0x0005, 0x00e6, 0x0006, 0x0126, 0x2091, 0x8000, 0x0499,
++      0x2071, 0x0100, 0x080c, 0x8b50, 0x2071, 0x0140, 0x7004, 0x9084,
++      0x4000, 0x0138, 0x2001, 0x1000, 0x080c, 0x28a5, 0x9006, 0x080c,
++      0x28a5, 0x080c, 0x687f, 0x0188, 0x080c, 0x689a, 0x1170, 0x080c,
++      0x6b4a, 0x0016, 0x080c, 0x2515, 0x2001, 0x193c, 0x2102, 0x001e,
++      0x080c, 0x6b45, 0x080c, 0x67be, 0x0050, 0x2009, 0x0001, 0x080c,
++      0x27f5, 0x2001, 0x0001, 0x080c, 0x23a6, 0x080c, 0x55a0, 0x012e,
++      0x000e, 0x00ee, 0x0005, 0x2001, 0x180d, 0x2004, 0xd0bc, 0x0158,
++      0x0026, 0x0036, 0x2011, 0x8017, 0x2001, 0x1966, 0x201c, 0x080c,
++      0x447f, 0x003e, 0x002e, 0x0005, 0x20a9, 0x0012, 0x20e9, 0x0001,
++      0x20a1, 0x1c80, 0x080c, 0x56b3, 0x20e9, 0x0000, 0x2099, 0x026e,
++      0x0099, 0x20a9, 0x0020, 0x080c, 0x56ad, 0x2099, 0x0260, 0x20a1,
++      0x1c92, 0x0051, 0x20a9, 0x000e, 0x080c, 0x56b0, 0x2099, 0x0260,
++      0x20a1, 0x1cb2, 0x0009, 0x0005, 0x0016, 0x0026, 0x3410, 0x3308,
++      0x2104, 0x8007, 0x2012, 0x8108, 0x8210, 0x1f04, 0x5638, 0x002e,
++      0x001e, 0x0005, 0x080c, 0x9363, 0x20e1, 0x0001, 0x2099, 0x1c00,
++      0x20e9, 0x0000, 0x20a1, 0x0240, 0x20a9, 0x000c, 0x4003, 0x0005,
++      0x080c, 0x9363, 0x080c, 0x56b3, 0x20e1, 0x0000, 0x2099, 0x0260,
++      0x20e9, 0x0000, 0x20a1, 0x0240, 0x20a9, 0x000c, 0x4003, 0x0005,
++      0x00c6, 0x0006, 0x2061, 0x0100, 0x810f, 0x2001, 0x1833, 0x2004,
++      0x9005, 0x1138, 0x2001, 0x1816, 0x2004, 0x9084, 0x00ff, 0x9105,
++      0x0010, 0x9185, 0x00f7, 0x604a, 0x000e, 0x00ce, 0x0005, 0x0016,
++      0x0046, 0x080c, 0x5f29, 0x0158, 0x9006, 0x2020, 0x2009, 0x002a,
++      0x080c, 0xc9c5, 0x2001, 0x180c, 0x200c, 0xc195, 0x2102, 0x2019,
++      0x002a, 0x900e, 0x080c, 0x2ce5, 0x004e, 0x001e, 0x0005, 0x080c,
++      0x55a0, 0x7093, 0x0000, 0x708b, 0x0000, 0x0005, 0x0006, 0x2001,
++      0x180c, 0x2004, 0xd09c, 0x0100, 0x000e, 0x0005, 0x0006, 0x0016,
++      0x0126, 0x2091, 0x8000, 0x2001, 0x0101, 0x200c, 0x918d, 0x0006,
++      0x2102, 0x012e, 0x001e, 0x000e, 0x0005, 0x2009, 0x0001, 0x0020,
++      0x2009, 0x0002, 0x0008, 0x900e, 0x6814, 0x9084, 0xffc0, 0x910d,
++      0x6916, 0x0005, 0x00f6, 0x0156, 0x0146, 0x01d6, 0x9006, 0x20a9,
++      0x0080, 0x20e9, 0x0001, 0x20a1, 0x1c00, 0x4004, 0x2079, 0x1c00,
++      0x7803, 0x2200, 0x7807, 0x00ef, 0x780f, 0x00ef, 0x7813, 0x0138,
++      0x7823, 0xffff, 0x7827, 0xffff, 0x01de, 0x014e, 0x015e, 0x00fe,
++      0x0005, 0x2001, 0x1800, 0x2003, 0x0001, 0x0005, 0x2001, 0x1973,
++      0x0118, 0x2003, 0x0001, 0x0010, 0x2003, 0x0000, 0x0005, 0x0156,
++      0x20a9, 0x0800, 0x2009, 0x1000, 0x9006, 0x200a, 0x8108, 0x1f04,
++      0x56ed, 0x015e, 0x0005, 0x00d6, 0x0036, 0x0156, 0x0136, 0x0146,
++      0x2069, 0x1852, 0x9006, 0xb802, 0xb8be, 0xb807, 0x0707, 0xb80a,
++      0xb80e, 0xb812, 0x9198, 0x2e6e, 0x231d, 0x939c, 0x00ff, 0xbb16,
++      0x0016, 0x0026, 0xb8b2, 0x080c, 0x94d3, 0x1120, 0x9192, 0x007e,
++      0x1208, 0xbbb2, 0x20a9, 0x0004, 0xb8b4, 0x20e8, 0xb9b8, 0x9198,
++      0x0006, 0x9006, 0x23a0, 0x4004, 0x20a9, 0x0004, 0x9198, 0x000a,
++      0x23a0, 0x4004, 0x002e, 0x001e, 0xb83e, 0xb842, 0xb84e, 0xb852,
++      0xb856, 0xb85a, 0xb85e, 0xb862, 0xb866, 0xb86a, 0xb86f, 0x0100,
++      0xb872, 0xb876, 0xb87a, 0xb88a, 0xb88e, 0xb893, 0x0008, 0xb896,
++      0xb89a, 0xb89e, 0xb8ae, 0xb9a2, 0x0096, 0xb8a4, 0x904d, 0x0110,
++      0x080c, 0x0fe0, 0xb8a7, 0x0000, 0x009e, 0x9006, 0xb84a, 0x6810,
++      0xb83a, 0x680c, 0xb846, 0x6814, 0x9084, 0x00ff, 0xb842, 0x014e,
++      0x013e, 0x015e, 0x003e, 0x00de, 0x0005, 0x0126, 0x2091, 0x8000,
++      0xa974, 0xae78, 0x9684, 0x3fff, 0x9082, 0x4000, 0x1a04, 0x57c2,
++      0x9182, 0x0800, 0x1a04, 0x57c6, 0x2001, 0x180c, 0x2004, 0x9084,
++      0x0003, 0x1904, 0x57cc, 0x9188, 0x1000, 0x2104, 0x905d, 0x0518,
++      0xb804, 0x9084, 0x00ff, 0x908e, 0x0006, 0x1508, 0xb8a4, 0x900d,
++      0x1904, 0x57de, 0xb850, 0x900d, 0x1148, 0xa802, 0x2900, 0xb852,
++      0xb84e, 0x080c, 0x7be8, 0x9006, 0x012e, 0x0005, 0x00a6, 0x2150,
++      0x2900, 0xb002, 0xa803, 0x0000, 0x00ae, 0xb852, 0x0c90, 0x2001,
++      0x0005, 0x900e, 0x04b0, 0x2001, 0x0028, 0x900e, 0x0490, 0x9082,
++      0x0006, 0x1288, 0x080c, 0x94d3, 0x1158, 0xb8a0, 0xd0bc, 0x1140,
++      0xb900, 0xd1fc, 0x0998, 0x2001, 0x0029, 0x2009, 0x1000, 0x0408,
++      0x2001, 0x0028, 0x00a8, 0x2009, 0x180c, 0x210c, 0xd18c, 0x0118,
++      0x2001, 0x0004, 0x0068, 0xd184, 0x0118, 0x2001, 0x0004, 0x0040,
++      0x2001, 0x0029, 0xb900, 0xd1fc, 0x0118, 0x2009, 0x1000, 0x0048,
++      0x900e, 0x0038, 0x2001, 0x0029, 0x900e, 0x0018, 0x2001, 0x0029,
++      0x900e, 0x9005, 0x012e, 0x0005, 0x2001, 0x180c, 0x2004, 0xd084,
++      0x19d0, 0x9188, 0x1000, 0x2104, 0x905d, 0x09a8, 0x080c, 0x5f2d,
++      0x1990, 0xb800, 0xd0c4, 0x0978, 0x0804, 0x5776, 0x080c, 0x5da9,
++      0x0904, 0x578f, 0x0804, 0x577a, 0x00b6, 0x00e6, 0x0126, 0x2091,
++      0x8000, 0xa974, 0x9182, 0x0800, 0x1a04, 0x583f, 0x9188, 0x1000,
++      0x2104, 0x905d, 0x0528, 0xb8a0, 0x9086, 0x007f, 0x0130, 0x080c,
++      0x5f35, 0x0118, 0x080c, 0x5f2d, 0x11f0, 0xa87c, 0xd0fc, 0x0138,
++      0xa894, 0x9005, 0x0120, 0x2060, 0x2900, 0x6016, 0x0058, 0x080c,
++      0x94fe, 0x05e0, 0x2b00, 0x6012, 0x2900, 0x6016, 0x600b, 0xffff,
++      0x6023, 0x000a, 0x2009, 0x0003, 0x080c, 0x95ce, 0x9006, 0x0450,
++      0x2001, 0x0028, 0x0430, 0x9082, 0x0006, 0x1288, 0x080c, 0x94d3,
++      0x1158, 0xb8a0, 0xd0bc, 0x1140, 0xb900, 0xd1fc, 0x09b0, 0x2001,
++      0x0029, 0x2009, 0x1000, 0x00a8, 0x2001, 0x0028, 0x0090, 0x2009,
++      0x180c, 0x210c, 0xd18c, 0x0118, 0x2001, 0x0004, 0x0050, 0xd184,
++      0x0118, 0x2001, 0x0004, 0x0028, 0x2001, 0x0029, 0x0010, 0x2001,
++      0x0029, 0x9005, 0x012e, 0x00ee, 0x00be, 0x0005, 0x2001, 0x002c,
++      0x0cc0, 0x00f6, 0x00b6, 0x0126, 0x2091, 0x8000, 0xa8e0, 0x9005,
++      0x1550, 0xa8dc, 0x9082, 0x0101, 0x1630, 0xa8c8, 0x9005, 0x1518,
++      0xa8c4, 0x9082, 0x0101, 0x12f8, 0xa974, 0x2079, 0x1800, 0x9182,
++      0x0800, 0x12e8, 0x7830, 0x9084, 0x0003, 0x1130, 0xaa98, 0xab94,
++      0xa878, 0x9084, 0x0007, 0x00ea, 0x7930, 0xd18c, 0x0118, 0x2001,
++      0x0004, 0x0038, 0xd184, 0x0118, 0x2001, 0x0004, 0x0010, 0x2001,
++      0x0029, 0x900e, 0x0038, 0x2001, 0x002c, 0x900e, 0x0018, 0x2001,
++      0x0029, 0x900e, 0x9006, 0x0008, 0x9005, 0x012e, 0x00be, 0x00fe,
++      0x0005, 0x58d5, 0x5891, 0x58a7, 0x58d5, 0x58d5, 0x58d5, 0x58d5,
++      0x58d5, 0x2100, 0x9082, 0x007e, 0x1270, 0x080c, 0x5bb0, 0x0140,
++      0xb810, 0x9306, 0x1904, 0x58dd, 0xb814, 0x9206, 0x15f0, 0x0028,
++      0xbb12, 0xba16, 0x0010, 0x080c, 0x435a, 0x0150, 0x04b0, 0x080c,
++      0x5c0d, 0x1598, 0xb810, 0x9306, 0x1580, 0xb814, 0x9206, 0x1568,
++      0x080c, 0x94fe, 0x0530, 0x2b00, 0x6012, 0x080c, 0xb4e6, 0x2900,
++      0x6016, 0x600b, 0xffff, 0x6023, 0x000a, 0xa878, 0x9086, 0x0001,
++      0x1170, 0x080c, 0x2d1a, 0x9006, 0x080c, 0x5b4d, 0x2001, 0x0002,
++      0x080c, 0x5b61, 0x2001, 0x0200, 0xb86e, 0xb893, 0x0002, 0x2009,
++      0x0003, 0x080c, 0x95ce, 0x9006, 0x0068, 0x2001, 0x0001, 0x900e,
++      0x0038, 0x2001, 0x002c, 0x900e, 0x0018, 0x2001, 0x0028, 0x900e,
++      0x9005, 0x0000, 0x012e, 0x00be, 0x00fe, 0x0005, 0x00b6, 0x00f6,
++      0x00e6, 0x0126, 0x2091, 0x8000, 0xa894, 0x90c6, 0x0015, 0x0904,
++      0x5aa6, 0x90c6, 0x0056, 0x0904, 0x5aaa, 0x90c6, 0x0066, 0x0904,
++      0x5aae, 0x90c6, 0x0071, 0x0904, 0x5ab2, 0x90c6, 0x0074, 0x0904,
++      0x5ab6, 0x90c6, 0x007c, 0x0904, 0x5aba, 0x90c6, 0x007e, 0x0904,
++      0x5abe, 0x90c6, 0x0037, 0x0904, 0x5ac2, 0x9016, 0x2079, 0x1800,
++      0xa974, 0x9186, 0x00ff, 0x0904, 0x5aa1, 0x9182, 0x0800, 0x1a04,
++      0x5aa1, 0x080c, 0x5c0d, 0x1190, 0xb804, 0x9084, 0x00ff, 0x9082,
++      0x0006, 0x1260, 0xa894, 0x90c6, 0x006f, 0x0140, 0x080c, 0x94d3,
++      0x1904, 0x5a8a, 0xb8a0, 0xd0bc, 0x1904, 0x5a8a, 0xa894, 0x90c6,
++      0x006f, 0x0158, 0x90c6, 0x005e, 0x0904, 0x59e6, 0x90c6, 0x0064,
++      0x0904, 0x5a12, 0x2008, 0x0804, 0x59a8, 0xa998, 0xa8b0, 0x2040,
++      0x080c, 0x94d3, 0x1120, 0x9182, 0x007f, 0x0a04, 0x59a8, 0x9186,
++      0x00ff, 0x0904, 0x59a8, 0x9182, 0x0800, 0x1a04, 0x59a8, 0xaaa0,
++      0xab9c, 0x7874, 0x9306, 0x1188, 0x7878, 0x0096, 0x924e, 0x1128,
++      0x2208, 0x2310, 0x009e, 0x0804, 0x59a8, 0x99cc, 0xff00, 0x009e,
++      0x1120, 0x2208, 0x2310, 0x0804, 0x59a8, 0x080c, 0x435a, 0x0904,
++      0x59b2, 0x900e, 0x9016, 0x90c6, 0x4000, 0x1558, 0x0006, 0x080c,
++      0x5e2d, 0x1108, 0xc185, 0xb800, 0xd0bc, 0x0108, 0xc18d, 0x20a9,
++      0x0004, 0xa860, 0x20e8, 0xa85c, 0x9080, 0x0031, 0x20a0, 0xb8b4,
++      0x20e0, 0xb8b8, 0x9080, 0x0006, 0x2098, 0x080c, 0x0f2b, 0x20a9,
++      0x0004, 0xa860, 0x20e8, 0xa85c, 0x9080, 0x0035, 0x20a0, 0xb8b4,
++      0x20e0, 0xb8b8, 0x9080, 0x000a, 0x2098, 0x080c, 0x0f2b, 0x000e,
++      0x0098, 0x90c6, 0x4007, 0x1110, 0x2408, 0x0070, 0x90c6, 0x4008,
++      0x1118, 0x2708, 0x2610, 0x0040, 0x90c6, 0x4009, 0x1108, 0x0020,
++      0x2001, 0x4005, 0x2009, 0x000a, 0xa896, 0xa99a, 0xaa9e, 0x2001,
++      0x0030, 0x0470, 0x080c, 0x94fe, 0x1130, 0x2001, 0x4005, 0x2009,
++      0x0003, 0x9016, 0x0c88, 0x2b00, 0x6012, 0x080c, 0xb4e6, 0x2900,
++      0x6016, 0x6023, 0x0001, 0xa868, 0xd88c, 0x0108, 0xc0f5, 0xa86a,
++      0x0126, 0x2091, 0x8000, 0x080c, 0x2d1a, 0x012e, 0x9006, 0x080c,
++      0x5b4d, 0x2001, 0x0002, 0x080c, 0x5b61, 0x2009, 0x0002, 0x080c,
++      0x95ce, 0xa8b0, 0xd094, 0x0118, 0xb8bc, 0xc08d, 0xb8be, 0x9006,
++      0x9005, 0x012e, 0x00ee, 0x00fe, 0x00be, 0x0005, 0x080c, 0x4dfe,
++      0x0118, 0x2009, 0x0007, 0x0410, 0xa998, 0xaeb0, 0x080c, 0x5c0d,
++      0x0120, 0x2009, 0x000a, 0x0804, 0x59a8, 0x9186, 0x007f, 0x0130,
++      0x080c, 0x5f2d, 0x0118, 0x2009, 0x0009, 0x0080, 0x0096, 0x080c,
++      0x0fae, 0x1120, 0x009e, 0x2009, 0x0002, 0x0040, 0x2900, 0x009e,
++      0xa806, 0x080c, 0xb275, 0x1998, 0x2009, 0x0003, 0x2001, 0x4005,
++      0x0804, 0x59ac, 0xa998, 0xaeb0, 0x080c, 0x5c0d, 0x0120, 0x2009,
++      0x000a, 0x0804, 0x59a8, 0x0096, 0x080c, 0x0fae, 0x1128, 0x009e,
++      0x2009, 0x0002, 0x0804, 0x5a69, 0x2900, 0x009e, 0xa806, 0x0096,
++      0x2048, 0x20a9, 0x002b, 0xb8b4, 0x20e0, 0xb8b8, 0x2098, 0xa860,
++      0x20e8, 0xa85c, 0x9080, 0x0002, 0x20a0, 0x4003, 0x20a9, 0x0008,
++      0x9080, 0x0006, 0x20a0, 0xbbb8, 0x9398, 0x0006, 0x2398, 0x080c,
++      0x0f2b, 0x009e, 0xa87b, 0x0000, 0xa883, 0x0000, 0xa897, 0x4000,
++      0xd684, 0x1168, 0x080c, 0x4dea, 0xd0b4, 0x1118, 0xa89b, 0x000b,
++      0x00e0, 0xb800, 0xd08c, 0x0118, 0xa89b, 0x000c, 0x00b0, 0x080c,
++      0x5f2d, 0x0118, 0xa89b, 0x0009, 0x0080, 0x080c, 0x4dfe, 0x0118,
++      0xa89b, 0x0007, 0x0050, 0x080c, 0xb258, 0x1904, 0x59df, 0x2009,
++      0x0003, 0x2001, 0x4005, 0x0804, 0x59ac, 0xa87b, 0x0030, 0xa897,
++      0x4005, 0xa804, 0x8006, 0x8006, 0x8007, 0x90bc, 0x003f, 0x9084,
++      0xffc0, 0x2009, 0x002b, 0xaaa0, 0xab9c, 0xaca8, 0xada4, 0x2031,
++      0x0000, 0x2041, 0x11e3, 0x080c, 0x9a1f, 0x1904, 0x59df, 0x2009,
++      0x0002, 0x08f8, 0x2001, 0x0028, 0x900e, 0x0804, 0x59e0, 0x2009,
++      0x180c, 0x210c, 0xd18c, 0x0118, 0x2001, 0x0004, 0x0038, 0xd184,
++      0x0118, 0x2001, 0x0004, 0x0010, 0x2001, 0x0029, 0x900e, 0x0804,
++      0x59e0, 0x2001, 0x0029, 0x900e, 0x0804, 0x59e0, 0x080c, 0x327f,
++      0x0804, 0x59e1, 0x080c, 0x4b29, 0x0804, 0x59e1, 0x080c, 0x3fec,
++      0x0804, 0x59e1, 0x080c, 0x43f5, 0x0804, 0x59e1, 0x080c, 0x4572,
++      0x0804, 0x59e1, 0x080c, 0x4796, 0x0804, 0x59e1, 0x080c, 0x499b,
++      0x0804, 0x59e1, 0x080c, 0x3459, 0x0804, 0x59e1, 0x00b6, 0xa974,
++      0xae78, 0x9684, 0x3fff, 0x9082, 0x4000, 0x1618, 0x9182, 0x0800,
++      0x1268, 0x9188, 0x1000, 0x2104, 0x905d, 0x0140, 0x080c, 0x5f2d,
++      0x1148, 0x00e9, 0x080c, 0x5d38, 0x9006, 0x00b0, 0x2001, 0x0028,
++      0x900e, 0x0090, 0x9082, 0x0006, 0x1240, 0xb900, 0xd1fc, 0x0d88,
++      0x2001, 0x0029, 0x2009, 0x1000, 0x0038, 0x2001, 0x0029, 0x900e,
++      0x0018, 0x2001, 0x0029, 0x900e, 0x9005, 0x00be, 0x0005, 0x0126,
++      0x2091, 0x8000, 0xb850, 0x900d, 0x0150, 0x2900, 0x0096, 0x2148,
++      0xa802, 0x009e, 0xa803, 0x0000, 0xb852, 0x012e, 0x0005, 0x2900,
++      0xb852, 0xb84e, 0xa803, 0x0000, 0x0cc0, 0x0126, 0x2091, 0x8000,
++      0xb84c, 0x9005, 0x0170, 0x00e6, 0x2071, 0x19b4, 0x7004, 0x9086,
++      0x0002, 0x0168, 0x00ee, 0xb84c, 0xa802, 0x2900, 0xb84e, 0x012e,
++      0x0005, 0x2900, 0xb852, 0xb84e, 0xa803, 0x0000, 0x0cc0, 0x701c,
++      0x9b06, 0x1d80, 0xb84c, 0x00a6, 0x2050, 0xb000, 0xa802, 0x2900,
++      0xb002, 0x00ae, 0x00ee, 0x012e, 0x0005, 0x0126, 0x2091, 0x8000,
++      0xb84c, 0x904d, 0x0130, 0xa800, 0x9005, 0x1108, 0xb852, 0xb84e,
++      0x9905, 0x012e, 0x0005, 0xb84c, 0x904d, 0x0130, 0xa800, 0x9005,
++      0x1108, 0xb852, 0xb84e, 0x9905, 0x0005, 0x00b6, 0x0126, 0x00c6,
++      0x0026, 0x2091, 0x8000, 0x6210, 0x2258, 0xba00, 0x9005, 0x0110,
++      0xc285, 0x0008, 0xc284, 0xba02, 0x002e, 0x00ce, 0x012e, 0x00be,
++      0x0005, 0x00b6, 0x0126, 0x00c6, 0x2091, 0x8000, 0x6210, 0x2258,
++      0xba04, 0x0006, 0x9086, 0x0006, 0x1170, 0xb89c, 0xd0ac, 0x0158,
++      0x080c, 0x5f29, 0x0140, 0x9284, 0xff00, 0x8007, 0x9086, 0x0007,
++      0x1110, 0x2011, 0x0600, 0x000e, 0x9294, 0xff00, 0x9215, 0xba06,
++      0x0006, 0x9086, 0x0006, 0x1120, 0xba90, 0x82ff, 0x090c, 0x0d84,
++      0x000e, 0x00ce, 0x012e, 0x00be, 0x0005, 0x00b6, 0x0126, 0x00c6,
++      0x2091, 0x8000, 0x6210, 0x2258, 0xba04, 0x0006, 0x9086, 0x0006,
++      0x1168, 0xb89c, 0xd0a4, 0x0150, 0x080c, 0x5f25, 0x1138, 0x9284,
++      0x00ff, 0x9086, 0x0007, 0x1110, 0x2011, 0x0006, 0x000e, 0x9294,
++      0x00ff, 0x8007, 0x9215, 0xba06, 0x00ce, 0x012e, 0x00be, 0x0005,
++      0x00d6, 0x0026, 0x9182, 0x0800, 0x0218, 0x9085, 0x0001, 0x00b0,
++      0x9190, 0x1000, 0x2204, 0x905d, 0x1180, 0x0096, 0x080c, 0x0fae,
++      0x2958, 0x009e, 0x0d90, 0x2b00, 0x2012, 0xb85c, 0xb8ba, 0xb860,
++      0xb8b6, 0x9006, 0xb8a6, 0x080c, 0x56f3, 0x9006, 0x002e, 0x00de,
++      0x0005, 0x00b6, 0x0096, 0x0126, 0x2091, 0x8000, 0x0026, 0x9182,
++      0x0800, 0x0218, 0x9085, 0x0001, 0x0458, 0x00d6, 0x9190, 0x1000,
++      0x2204, 0x905d, 0x0518, 0x2013, 0x0000, 0xb8a4, 0x904d, 0x0110,
++      0x080c, 0x0fe0, 0x00d6, 0x00c6, 0xb8ac, 0x2060, 0x8cff, 0x0168,
++      0x600c, 0x0006, 0x6014, 0x2048, 0x080c, 0xb0ad, 0x0110, 0x080c,
++      0x0f60, 0x080c, 0x9554, 0x00ce, 0x0c88, 0x00ce, 0x00de, 0x2b48,
++      0xb8b8, 0xb85e, 0xb8b4, 0xb862, 0x080c, 0x0ff0, 0x00de, 0x9006,
++      0x002e, 0x012e, 0x009e, 0x00be, 0x0005, 0x0016, 0x9182, 0x0800,
++      0x0218, 0x9085, 0x0001, 0x0030, 0x9188, 0x1000, 0x2104, 0x905d,
++      0x0dc0, 0x9006, 0x001e, 0x0005, 0x00d6, 0x0156, 0x0136, 0x0146,
++      0x9006, 0xb80a, 0xb80e, 0xb800, 0xc08c, 0xb802, 0x080c, 0x6877,
++      0x1510, 0xb8a0, 0x9086, 0x007e, 0x0120, 0x080c, 0x94d3, 0x11d8,
++      0x0078, 0x7040, 0xd0e4, 0x01b8, 0x00c6, 0x2061, 0x194f, 0x7048,
++      0x2062, 0x704c, 0x6006, 0x7050, 0x600a, 0x7054, 0x600e, 0x00ce,
++      0x703c, 0x2069, 0x0140, 0x9005, 0x1110, 0x2001, 0x0001, 0x6886,
++      0x2069, 0x1800, 0x68ae, 0x7040, 0xb85e, 0x7048, 0xb862, 0x704c,
++      0xb866, 0x20e1, 0x0000, 0x2099, 0x0276, 0xb8b4, 0x20e8, 0xb8b8,
++      0x9088, 0x000a, 0x21a0, 0x20a9, 0x0004, 0x4003, 0x2099, 0x027a,
++      0x9088, 0x0006, 0x21a0, 0x20a9, 0x0004, 0x4003, 0x2069, 0x0200,
++      0x6817, 0x0001, 0x7040, 0xb86a, 0x7144, 0xb96e, 0x7048, 0xb872,
++      0x7050, 0xb876, 0x2069, 0x0200, 0x6817, 0x0000, 0xb8a0, 0x9086,
++      0x007e, 0x1110, 0x7144, 0xb96e, 0x9182, 0x0211, 0x1218, 0x2009,
++      0x0008, 0x0400, 0x9182, 0x0259, 0x1218, 0x2009, 0x0007, 0x00d0,
++      0x9182, 0x02c1, 0x1218, 0x2009, 0x0006, 0x00a0, 0x9182, 0x0349,
++      0x1218, 0x2009, 0x0005, 0x0070, 0x9182, 0x0421, 0x1218, 0x2009,
++      0x0004, 0x0040, 0x9182, 0x0581, 0x1218, 0x2009, 0x0003, 0x0010,
++      0x2009, 0x0002, 0xb992, 0x014e, 0x013e, 0x015e, 0x00de, 0x0005,
++      0x0016, 0x0026, 0x00e6, 0x2071, 0x0260, 0x7034, 0xb896, 0x703c,
++      0xb89a, 0x7054, 0xb89e, 0x0036, 0xbbbc, 0xc384, 0xba00, 0x2009,
++      0x1872, 0x210c, 0xd0bc, 0x0120, 0xd1ec, 0x0110, 0xc2ad, 0x0008,
++      0xc2ac, 0xd0c4, 0x0148, 0xd1e4, 0x0138, 0xc2bd, 0xd0cc, 0x0128,
++      0xd38c, 0x1108, 0xc385, 0x0008, 0xc2bc, 0xba02, 0xbbbe, 0x003e,
++      0x00ee, 0x002e, 0x001e, 0x0005, 0x0096, 0x0126, 0x2091, 0x8000,
++      0xb8a4, 0x904d, 0x0578, 0xa900, 0x81ff, 0x15c0, 0xaa04, 0x9282,
++      0x0010, 0x16c8, 0x0136, 0x0146, 0x01c6, 0x01d6, 0x8906, 0x8006,
++      0x8007, 0x908c, 0x003f, 0x21e0, 0x9084, 0xffc0, 0x9080, 0x0004,
++      0x2098, 0x2009, 0x0010, 0x20a9, 0x0001, 0x4002, 0x9086, 0xffff,
++      0x0120, 0x8109, 0x1dd0, 0x080c, 0x0d84, 0x3c00, 0x20e8, 0x3300,
++      0x8001, 0x20a0, 0x4604, 0x8210, 0xaa06, 0x01de, 0x01ce, 0x014e,
++      0x013e, 0x0060, 0x080c, 0x0fae, 0x0170, 0x2900, 0xb8a6, 0xa803,
++      0x0000, 0x080c, 0x5dc9, 0xa807, 0x0001, 0xae12, 0x9085, 0x0001,
++      0x012e, 0x009e, 0x0005, 0x9006, 0x0cd8, 0x0126, 0x2091, 0x8000,
++      0x0096, 0xb8a4, 0x904d, 0x0188, 0xa800, 0x9005, 0x1150, 0x080c,
++      0x5dd8, 0x1158, 0xa804, 0x908a, 0x0002, 0x0218, 0x8001, 0xa806,
++      0x0020, 0x080c, 0x0fe0, 0xb8a7, 0x0000, 0x009e, 0x012e, 0x0005,
++      0x0126, 0x2091, 0x8000, 0x080c, 0x7be8, 0x012e, 0x0005, 0x901e,
++      0x0010, 0x2019, 0x0001, 0x900e, 0x0126, 0x2091, 0x8000, 0xb84c,
++      0x2048, 0xb800, 0xd0dc, 0x1170, 0x89ff, 0x0500, 0x83ff, 0x0120,
++      0xa878, 0x9606, 0x0158, 0x0030, 0xa86c, 0x9406, 0x1118, 0xa870,
++      0x9506, 0x0120, 0x2908, 0xa800, 0x2048, 0x0c70, 0x080c, 0x8eec,
++      0xaa00, 0xb84c, 0x9906, 0x1110, 0xba4e, 0x0020, 0x00a6, 0x2150,
++      0xb202, 0x00ae, 0x82ff, 0x1110, 0xb952, 0x89ff, 0x012e, 0x0005,
++      0x9016, 0x0489, 0x1110, 0x2011, 0x0001, 0x0005, 0x080c, 0x5e2d,
++      0x0118, 0x080c, 0xb15e, 0x0010, 0x9085, 0x0001, 0x0005, 0x080c,
++      0x5e2d, 0x0118, 0x080c, 0xb0f8, 0x0010, 0x9085, 0x0001, 0x0005,
++      0x080c, 0x5e2d, 0x0118, 0x080c, 0xb15b, 0x0010, 0x9085, 0x0001,
++      0x0005, 0x080c, 0x5e2d, 0x0118, 0x080c, 0xb11c, 0x0010, 0x9085,
++      0x0001, 0x0005, 0x080c, 0x5e2d, 0x0118, 0x080c, 0xb188, 0x0010,
++      0x9085, 0x0001, 0x0005, 0xb8a4, 0x900d, 0x1118, 0x9085, 0x0001,
++      0x0005, 0x0136, 0x01c6, 0xa800, 0x9005, 0x11b8, 0x890e, 0x810e,
++      0x810f, 0x9184, 0x003f, 0x20e0, 0x9184, 0xffc0, 0x9080, 0x0004,
++      0x2098, 0x20a9, 0x0001, 0x2009, 0x0010, 0x4002, 0x9606, 0x0128,
++      0x8109, 0x1dd8, 0x9085, 0x0001, 0x0008, 0x9006, 0x01ce, 0x013e,
++      0x0005, 0x0146, 0x01d6, 0xa860, 0x20e8, 0xa85c, 0x9080, 0x0004,
++      0x20a0, 0x20a9, 0x0010, 0x2009, 0xffff, 0x4104, 0x01de, 0x014e,
++      0x0136, 0x01c6, 0xa800, 0x9005, 0x11b8, 0x890e, 0x810e, 0x810f,
++      0x9184, 0x003f, 0x20e0, 0x9184, 0xffc0, 0x9080, 0x0004, 0x2098,
++      0x20a9, 0x0001, 0x2009, 0x0010, 0x4002, 0x9606, 0x0128, 0x8109,
++      0x1dd8, 0x9085, 0x0001, 0x0068, 0x0146, 0x01d6, 0x3300, 0x8001,
++      0x20a0, 0x3c00, 0x20e8, 0x2001, 0xffff, 0x4004, 0x01de, 0x014e,
++      0x9006, 0x01ce, 0x013e, 0x0005, 0x0096, 0x0126, 0x2091, 0x8000,
++      0xb8a4, 0x904d, 0x1128, 0x080c, 0x0fae, 0x0168, 0x2900, 0xb8a6,
++      0x080c, 0x5dc9, 0xa803, 0x0001, 0xa807, 0x0000, 0x9085, 0x0001,
++      0x012e, 0x009e, 0x0005, 0x9006, 0x0cd8, 0x0096, 0x0126, 0x2091,
++      0x8000, 0xb8a4, 0x904d, 0x0130, 0xb8a7, 0x0000, 0x080c, 0x0fe0,
++      0x9085, 0x0001, 0x012e, 0x009e, 0x0005, 0xb89c, 0xd0a4, 0x0005,
++      0x00b6, 0x00f6, 0x080c, 0x6877, 0x01b0, 0x71c0, 0x81ff, 0x1198,
++      0x71d8, 0xd19c, 0x0180, 0x2001, 0x007e, 0x9080, 0x1000, 0x2004,
++      0x905d, 0x0148, 0xb804, 0x9084, 0x00ff, 0x9086, 0x0006, 0x1118,
++      0xb800, 0xc0ed, 0xb802, 0x2079, 0x1852, 0x7804, 0xd0a4, 0x01d0,
++      0x0156, 0x20a9, 0x007f, 0x900e, 0x0016, 0x080c, 0x5c0d, 0x1168,
++      0xb804, 0x9084, 0xff00, 0x8007, 0x9096, 0x0004, 0x0118, 0x9086,
++      0x0006, 0x1118, 0xb800, 0xc0ed, 0xb802, 0x001e, 0x8108, 0x1f04,
++      0x5e54, 0x015e, 0x080c, 0x5eeb, 0x0120, 0x2001, 0x1952, 0x200c,
++      0x0038, 0x2079, 0x1852, 0x7804, 0xd0a4, 0x0130, 0x2009, 0x07d0,
++      0x2011, 0x5e7f, 0x080c, 0x78a5, 0x00fe, 0x00be, 0x0005, 0x00b6,
++      0x2011, 0x5e7f, 0x080c, 0x781a, 0x080c, 0x5eeb, 0x01d8, 0x2001,
++      0x107e, 0x2004, 0x2058, 0xb900, 0xc1ec, 0xb902, 0x080c, 0x5f29,
++      0x0130, 0x2009, 0x07d0, 0x2011, 0x5e7f, 0x080c, 0x78a5, 0x00e6,
++      0x2071, 0x1800, 0x9006, 0x7076, 0x7058, 0x707a, 0x080c, 0x2b1e,
++      0x00ee, 0x0488, 0x0156, 0x00c6, 0x20a9, 0x007f, 0x900e, 0x0016,
++      0x080c, 0x5c0d, 0x1510, 0xb800, 0xd0ec, 0x01f8, 0x0046, 0xbaa0,
++      0x2220, 0x9006, 0x2009, 0x0029, 0x080c, 0xc9c5, 0xb800, 0xc0e5,
++      0xc0ec, 0xb802, 0xb804, 0x9084, 0x00ff, 0x9085, 0x0700, 0xb806,
++      0x2019, 0x0029, 0x080c, 0x7d55, 0x0076, 0x903e, 0x080c, 0x7c4d,
++      0x900e, 0x080c, 0xc73e, 0x007e, 0x004e, 0x001e, 0x8108, 0x1f04,
++      0x5ea7, 0x00ce, 0x015e, 0x00be, 0x0005, 0x00b6, 0x6010, 0x2058,
++      0xb800, 0xc0ec, 0xb802, 0x00be, 0x0005, 0x7810, 0x00b6, 0x2058,
++      0xb800, 0x00be, 0xd0ac, 0x0005, 0x7810, 0x00b6, 0x2058, 0xb800,
++      0x00be, 0xd0bc, 0x0005, 0x00b6, 0x00f6, 0x2001, 0x107e, 0x2004,
++      0x905d, 0x0110, 0xb800, 0xd0ec, 0x00fe, 0x00be, 0x0005, 0x0126,
++      0x0026, 0x2091, 0x8000, 0x0006, 0xbaa0, 0x9290, 0x1000, 0x2204,
++      0x9b06, 0x190c, 0x0d84, 0x000e, 0xba00, 0x9005, 0x0110, 0xc2fd,
++      0x0008, 0xc2fc, 0xba02, 0x002e, 0x012e, 0x0005, 0x2011, 0x1836,
++      0x2204, 0xd0cc, 0x0138, 0x2001, 0x1950, 0x200c, 0x2011, 0x5f1b,
++      0x080c, 0x78a5, 0x0005, 0x2011, 0x5f1b, 0x080c, 0x781a, 0x2011,
++      0x1836, 0x2204, 0xc0cc, 0x2012, 0x0005, 0x080c, 0x4dea, 0xd0ac,
++      0x0005, 0x080c, 0x4dea, 0xd0a4, 0x0005, 0x0016, 0xb904, 0x9184,
++      0x00ff, 0x908e, 0x0006, 0x001e, 0x0005, 0x0016, 0xb904, 0x9184,
++      0xff00, 0x8007, 0x908e, 0x0006, 0x001e, 0x0005, 0x00b6, 0x00f6,
++      0x080c, 0xb759, 0x0158, 0x70d8, 0x9084, 0x0028, 0x0138, 0x2001,
++      0x107f, 0x2004, 0x905d, 0x0110, 0xb8bc, 0xd094, 0x00fe, 0x00be,
++      0x0005, 0x2071, 0x1904, 0x7003, 0x0001, 0x7007, 0x0000, 0x9006,
++      0x7012, 0x7016, 0x701a, 0x701e, 0x700a, 0x7046, 0x2001, 0x1917,
++      0x2003, 0x0000, 0x0005, 0x0016, 0x00e6, 0x2071, 0x1918, 0x900e,
++      0x710a, 0x080c, 0x4dea, 0xd0fc, 0x1140, 0x080c, 0x4dea, 0x900e,
++      0xd09c, 0x0108, 0x8108, 0x7102, 0x00f8, 0x2001, 0x1872, 0x200c,
++      0x9184, 0x0007, 0x0002, 0x5f6d, 0x5f6d, 0x5f6d, 0x5f6d, 0x5f6d,
++      0x5f83, 0x5f91, 0x5f6d, 0x7003, 0x0003, 0x2009, 0x1873, 0x210c,
++      0x9184, 0xff00, 0x8007, 0x9005, 0x1110, 0x2001, 0x0002, 0x7006,
++      0x0018, 0x7003, 0x0005, 0x0c88, 0x00ee, 0x001e, 0x0005, 0x00e6,
++      0x2071, 0x0050, 0x684c, 0x9005, 0x1150, 0x00e6, 0x2071, 0x1904,
++      0x7028, 0xc085, 0x702a, 0x00ee, 0x9085, 0x0001, 0x0488, 0x6844,
++      0x9005, 0x0158, 0x080c, 0x6bb2, 0x6a60, 0x9200, 0x7002, 0x6864,
++      0x9101, 0x7006, 0x9006, 0x7012, 0x7016, 0x6860, 0x7002, 0x6864,
++      0x7006, 0x6868, 0x700a, 0x686c, 0x700e, 0x6844, 0x9005, 0x1110,
++      0x7012, 0x7016, 0x684c, 0x701a, 0x701c, 0x9085, 0x0040, 0x701e,
++      0x7037, 0x0019, 0x702b, 0x0001, 0x00e6, 0x2071, 0x1904, 0x7028,
++      0xc084, 0x702a, 0x7007, 0x0001, 0x700b, 0x0000, 0x00ee, 0x9006,
++      0x00ee, 0x0005, 0xa868, 0xd0fc, 0x11c8, 0x00e6, 0x0026, 0x2001,
++      0x1918, 0x2004, 0x9005, 0x0904, 0x61ae, 0xa87c, 0xd0bc, 0x1904,
++      0x61ae, 0xa978, 0xa874, 0x9105, 0x1904, 0x61ae, 0x2001, 0x1918,
++      0x2004, 0x0002, 0x61ae, 0x6017, 0x6051, 0x6051, 0x0005, 0xa868,
++      0xd0fc, 0x11e0, 0x00e6, 0x0026, 0x2009, 0x1918, 0x210c, 0x81ff,
++      0x0904, 0x61ae, 0xa87c, 0xd0cc, 0x0904, 0x61ae, 0xa880, 0x9084,
++      0x00ff, 0x9086, 0x0001, 0x1904, 0x61ae, 0x9186, 0x0003, 0x0904,
++      0x6051, 0xa84f, 0x8021, 0xa853, 0x0017, 0x0028, 0x0005, 0xa84f,
++      0x8020, 0xa853, 0x0016, 0x2071, 0x1904, 0x701c, 0x9005, 0x1904,
++      0x6360, 0x0e04, 0x63a9, 0x2071, 0x0000, 0xa84c, 0x7082, 0xa850,
++      0x7032, 0xa86c, 0x7086, 0x7036, 0xa870, 0x708a, 0x2091, 0x4080,
++      0x2001, 0x0089, 0x2004, 0xd084, 0x190c, 0x113e, 0x2071, 0x1800,
++      0x2011, 0x0001, 0xa804, 0x900d, 0x702c, 0x1148, 0xa802, 0x2900,
++      0x702e, 0x70bc, 0x9200, 0x70be, 0x002e, 0x00ee, 0x0005, 0x0096,
++      0x2148, 0xa904, 0xa802, 0x8210, 0x2900, 0x81ff, 0x1dc8, 0x009e,
++      0x0c68, 0xa84f, 0x0000, 0x00f6, 0x2079, 0x0050, 0x2071, 0x1904,
++      0xa803, 0x0000, 0x7010, 0x9005, 0x1904, 0x6136, 0x782c, 0x908c,
++      0x0780, 0x190c, 0x64ce, 0x8004, 0x8004, 0x8004, 0x9084, 0x0003,
++      0x0002, 0x606f, 0x6136, 0x6092, 0x60d5, 0x080c, 0x0d84, 0x2071,
++      0x1800, 0x2900, 0x7822, 0xa804, 0x900d, 0x1170, 0x2071, 0x19c7,
++      0x7040, 0x9005, 0x1328, 0x2001, 0x1919, 0x2004, 0x8005, 0x7042,
++      0x00fe, 0x002e, 0x00ee, 0x0005, 0x9016, 0x702c, 0x2148, 0xa904,
++      0xa802, 0x8210, 0x2900, 0x81ff, 0x1dc8, 0x702e, 0x70bc, 0x9200,
++      0x70be, 0x0c20, 0x2071, 0x1800, 0x2900, 0x7822, 0xa804, 0x900d,
++      0x1570, 0x7824, 0x00e6, 0x2071, 0x0040, 0x712c, 0xd19c, 0x1148,
++      0x2009, 0x182f, 0x210c, 0x918a, 0x0040, 0x0218, 0x7022, 0x00ee,
++      0x0048, 0x00ee, 0x2048, 0x702c, 0xa802, 0x2900, 0x702e, 0x70bc,
++      0x8000, 0x70be, 0x782c, 0x9094, 0x0780, 0x190c, 0x64ce, 0xd0a4,
++      0x1d00, 0x2071, 0x19c7, 0x7040, 0x9005, 0x1328, 0x2001, 0x1919,
++      0x2004, 0x8005, 0x7042, 0x00fe, 0x002e, 0x00ee, 0x0005, 0x9016,
++      0x702c, 0x2148, 0xa904, 0xa802, 0x8210, 0x2900, 0x81ff, 0x1dc8,
++      0x702e, 0x70bc, 0x9200, 0x70be, 0x0820, 0x0096, 0x00e6, 0x7824,
++      0x2048, 0x2071, 0x1800, 0x702c, 0xa802, 0x2900, 0x702e, 0x70bc,
++      0x8000, 0x70be, 0x782c, 0x9094, 0x0780, 0x190c, 0x64ce, 0xd0a4,
++      0x1d70, 0x00ee, 0x782c, 0x9094, 0x0780, 0x190c, 0x64ce, 0xd09c,
++      0x11a0, 0x009e, 0x2900, 0x7822, 0xa804, 0x900d, 0x1560, 0x2071,
++      0x19c7, 0x7040, 0x9005, 0x1328, 0x2001, 0x1919, 0x2004, 0x8005,
++      0x7042, 0x00fe, 0x002e, 0x00ee, 0x0005, 0x009e, 0x2908, 0x7010,
++      0x8000, 0x7012, 0x7018, 0x904d, 0x711a, 0x0110, 0xa902, 0x0008,
++      0x711e, 0x2148, 0xa804, 0x900d, 0x1170, 0x2071, 0x19c7, 0x7040,
++      0x9005, 0x1328, 0x2001, 0x1919, 0x2004, 0x8005, 0x7042, 0x00fe,
++      0x002e, 0x00ee, 0x0005, 0x2071, 0x1800, 0x9016, 0x702c, 0x2148,
++      0xa904, 0xa802, 0x8210, 0x2900, 0x81ff, 0x1dc8, 0x702e, 0x70bc,
++      0x9200, 0x70be, 0x00fe, 0x002e, 0x00ee, 0x0005, 0x2908, 0x7010,
++      0x8000, 0x7012, 0x7018, 0x904d, 0x711a, 0x0110, 0xa902, 0x0008,
++      0x711e, 0x2148, 0xa804, 0x900d, 0x1904, 0x6189, 0x782c, 0x9094,
++      0x0780, 0x190c, 0x64ce, 0xd09c, 0x1198, 0x701c, 0x904d, 0x0180,
++      0x7010, 0x8001, 0x7012, 0x1108, 0x701a, 0xa800, 0x701e, 0x2900,
++      0x7822, 0x782c, 0x9094, 0x0780, 0x190c, 0x64ce, 0xd09c, 0x0d68,
++      0x782c, 0x9094, 0x0780, 0x190c, 0x64ce, 0xd0a4, 0x01a0, 0x00e6,
++      0x7824, 0x2048, 0x2071, 0x1800, 0x702c, 0xa802, 0x2900, 0x702e,
++      0x70bc, 0x8000, 0x70be, 0x782c, 0x9094, 0x0780, 0x190c, 0x64ce,
++      0xd0a4, 0x1d70, 0x00ee, 0x2071, 0x19c7, 0x7040, 0x9005, 0x1328,
++      0x2001, 0x1919, 0x2004, 0x8005, 0x7042, 0x00fe, 0x002e, 0x00ee,
++      0x0005, 0x00e6, 0x2071, 0x1800, 0x9016, 0x702c, 0x2148, 0xa904,
++      0xa802, 0x8210, 0x2900, 0x81ff, 0x1dc8, 0x702e, 0x70bc, 0x9200,
++      0x70be, 0x00ee, 0x0804, 0x6146, 0xa868, 0xd0fc, 0x1904, 0x61ea,
++      0x0096, 0xa804, 0xa807, 0x0000, 0x904d, 0x190c, 0x0f60, 0x009e,
++      0x0018, 0xa868, 0xd0fc, 0x15f0, 0x00e6, 0x0026, 0xa84f, 0x0000,
++      0x00f6, 0x2079, 0x0050, 0x2071, 0x1800, 0x70f0, 0x8001, 0x01d0,
++      0x1678, 0x2071, 0x1904, 0xa803, 0x0000, 0x7010, 0x9005, 0x1904,
++      0x62de, 0x782c, 0x908c, 0x0780, 0x190c, 0x64ce, 0x8004, 0x8004,
++      0x8004, 0x9084, 0x0003, 0x0002, 0x61eb, 0x62de, 0x6204, 0x6271,
++      0x080c, 0x0d84, 0x70f3, 0x0fa0, 0x71ec, 0x8107, 0x9106, 0x9094,
++      0x00c0, 0x9184, 0xff3f, 0x9205, 0x70ee, 0x3b08, 0x3a00, 0x9104,
++      0x918d, 0x00c0, 0x21d8, 0x9084, 0xff3f, 0x9205, 0x20d0, 0x0888,
++      0x70f2, 0x0878, 0x0005, 0x2071, 0x1800, 0x2900, 0x7822, 0xa804,
++      0x900d, 0x1120, 0x00fe, 0x002e, 0x00ee, 0x0005, 0x9016, 0x702c,
++      0x2148, 0xa904, 0xa802, 0x8210, 0x2900, 0x81ff, 0x1dc8, 0x702e,
++      0x70bc, 0x9200, 0x70be, 0x0c70, 0x2071, 0x1800, 0x2900, 0x7822,
++      0xa804, 0x900d, 0x1904, 0x6262, 0x7830, 0x8007, 0x9084, 0x001f,
++      0x9082, 0x0005, 0x1220, 0x00fe, 0x002e, 0x00ee, 0x0005, 0x7824,
++      0x00e6, 0x2071, 0x0040, 0x712c, 0xd19c, 0x1148, 0x2009, 0x182f,
++      0x210c, 0x918a, 0x0040, 0x0218, 0x7022, 0x00ee, 0x0048, 0x00ee,
++      0x2048, 0x702c, 0xa802, 0x2900, 0x702e, 0x70bc, 0x8000, 0x70be,
++      0x782c, 0x9094, 0x0780, 0x190c, 0x64ce, 0xd0a4, 0x1d00, 0x0e04,
++      0x6259, 0x7838, 0x7938, 0x910e, 0x1de0, 0x00d6, 0x2069, 0x0000,
++      0x6836, 0x6833, 0x0013, 0x00de, 0x2001, 0x1915, 0x200c, 0xc184,
++      0x2102, 0x2091, 0x4080, 0x2001, 0x0089, 0x2004, 0xd084, 0x190c,
++      0x113e, 0x2009, 0x1917, 0x200b, 0x0000, 0x00fe, 0x002e, 0x00ee,
++      0x0005, 0x2001, 0x1915, 0x200c, 0xc185, 0x2102, 0x00fe, 0x002e,
++      0x00ee, 0x0005, 0x9016, 0x702c, 0x2148, 0xa904, 0xa802, 0x8210,
++      0x2900, 0x81ff, 0x1dc8, 0x702e, 0x70bc, 0x9200, 0x70be, 0x0804,
++      0x6217, 0x0096, 0x00e6, 0x7824, 0x2048, 0x2071, 0x1800, 0x702c,
++      0xa802, 0x2900, 0x702e, 0x70bc, 0x8000, 0x70be, 0x782c, 0x9094,
++      0x0780, 0x190c, 0x64ce, 0xd0a4, 0x1d70, 0x00ee, 0x0e04, 0x62b3,
++      0x7838, 0x7938, 0x910e, 0x1de0, 0x00d6, 0x2069, 0x0000, 0x6836,
++      0x6833, 0x0013, 0x00de, 0x7044, 0xc084, 0x7046, 0x2091, 0x4080,
++      0x2001, 0x0089, 0x2004, 0xd084, 0x190c, 0x113e, 0x2009, 0x1917,
++      0x200b, 0x0000, 0x782c, 0x9094, 0x0780, 0x190c, 0x64ce, 0xd09c,
++      0x1170, 0x009e, 0x2900, 0x7822, 0xa804, 0x900d, 0x11e0, 0x00fe,
++      0x002e, 0x00ee, 0x0005, 0x7044, 0xc085, 0x7046, 0x0c58, 0x009e,
++      0x2908, 0x7010, 0x8000, 0x7012, 0x7018, 0x904d, 0x711a, 0x0110,
++      0xa902, 0x0008, 0x711e, 0x2148, 0xa804, 0x900d, 0x1120, 0x00fe,
++      0x002e, 0x00ee, 0x0005, 0x2071, 0x1800, 0x9016, 0x702c, 0x2148,
++      0xa904, 0xa802, 0x8210, 0x2900, 0x81ff, 0x1dc8, 0x702e, 0x70bc,
++      0x9200, 0x70be, 0x00fe, 0x002e, 0x00ee, 0x0005, 0x2908, 0x7010,
++      0x8000, 0x7012, 0x7018, 0x904d, 0x711a, 0x0110, 0xa902, 0x0008,
++      0x711e, 0x2148, 0xa804, 0x900d, 0x1904, 0x634d, 0x782c, 0x9094,
++      0x0780, 0x190c, 0x64ce, 0xd09c, 0x11b0, 0x701c, 0x904d, 0x0198,
++      0xa84c, 0x9005, 0x1180, 0x7010, 0x8001, 0x7012, 0x1108, 0x701a,
++      0xa800, 0x701e, 0x2900, 0x7822, 0x782c, 0x9094, 0x0780, 0x190c,
++      0x64ce, 0xd09c, 0x0d50, 0x782c, 0x9094, 0x0780, 0x190c, 0x64ce,
++      0xd0a4, 0x05b8, 0x00e6, 0x7824, 0x2048, 0x2071, 0x1800, 0x702c,
++      0xa802, 0x2900, 0x702e, 0x70bc, 0x8000, 0x70be, 0x782c, 0x9094,
++      0x0780, 0x190c, 0x64ce, 0xd0a4, 0x1d70, 0x00ee, 0x0e04, 0x6346,
++      0x7838, 0x7938, 0x910e, 0x1de0, 0x00d6, 0x2069, 0x0000, 0x6836,
++      0x6833, 0x0013, 0x00de, 0x7044, 0xc084, 0x7046, 0x2091, 0x4080,
++      0x2001, 0x0089, 0x2004, 0xd084, 0x190c, 0x113e, 0x2009, 0x1917,
++      0x200b, 0x0000, 0x00fe, 0x002e, 0x00ee, 0x0005, 0x7044, 0xc085,
++      0x7046, 0x00fe, 0x002e, 0x00ee, 0x0005, 0x00e6, 0x2071, 0x1800,
++      0x9016, 0x702c, 0x2148, 0xa904, 0xa802, 0x8210, 0x2900, 0x81ff,
++      0x1dc8, 0x702e, 0x70bc, 0x9200, 0x70be, 0x00ee, 0x0804, 0x62ee,
++      0x2071, 0x1904, 0xa803, 0x0000, 0x2908, 0x7010, 0x8000, 0x7012,
++      0x7018, 0x904d, 0x711a, 0x0110, 0xa902, 0x0008, 0x711e, 0x2148,
++      0xa804, 0x900d, 0x1128, 0x1e04, 0x6389, 0x002e, 0x00ee, 0x0005,
++      0x2071, 0x1800, 0x9016, 0x702c, 0x2148, 0xa904, 0xa802, 0x8210,
++      0x2900, 0x81ff, 0x1dc8, 0x702e, 0x70bc, 0x9200, 0x70be, 0x0e04,
++      0x6375, 0x2071, 0x1904, 0x701c, 0x2048, 0xa84c, 0x900d, 0x0d28,
++      0x2071, 0x0000, 0x7182, 0xa850, 0x7032, 0xa86c, 0x7086, 0x7036,
++      0xa870, 0x708a, 0x2091, 0x4080, 0x2001, 0x0089, 0x2004, 0xd084,
++      0x190c, 0x113e, 0x2071, 0x1904, 0x080c, 0x64ba, 0x002e, 0x00ee,
++      0x0005, 0x2071, 0x1904, 0xa803, 0x0000, 0x2908, 0x7010, 0x8000,
++      0x7012, 0x7018, 0x904d, 0x711a, 0x0110, 0xa902, 0x0008, 0x711e,
++      0x2148, 0xa804, 0x900d, 0x1118, 0x002e, 0x00ee, 0x0005, 0x2071,
++      0x1800, 0x9016, 0x702c, 0x2148, 0xa904, 0xa802, 0x8210, 0x2900,
++      0x81ff, 0x1dc8, 0x702e, 0x70bc, 0x9200, 0x70be, 0x002e, 0x00ee,
++      0x0005, 0x0006, 0xa87c, 0x0006, 0xa867, 0x0103, 0x20a9, 0x001c,
++      0xa860, 0x20e8, 0xa85c, 0x9080, 0x001d, 0x20a0, 0x9006, 0x4004,
++      0x000e, 0x9084, 0x00ff, 0xa87e, 0x000e, 0xa87a, 0xa982, 0x0005,
++      0x2071, 0x1904, 0x7004, 0x0002, 0x63f2, 0x63f3, 0x64b9, 0x63f3,
++      0x0d84, 0x64b9, 0x0005, 0x2001, 0x1918, 0x2004, 0x0002, 0x63fd,
++      0x63fd, 0x6452, 0x6453, 0x63fd, 0x6453, 0x0126, 0x2091, 0x8000,
++      0x1e0c, 0x64d9, 0x701c, 0x904d, 0x01e0, 0xa84c, 0x9005, 0x01d8,
++      0x0e04, 0x6421, 0xa94c, 0x2071, 0x0000, 0x7182, 0xa850, 0x7032,
++      0xa86c, 0x7086, 0x7036, 0xa870, 0x708a, 0x2091, 0x4080, 0x2001,
++      0x0089, 0x2004, 0xd084, 0x190c, 0x113e, 0x2071, 0x1904, 0x080c,
++      0x64ba, 0x012e, 0x0470, 0x2001, 0x005b, 0x2004, 0x9094, 0x0780,
++      0x190c, 0x64ce, 0xd09c, 0x2071, 0x1904, 0x1510, 0x2071, 0x1904,
++      0x700f, 0x0001, 0xa964, 0x9184, 0x00ff, 0x9086, 0x0003, 0x1130,
++      0x810f, 0x918c, 0x00ff, 0x8101, 0x0108, 0x710e, 0x2900, 0x00d6,
++      0x2069, 0x0050, 0x6822, 0x00de, 0x2071, 0x1904, 0x701c, 0x2048,
++      0x7010, 0x8001, 0x7012, 0xa800, 0x701e, 0x9005, 0x1108, 0x701a,
++      0x012e, 0x0005, 0x0005, 0x00d6, 0x2008, 0x2069, 0x19c7, 0x6840,
++      0x9005, 0x0760, 0x0158, 0x9186, 0x0003, 0x0540, 0x2001, 0x1813,
++      0x2004, 0x2009, 0x1a8a, 0x210c, 0x9102, 0x1500, 0x0126, 0x2091,
++      0x8000, 0x2069, 0x0050, 0x693c, 0x6838, 0x9106, 0x0190, 0x0e04,
++      0x6485, 0x2069, 0x0000, 0x6837, 0x8040, 0x6833, 0x0012, 0x6883,
++      0x8040, 0x2091, 0x4080, 0x2001, 0x0089, 0x2004, 0xd084, 0x190c,
++      0x113e, 0x2069, 0x19c7, 0x6843, 0xffff, 0x012e, 0x00de, 0x0126,
++      0x2091, 0x8000, 0x1e0c, 0x654b, 0x701c, 0x904d, 0x0540, 0x2001,
++      0x005b, 0x2004, 0x9094, 0x0780, 0x15c9, 0xd09c, 0x1500, 0x2071,
++      0x1904, 0x700f, 0x0001, 0xa964, 0x9184, 0x00ff, 0x9086, 0x0003,
++      0x1130, 0x810f, 0x918c, 0x00ff, 0x8101, 0x0108, 0x710e, 0x2900,
++      0x00d6, 0x2069, 0x0050, 0x6822, 0x00de, 0x701c, 0x2048, 0x7010,
++      0x8001, 0x7012, 0xa800, 0x701e, 0x9005, 0x1108, 0x701a, 0x012e,
++      0x0005, 0x0005, 0x0126, 0x2091, 0x8000, 0x701c, 0x904d, 0x0160,
++      0x7010, 0x8001, 0x7012, 0xa800, 0x701e, 0x9005, 0x1108, 0x701a,
++      0x012e, 0x080c, 0x0fe0, 0x0005, 0x012e, 0x0005, 0x2091, 0x8000,
++      0x0e04, 0x64d0, 0x0006, 0x0016, 0x2001, 0x8004, 0x0006, 0x0804,
++      0x0d8d, 0x0096, 0x00f6, 0x2079, 0x0050, 0x7044, 0xd084, 0x01e0,
++      0xc084, 0x7046, 0x7838, 0x7938, 0x910e, 0x1de0, 0x00d6, 0x2069,
++      0x0000, 0x6836, 0x6833, 0x0013, 0x00de, 0x2091, 0x4080, 0x2001,
++      0x0089, 0x2004, 0xd084, 0x190c, 0x113e, 0x2009, 0x1917, 0x200b,
++      0x0000, 0x00fe, 0x009e, 0x0005, 0x782c, 0x9094, 0x0780, 0x1971,
++      0xd0a4, 0x0db8, 0x2001, 0x1918, 0x2004, 0x2009, 0x1917, 0x2104,
++      0x8000, 0x200a, 0x9082, 0x000f, 0x0e60, 0x00e6, 0x2071, 0x1800,
++      0x7824, 0x00e6, 0x2071, 0x0040, 0x712c, 0xd19c, 0x1148, 0x2009,
++      0x182f, 0x210c, 0x918a, 0x0040, 0x0218, 0x7022, 0x00ee, 0x0048,
++      0x00ee, 0x2048, 0x702c, 0xa802, 0x2900, 0x702e, 0x70bc, 0x8000,
++      0x70be, 0x782c, 0x9094, 0x0780, 0x190c, 0x64ce, 0xd0a4, 0x1d00,
++      0x7838, 0x7938, 0x910e, 0x1de0, 0x00d6, 0x2069, 0x0000, 0x6836,
++      0x6833, 0x0013, 0x00de, 0x2091, 0x4080, 0x2001, 0x0089, 0x2004,
++      0xd084, 0x190c, 0x113e, 0x2009, 0x1917, 0x200b, 0x0000, 0x00ee,
++      0x00fe, 0x009e, 0x0005, 0x00f6, 0x2079, 0x0050, 0x7044, 0xd084,
++      0x01b8, 0xc084, 0x7046, 0x7838, 0x7938, 0x910e, 0x1de0, 0x00d6,
++      0x2069, 0x0000, 0x6836, 0x6833, 0x0013, 0x00de, 0x2091, 0x4080,
++      0x2001, 0x0089, 0x2004, 0xd084, 0x190c, 0x113e, 0x00fe, 0x0005,
++      0x782c, 0x9094, 0x0780, 0x190c, 0x64ce, 0xd0a4, 0x0db8, 0x00e6,
++      0x2071, 0x1800, 0x7824, 0x2048, 0x702c, 0xa802, 0x2900, 0x702e,
++      0x70bc, 0x8000, 0x70be, 0x782c, 0x9094, 0x0780, 0x190c, 0x64ce,
++      0xd0a4, 0x1d80, 0x00d6, 0x2069, 0x0050, 0x693c, 0x2069, 0x1918,
++      0x6808, 0x690a, 0x2069, 0x19c7, 0x9102, 0x1118, 0x6840, 0x9005,
++      0x1328, 0x2001, 0x1919, 0x200c, 0x810d, 0x6942, 0x00de, 0x00ee,
++      0x00fe, 0x0005, 0x7090, 0x908a, 0x0029, 0x1a0c, 0x0d84, 0x9082,
++      0x001d, 0x001b, 0x6027, 0x1e00, 0x0005, 0x666d, 0x65f7, 0x6613,
++      0x663b, 0x665c, 0x669c, 0x66ae, 0x6613, 0x6684, 0x65b2, 0x65e0,
++      0x65b1, 0x0005, 0x00d6, 0x2069, 0x0200, 0x6804, 0x9005, 0x1180,
++      0x6808, 0x9005, 0x1518, 0x7093, 0x0028, 0x2069, 0x195c, 0x2d04,
++      0x7002, 0x080c, 0x69a3, 0x6028, 0x9085, 0x0600, 0x602a, 0x00b0,
++      0x7093, 0x0028, 0x2069, 0x195c, 0x2d04, 0x7002, 0x6028, 0x9085,
++      0x0600, 0x602a, 0x00e6, 0x0036, 0x0046, 0x0056, 0x2071, 0x1a30,
++      0x080c, 0x1827, 0x005e, 0x004e, 0x003e, 0x00ee, 0x00de, 0x0005,
++      0x00d6, 0x2069, 0x0200, 0x6804, 0x9005, 0x1178, 0x6808, 0x9005,
++      0x1160, 0x7093, 0x0028, 0x2069, 0x195c, 0x2d04, 0x7002, 0x080c,
++      0x6a2d, 0x6028, 0x9085, 0x0600, 0x602a, 0x00de, 0x0005, 0x0006,
++      0x2001, 0x0090, 0x080c, 0x28a5, 0x000e, 0x6124, 0xd1e4, 0x1190,
++      0x080c, 0x671b, 0xd1d4, 0x1160, 0xd1dc, 0x1138, 0xd1cc, 0x0150,
++      0x7093, 0x0020, 0x080c, 0x671b, 0x0028, 0x7093, 0x001d, 0x0010,
++      0x7093, 0x001f, 0x0005, 0x2001, 0x0088, 0x080c, 0x28a5, 0x6124,
++      0xd1cc, 0x11d8, 0xd1dc, 0x11b0, 0xd1e4, 0x1188, 0x9184, 0x1e00,
++      0x11c8, 0x60e3, 0x0001, 0x600c, 0xc0b4, 0x600e, 0x080c, 0x68a3,
++      0x2001, 0x0080, 0x080c, 0x28a5, 0x7093, 0x0028, 0x0058, 0x7093,
++      0x001e, 0x0040, 0x7093, 0x001d, 0x0028, 0x7093, 0x0020, 0x0010,
++      0x7093, 0x001f, 0x0005, 0x60e3, 0x0001, 0x600c, 0xc0b4, 0x600e,
++      0x080c, 0x68a3, 0x2001, 0x0080, 0x080c, 0x28a5, 0x6124, 0xd1d4,
++      0x1180, 0xd1dc, 0x1158, 0xd1e4, 0x1130, 0x9184, 0x1e00, 0x1158,
++      0x7093, 0x0028, 0x0040, 0x7093, 0x001e, 0x0028, 0x7093, 0x001d,
++      0x0010, 0x7093, 0x001f, 0x0005, 0x2001, 0x00a0, 0x080c, 0x28a5,
++      0x6124, 0xd1dc, 0x1138, 0xd1e4, 0x0138, 0x080c, 0x1851, 0x7093,
++      0x001e, 0x0010, 0x7093, 0x001d, 0x0005, 0x080c, 0x6794, 0x6124,
++      0xd1dc, 0x1188, 0x080c, 0x671b, 0x0016, 0x080c, 0x1851, 0x001e,
++      0xd1d4, 0x1128, 0xd1e4, 0x0138, 0x7093, 0x001e, 0x0020, 0x7093,
++      0x001f, 0x080c, 0x671b, 0x0005, 0x0006, 0x2001, 0x00a0, 0x080c,
++      0x28a5, 0x000e, 0x6124, 0xd1d4, 0x1160, 0xd1cc, 0x1150, 0xd1dc,
++      0x1128, 0xd1e4, 0x0140, 0x7093, 0x001e, 0x0028, 0x7093, 0x001d,
++      0x0010, 0x7093, 0x0021, 0x0005, 0x080c, 0x6794, 0x6124, 0xd1d4,
++      0x1150, 0xd1dc, 0x1128, 0xd1e4, 0x0140, 0x7093, 0x001e, 0x0028,
++      0x7093, 0x001d, 0x0010, 0x7093, 0x001f, 0x0005, 0x0006, 0x2001,
++      0x0090, 0x080c, 0x28a5, 0x000e, 0x6124, 0xd1d4, 0x1178, 0xd1cc,
++      0x1150, 0xd1dc, 0x1128, 0xd1e4, 0x0158, 0x7093, 0x001e, 0x0040,
++      0x7093, 0x001d, 0x0028, 0x7093, 0x0020, 0x0010, 0x7093, 0x001f,
++      0x0005, 0x0016, 0x00c6, 0x00d6, 0x00e6, 0x0126, 0x2061, 0x0100,
++      0x2069, 0x0140, 0x2071, 0x1800, 0x2091, 0x8000, 0x080c, 0x6877,
++      0x11d8, 0x2001, 0x180c, 0x200c, 0xd1b4, 0x01b0, 0xc1b4, 0x2102,
++      0x6027, 0x0200, 0x080c, 0x27ef, 0x6024, 0xd0cc, 0x0148, 0x2001,
++      0x00a0, 0x080c, 0x28a5, 0x080c, 0x6b40, 0x080c, 0x56d9, 0x0428,
++      0x6028, 0xc0cd, 0x602a, 0x0408, 0x080c, 0x6891, 0x0150, 0x080c,
++      0x6888, 0x1138, 0x2001, 0x0001, 0x080c, 0x23a6, 0x080c, 0x6853,
++      0x00a0, 0x080c, 0x6791, 0x0178, 0x2001, 0x0001, 0x080c, 0x23a6,
++      0x7090, 0x9086, 0x001e, 0x0120, 0x7090, 0x9086, 0x0022, 0x1118,
++      0x7093, 0x0025, 0x0010, 0x7093, 0x0021, 0x012e, 0x00ee, 0x00de,
++      0x00ce, 0x001e, 0x0005, 0x0026, 0x2011, 0x672c, 0x080c, 0x78e7,
++      0x002e, 0x0016, 0x0026, 0x2009, 0x0064, 0x2011, 0x672c, 0x080c,
++      0x78de, 0x002e, 0x001e, 0x0005, 0x00e6, 0x00f6, 0x0016, 0x080c,
++      0x8b50, 0x2071, 0x1800, 0x080c, 0x66c9, 0x001e, 0x00fe, 0x00ee,
++      0x0005, 0x0016, 0x0026, 0x0036, 0x00c6, 0x00d6, 0x00e6, 0x00f6,
++      0x0126, 0x080c, 0x8b50, 0x2061, 0x0100, 0x2069, 0x0140, 0x2071,
++      0x1800, 0x2091, 0x8000, 0x6028, 0xc09c, 0x602a, 0x2011, 0x0003,
++      0x080c, 0x8e99, 0x2011, 0x0002, 0x080c, 0x8ea3, 0x080c, 0x8d59,
++      0x080c, 0x7893, 0x0036, 0x901e, 0x080c, 0x8dfe, 0x003e, 0x60e3,
++      0x0000, 0x080c, 0xcd0a, 0x080c, 0xcd25, 0x2009, 0x0004, 0x080c,
++      0x27f5, 0x080c, 0x2718, 0x2001, 0x1800, 0x2003, 0x0004, 0x6027,
++      0x0008, 0x080c, 0x0b69, 0x2001, 0x0001, 0x080c, 0x23a6, 0x012e,
++      0x00fe, 0x00ee, 0x00de, 0x00ce, 0x003e, 0x002e, 0x001e, 0x0005,
++      0x0026, 0x00e6, 0x2011, 0x6739, 0x2071, 0x19c7, 0x701c, 0x9206,
++      0x1118, 0x7018, 0x9005, 0x0110, 0x9085, 0x0001, 0x00ee, 0x002e,
++      0x0005, 0x6020, 0xd09c, 0x0005, 0x6800, 0x9084, 0xfffe, 0x9086,
++      0x00c0, 0x01b8, 0x2001, 0x00c0, 0x080c, 0x28a5, 0x0156, 0x20a9,
++      0x002d, 0x1d04, 0x67a1, 0x2091, 0x6000, 0x1f04, 0x67a1, 0x015e,
++      0x00d6, 0x2069, 0x1800, 0x6894, 0x8001, 0x0220, 0x0118, 0x6896,
++      0x00de, 0x0005, 0x6897, 0x0014, 0x68ec, 0xd0dc, 0x0dc8, 0x6800,
++      0x9086, 0x0001, 0x1da8, 0x080c, 0x78f3, 0x0c90, 0x00c6, 0x00d6,
++      0x00e6, 0x2061, 0x0100, 0x2069, 0x0140, 0x2071, 0x1800, 0x2001,
++      0x194c, 0x200c, 0x9186, 0x0000, 0x0158, 0x9186, 0x0001, 0x0158,
++      0x9186, 0x0002, 0x0158, 0x9186, 0x0003, 0x0158, 0x0804, 0x6843,
++      0x7093, 0x0022, 0x0040, 0x7093, 0x0021, 0x0028, 0x7093, 0x0023,
++      0x0010, 0x7093, 0x0024, 0x60e3, 0x0000, 0x6887, 0x0001, 0x2001,
++      0x0001, 0x080c, 0x2471, 0x0026, 0x080c, 0x94da, 0x002e, 0x7000,
++      0x908e, 0x0004, 0x0118, 0x602b, 0x0028, 0x0010, 0x602b, 0x0020,
++      0x0156, 0x0126, 0x2091, 0x8000, 0x20a9, 0x0005, 0x6024, 0xd0ac,
++      0x0120, 0x012e, 0x015e, 0x0804, 0x684f, 0x6800, 0x9084, 0x00a1,
++      0xc0bd, 0x6802, 0x080c, 0x27ef, 0x6904, 0xd1d4, 0x1140, 0x2001,
++      0x0100, 0x080c, 0x28a5, 0x1f04, 0x67fe, 0x080c, 0x68d0, 0x012e,
++      0x015e, 0x080c, 0x6888, 0x01a8, 0x6044, 0x9005, 0x0168, 0x6050,
++      0x0006, 0x9085, 0x0020, 0x6052, 0x080c, 0x68d0, 0x9006, 0x8001,
++      0x1df0, 0x000e, 0x6052, 0x0028, 0x6804, 0xd0d4, 0x1110, 0x080c,
++      0x68d0, 0x0016, 0x0026, 0x7000, 0x908e, 0x0004, 0x0130, 0x2009,
++      0x00c8, 0x2011, 0x6739, 0x080c, 0x78a5, 0x002e, 0x001e, 0x2001,
++      0x194c, 0x2003, 0x0004, 0x080c, 0x659a, 0x080c, 0x6888, 0x0138,
++      0x6804, 0xd0d4, 0x1120, 0xd0dc, 0x1100, 0x080c, 0x6b45, 0x00ee,
++      0x00de, 0x00ce, 0x0005, 0x00c6, 0x00d6, 0x00e6, 0x2061, 0x0100,
++      0x2069, 0x0140, 0x2071, 0x1800, 0x080c, 0x6b4f, 0x2001, 0x193c,
++      0x2003, 0x0000, 0x9006, 0x7092, 0x60e2, 0x6886, 0x080c, 0x2471,
++      0x9006, 0x080c, 0x28a5, 0x6043, 0x0090, 0x6043, 0x0010, 0x6027,
++      0xffff, 0x602b, 0x182f, 0x00ee, 0x00de, 0x00ce, 0x0005, 0x0006,
++      0x2001, 0x194b, 0x2004, 0x9086, 0xaaaa, 0x000e, 0x0005, 0x0006,
++      0x080c, 0x4dee, 0x9084, 0x0030, 0x9086, 0x0000, 0x000e, 0x0005,
++      0x0006, 0x080c, 0x4dee, 0x9084, 0x0030, 0x9086, 0x0030, 0x000e,
++      0x0005, 0x0006, 0x080c, 0x4dee, 0x9084, 0x0030, 0x9086, 0x0010,
++      0x000e, 0x0005, 0x0006, 0x080c, 0x4dee, 0x9084, 0x0030, 0x9086,
++      0x0020, 0x000e, 0x0005, 0x0036, 0x0016, 0x2001, 0x180c, 0x2004,
++      0x908c, 0x0013, 0x0190, 0x9084, 0x0011, 0x0120, 0x080c, 0x2491,
++      0x900e, 0x0028, 0x080c, 0x5f25, 0x1dc8, 0x2009, 0x0002, 0x2019,
++      0x0028, 0x080c, 0x2ce5, 0x9006, 0x0019, 0x001e, 0x003e, 0x0005,
++      0x00e6, 0x2071, 0x180c, 0x2e04, 0x0130, 0x080c, 0xb752, 0x1128,
++      0x9085, 0x0010, 0x0010, 0x9084, 0xffef, 0x2072, 0x00ee, 0x0005,
++      0x6050, 0x0006, 0x60ec, 0x0006, 0x600c, 0x0006, 0x6004, 0x0006,
++      0x6028, 0x0006, 0x0016, 0x6138, 0x6050, 0x9084, 0xfbff, 0x9085,
++      0x2000, 0x6052, 0x613a, 0x20a9, 0x0012, 0x1d04, 0x68e5, 0x2091,
++      0x6000, 0x1f04, 0x68e5, 0x602f, 0x0100, 0x602f, 0x0000, 0x6050,
++      0x9085, 0x0400, 0x9084, 0xdfff, 0x6052, 0x613a, 0x001e, 0x602f,
++      0x0040, 0x602f, 0x0000, 0x000e, 0x602a, 0x000e, 0x6006, 0x000e,
++      0x600e, 0x000e, 0x60ee, 0x60e3, 0x0000, 0x6887, 0x0001, 0x2001,
++      0x0001, 0x080c, 0x2471, 0x2001, 0x00a0, 0x080c, 0x28a5, 0x000e,
++      0x6052, 0x6058, 0x0006, 0xc0e5, 0x605a, 0x00f6, 0x2079, 0x0100,
++      0x080c, 0x2764, 0x00fe, 0x000e, 0x605a, 0x0005, 0x0156, 0x0016,
++      0x0026, 0x0036, 0x00c6, 0x00d6, 0x00e6, 0x2061, 0x0100, 0x2069,
++      0x0140, 0x2071, 0x1800, 0x6020, 0x9084, 0x0080, 0x0138, 0x2001,
++      0x180c, 0x200c, 0xc1c5, 0x2102, 0x0804, 0x6996, 0x2001, 0x180c,
++      0x200c, 0xc1c4, 0x2102, 0x6028, 0x9084, 0xe1ff, 0x602a, 0x6027,
++      0x0200, 0x2001, 0x0090, 0x080c, 0x28a5, 0x20a9, 0x0366, 0x6024,
++      0xd0cc, 0x11f0, 0x1d04, 0x6947, 0x2091, 0x6000, 0x1f04, 0x6947,
++      0x2011, 0x0003, 0x080c, 0x8e99, 0x2011, 0x0002, 0x080c, 0x8ea3,
++      0x080c, 0x8d59, 0x901e, 0x080c, 0x8dfe, 0x2001, 0x00a0, 0x080c,
++      0x28a5, 0x080c, 0x6b40, 0x080c, 0x56d9, 0x9085, 0x0001, 0x0470,
++      0x86ff, 0x1110, 0x080c, 0x1851, 0x60e3, 0x0000, 0x2001, 0x193c,
++      0x2004, 0x080c, 0x2471, 0x60e2, 0x2001, 0x0080, 0x080c, 0x28a5,
++      0x20a9, 0x0366, 0x6027, 0x1e00, 0x2009, 0x1e00, 0x080c, 0x27ef,
++      0x6024, 0x910c, 0x0138, 0x1d04, 0x697a, 0x2091, 0x6000, 0x1f04,
++      0x697a, 0x0830, 0x6028, 0x9085, 0x1e00, 0x602a, 0x70ac, 0x9005,
++      0x1118, 0x6887, 0x0001, 0x0008, 0x6886, 0x9006, 0x080c, 0xb759,
++      0x0110, 0x080c, 0x0cfc, 0x00ee, 0x00de, 0x00ce, 0x003e, 0x002e,
++      0x001e, 0x015e, 0x0005, 0x0156, 0x0016, 0x0026, 0x0036, 0x00c6,
++      0x00d6, 0x00e6, 0x2061, 0x0100, 0x2071, 0x1800, 0x2069, 0x0140,
++      0x6020, 0x9084, 0x00c0, 0x0120, 0x6884, 0x9005, 0x1904, 0x69f7,
++      0x2001, 0x0088, 0x080c, 0x28a5, 0x9006, 0x60e2, 0x6886, 0x080c,
++      0x2471, 0x2069, 0x0200, 0x6804, 0x9005, 0x1118, 0x6808, 0x9005,
++      0x01c0, 0x6028, 0x9084, 0xfbff, 0x602a, 0x6027, 0x0400, 0x2069,
++      0x195c, 0x7000, 0x206a, 0x7093, 0x0026, 0x7003, 0x0001, 0x20a9,
++      0x0002, 0x1d04, 0x69d9, 0x2091, 0x6000, 0x1f04, 0x69d9, 0x0804,
++      0x6a25, 0x2069, 0x0140, 0x20a9, 0x0384, 0x6027, 0x1e00, 0x2009,
++      0x1e00, 0x080c, 0x27ef, 0x6024, 0x910c, 0x0508, 0x9084, 0x1a00,
++      0x11f0, 0x1d04, 0x69e5, 0x2091, 0x6000, 0x1f04, 0x69e5, 0x2011,
++      0x0003, 0x080c, 0x8e99, 0x2011, 0x0002, 0x080c, 0x8ea3, 0x080c,
++      0x8d59, 0x901e, 0x080c, 0x8dfe, 0x2001, 0x00a0, 0x080c, 0x28a5,
++      0x080c, 0x6b40, 0x080c, 0x56d9, 0x9085, 0x0001, 0x00b0, 0x2001,
++      0x0080, 0x080c, 0x28a5, 0x2069, 0x0140, 0x60e3, 0x0000, 0x70ac,
++      0x9005, 0x1118, 0x6887, 0x0001, 0x0008, 0x6886, 0x2001, 0x193c,
++      0x2004, 0x080c, 0x2471, 0x60e2, 0x9006, 0x00ee, 0x00de, 0x00ce,
++      0x003e, 0x002e, 0x001e, 0x015e, 0x0005, 0x0156, 0x0016, 0x0026,
++      0x0036, 0x00c6, 0x00d6, 0x00e6, 0x2061, 0x0100, 0x2071, 0x1800,
++      0x6020, 0x9084, 0x00c0, 0x01c8, 0x2011, 0x0003, 0x080c, 0x8e99,
++      0x2011, 0x0002, 0x080c, 0x8ea3, 0x080c, 0x8d59, 0x901e, 0x080c,
++      0x8dfe, 0x2069, 0x0140, 0x2001, 0x00a0, 0x080c, 0x28a5, 0x080c,
++      0x6b40, 0x080c, 0x56d9, 0x0804, 0x6ac0, 0x2001, 0x180c, 0x200c,
++      0xd1b4, 0x1160, 0xc1b5, 0x2102, 0x080c, 0x6721, 0x2069, 0x0140,
++      0x2001, 0x0080, 0x080c, 0x28a5, 0x60e3, 0x0000, 0x2069, 0x0200,
++      0x6804, 0x9005, 0x1118, 0x6808, 0x9005, 0x0180, 0x6028, 0x9084,
++      0xfdff, 0x602a, 0x6027, 0x0200, 0x2069, 0x195c, 0x7000, 0x206a,
++      0x7093, 0x0027, 0x7003, 0x0001, 0x0804, 0x6ac0, 0x6027, 0x1e00,
++      0x2009, 0x1e00, 0x080c, 0x27ef, 0x6024, 0x910c, 0x01c8, 0x9084,
++      0x1c00, 0x11b0, 0x1d04, 0x6a7e, 0x0006, 0x0016, 0x00c6, 0x00d6,
++      0x00e6, 0x080c, 0x7778, 0x00ee, 0x00de, 0x00ce, 0x001e, 0x000e,
++      0x00e6, 0x2071, 0x19c7, 0x7018, 0x00ee, 0x9005, 0x19f8, 0x0500,
++      0x0026, 0x2011, 0x6739, 0x080c, 0x781a, 0x2011, 0x672c, 0x080c,
++      0x78e7, 0x002e, 0x2069, 0x0140, 0x60e3, 0x0000, 0x70ac, 0x9005,
++      0x1118, 0x6887, 0x0001, 0x0008, 0x6886, 0x2001, 0x193c, 0x2004,
++      0x080c, 0x2471, 0x60e2, 0x2001, 0x180c, 0x200c, 0xc1b4, 0x2102,
++      0x00ee, 0x00de, 0x00ce, 0x003e, 0x002e, 0x001e, 0x015e, 0x0005,
++      0x0156, 0x0016, 0x0026, 0x0036, 0x0046, 0x00c6, 0x00e6, 0x2061,
++      0x0100, 0x2071, 0x1800, 0x080c, 0xb752, 0x1904, 0x6b2e, 0x7130,
++      0xd184, 0x1170, 0x080c, 0x2e69, 0x0138, 0xc18d, 0x7132, 0x2011,
++      0x1853, 0x2214, 0xd2ac, 0x1120, 0x7030, 0xd08c, 0x0904, 0x6b2e,
++      0x2011, 0x1853, 0x220c, 0xd1a4, 0x0538, 0x0016, 0x2019, 0x000e,
++      0x080c, 0xc941, 0x0156, 0x00b6, 0x20a9, 0x007f, 0x900e, 0x9186,
++      0x007e, 0x01a0, 0x9186, 0x0080, 0x0188, 0x080c, 0x5c0d, 0x1170,
++      0x2120, 0x9006, 0x0016, 0x2009, 0x000e, 0x080c, 0xc9c5, 0x2009,
++      0x0001, 0x2011, 0x0100, 0x080c, 0x7a0a, 0x001e, 0x8108, 0x1f04,
++      0x6af7, 0x00be, 0x015e, 0x001e, 0xd1ac, 0x1148, 0x0016, 0x2009,
++      0x0002, 0x2019, 0x0004, 0x080c, 0x2ce5, 0x001e, 0x0078, 0x0156,
++      0x00b6, 0x20a9, 0x007f, 0x900e, 0x080c, 0x5c0d, 0x1110, 0x080c,
++      0x56f3, 0x8108, 0x1f04, 0x6b24, 0x00be, 0x015e, 0x080c, 0x1851,
++      0x080c, 0x94da, 0x60e3, 0x0000, 0x080c, 0x56d9, 0x080c, 0x67be,
++      0x00ee, 0x00ce, 0x004e, 0x003e, 0x002e, 0x001e, 0x015e, 0x0005,
++      0x2001, 0x194c, 0x2003, 0x0001, 0x0005, 0x2001, 0x194c, 0x2003,
++      0x0000, 0x0005, 0x2001, 0x194b, 0x2003, 0xaaaa, 0x0005, 0x2001,
++      0x194b, 0x2003, 0x0000, 0x0005, 0x2071, 0x18ee, 0x7003, 0x0000,
++      0x7007, 0x0000, 0x080c, 0x0fc7, 0x090c, 0x0d84, 0xa8ab, 0xdcb0,
++      0x2900, 0x704e, 0x080c, 0x0fc7, 0x090c, 0x0d84, 0xa8ab, 0xdcb0,
++      0x2900, 0x7052, 0xa867, 0x0000, 0xa86b, 0x0001, 0xa89f, 0x0000,
++      0x0005, 0x00e6, 0x2071, 0x0040, 0x6848, 0x9005, 0x1118, 0x9085,
++      0x0001, 0x04b0, 0x6840, 0x9005, 0x0150, 0x04a1, 0x6a50, 0x9200,
++      0x7002, 0x6854, 0x9101, 0x7006, 0x9006, 0x7012, 0x7016, 0x6850,
++      0x7002, 0x6854, 0x7006, 0x6858, 0x700a, 0x685c, 0x700e, 0x6840,
++      0x9005, 0x1110, 0x7012, 0x7016, 0x6848, 0x701a, 0x701c, 0x9085,
++      0x0040, 0x701e, 0x2001, 0x0019, 0x7036, 0x702b, 0x0001, 0x2001,
++      0x0004, 0x200c, 0x918c, 0xfff7, 0x918d, 0x8000, 0x2102, 0x00d6,
++      0x2069, 0x18ee, 0x6807, 0x0001, 0x00de, 0x080c, 0x70f9, 0x9006,
++      0x00ee, 0x0005, 0x900e, 0x0156, 0x20a9, 0x0006, 0x8003, 0x2011,
++      0x0100, 0x2214, 0x9296, 0x0008, 0x1110, 0x818d, 0x0010, 0x81f5,
++      0x3e08, 0x1f04, 0x6bb6, 0x015e, 0x0005, 0x2079, 0x0040, 0x2071,
++      0x18ee, 0x7004, 0x0002, 0x6bd5, 0x6bd6, 0x6c0b, 0x6c66, 0x6d61,
++      0x6bd3, 0x6bd3, 0x6d8b, 0x080c, 0x0d84, 0x0005, 0x2079, 0x0040,
++      0x782c, 0x908c, 0x0780, 0x190c, 0x7185, 0xd0a4, 0x01f0, 0x7824,
++      0x2048, 0x9006, 0xa802, 0xa806, 0xa864, 0x9084, 0x00ff, 0x908a,
++      0x0040, 0x12c0, 0x04db, 0x2001, 0x1800, 0x200c, 0x9186, 0x0003,
++      0x1160, 0x7104, 0x9186, 0x0004, 0x0140, 0x9186, 0x0007, 0x0128,
++      0x9186, 0x0003, 0x19e8, 0x080c, 0x6c66, 0x782c, 0xd09c, 0x090c,
++      0x70f9, 0x0005, 0x9082, 0x005a, 0x1218, 0x2100, 0x002b, 0x0c18,
++      0x080c, 0x6c9c, 0x0c90, 0x0005, 0x6c9c, 0x6c9c, 0x6c9c, 0x6c9c,
++      0x6c9c, 0x6c9c, 0x6c9c, 0x6c9c, 0x6cbe, 0x6c9c, 0x6c9c, 0x6c9c,
++      0x6c9c, 0x6c9c, 0x6c9c, 0x6c9c, 0x6c9c, 0x6c9c, 0x6c9c, 0x6c9c,
++      0x6c9c, 0x6c9c, 0x6c9c, 0x6c9c, 0x6c9c, 0x6c9c, 0x6c9c, 0x6c9c,
++      0x6ca8, 0x6c9c, 0x6e60, 0x6c9c, 0x6c9c, 0x6c9c, 0x6c9c, 0x6c9c,
++      0x6ca8, 0x6ea1, 0x6ee2, 0x6f29, 0x6f3d, 0x6c9c, 0x6c9c, 0x6cbe,
++      0x6ca8, 0x6c9c, 0x6c9c, 0x6d35, 0x6fe8, 0x7003, 0x6c9c, 0x6cbe,
++      0x6c9c, 0x6c9c, 0x6c9c, 0x6c9c, 0x6d2b, 0x7003, 0x6c9c, 0x6c9c,
++      0x6c9c, 0x6c9c, 0x6c9c, 0x6c9c, 0x6c9c, 0x6c9c, 0x6c9c, 0x6cd2,
++      0x6c9c, 0x6c9c, 0x6c9c, 0x6c9c, 0x6c9c, 0x6c9c, 0x6c9c, 0x6c9c,
++      0x6c9c, 0x7129, 0x6c9c, 0x6c9c, 0x6c9c, 0x6c9c, 0x6c9c, 0x6ce6,
++      0x6c9c, 0x6c9c, 0x6c9c, 0x6c9c, 0x6c9c, 0x6c9c, 0x2079, 0x0040,
++      0x7004, 0x9086, 0x0003, 0x1198, 0x782c, 0x080c, 0x7122, 0xd0a4,
++      0x0170, 0x7824, 0x2048, 0x9006, 0xa802, 0xa806, 0xa864, 0x9084,
++      0x00ff, 0x908a, 0x001a, 0x1210, 0x002b, 0x0c50, 0x00e9, 0x080c,
++      0x70f9, 0x0005, 0x6c9c, 0x6ca8, 0x6e4c, 0x6c9c, 0x6ca8, 0x6c9c,
++      0x6ca8, 0x6ca8, 0x6c9c, 0x6ca8, 0x6e4c, 0x6ca8, 0x6ca8, 0x6ca8,
++      0x6ca8, 0x6ca8, 0x6c9c, 0x6ca8, 0x6e4c, 0x6c9c, 0x6c9c, 0x6ca8,
++      0x6c9c, 0x6c9c, 0x6c9c, 0x6ca8, 0x00e6, 0x2071, 0x18ee, 0x2009,
++      0x0400, 0x0071, 0x00ee, 0x0005, 0x2009, 0x1000, 0x0049, 0x0005,
++      0x2009, 0x2000, 0x0029, 0x0005, 0x2009, 0x0800, 0x0009, 0x0005,
++      0x7007, 0x0001, 0xa868, 0x9084, 0x00ff, 0x9105, 0xa86a, 0x0126,
++      0x2091, 0x8000, 0x080c, 0x61a9, 0x012e, 0x0005, 0xa864, 0x8007,
++      0x9084, 0x00ff, 0x0d08, 0x8001, 0x1120, 0x7007, 0x0001, 0x0804,
++      0x6e0a, 0x7007, 0x0003, 0x7012, 0x2900, 0x7016, 0x701a, 0x704b,
++      0x6e0a, 0x0005, 0xa864, 0x8007, 0x9084, 0x00ff, 0x0968, 0x8001,
++      0x1120, 0x7007, 0x0001, 0x0804, 0x6e25, 0x7007, 0x0003, 0x7012,
++      0x2900, 0x7016, 0x701a, 0x704b, 0x6e25, 0x0005, 0xa864, 0x8007,
++      0x9084, 0x00ff, 0x9086, 0x0001, 0x1904, 0x6ca4, 0x7007, 0x0001,
++      0x2009, 0x1833, 0x210c, 0x81ff, 0x11a8, 0xa868, 0x9084, 0x00ff,
++      0xa86a, 0xa883, 0x0000, 0x080c, 0x58e6, 0x1108, 0x0005, 0x0126,
++      0x2091, 0x8000, 0xa867, 0x0139, 0xa87a, 0xa982, 0x080c, 0x61a9,
++      0x012e, 0x0ca0, 0xa994, 0x9186, 0x0071, 0x0d38, 0x9186, 0x0064,
++      0x0d20, 0x9186, 0x007c, 0x0d08, 0x9186, 0x0028, 0x09f0, 0x9186,
++      0x0038, 0x09d8, 0x9186, 0x0078, 0x09c0, 0x9186, 0x005f, 0x09a8,
++      0x9186, 0x0056, 0x0990, 0xa897, 0x4005, 0xa89b, 0x0001, 0x2001,
++      0x0030, 0x900e, 0x08a0, 0xa87c, 0x9084, 0x00c0, 0x9086, 0x00c0,
++      0x1120, 0x7007, 0x0001, 0x0804, 0x701a, 0x2900, 0x7016, 0x701a,
++      0x20a9, 0x0004, 0xa860, 0x20e0, 0xa85c, 0x9080, 0x0030, 0x2098,
++      0x7050, 0x2040, 0xa060, 0x20e8, 0xa05c, 0x9080, 0x0023, 0x20a0,
++      0x4003, 0xa888, 0x7012, 0x9082, 0x0401, 0x1a04, 0x6cac, 0xaab4,
++      0x928a, 0x0002, 0x1a04, 0x6cac, 0x82ff, 0x1138, 0xa8b8, 0xa9bc,
++      0x9105, 0x0118, 0x2001, 0x6dc8, 0x0018, 0x9280, 0x6dbe, 0x2005,
++      0x7056, 0x7010, 0x9015, 0x0904, 0x6da9, 0x080c, 0x0fc7, 0x1118,
++      0x7007, 0x0004, 0x0005, 0x2900, 0x7022, 0x7054, 0x2060, 0xe000,
++      0xa866, 0xe004, 0x7050, 0x2040, 0xa95c, 0x9100, 0xa076, 0xa860,
++      0xa072, 0xe008, 0x920a, 0x1210, 0x900e, 0x2200, 0x7112, 0xe20c,
++      0x8003, 0x800b, 0x9296, 0x0004, 0x0108, 0x9108, 0xa17a, 0x810b,
++      0xa17e, 0x080c, 0x108c, 0xa06c, 0x908e, 0x0100, 0x0170, 0x9086,
++      0x0200, 0x0118, 0x7007, 0x0007, 0x0005, 0x7020, 0x2048, 0x080c,
++      0x0fe0, 0x7014, 0x2048, 0x0804, 0x6cac, 0x7020, 0x2048, 0x7018,
++      0xa802, 0xa807, 0x0000, 0x2908, 0x2048, 0xa906, 0x711a, 0x0804,
++      0x6d61, 0x7014, 0x2048, 0x7007, 0x0001, 0xa8b4, 0x9005, 0x1128,
++      0xa8b8, 0xa9bc, 0x9105, 0x0108, 0x00b9, 0xa864, 0x9084, 0x00ff,
++      0x9086, 0x001e, 0x0904, 0x701a, 0x0804, 0x6e0a, 0x6dc0, 0x6dc4,
++      0x0002, 0x001d, 0x0007, 0x0004, 0x000a, 0x001b, 0x0005, 0x0006,
++      0x000a, 0x001d, 0x0005, 0x0004, 0x0076, 0x0066, 0xafb8, 0xaebc,
++      0xa804, 0x2050, 0xb0c0, 0xb0e2, 0xb0bc, 0xb0de, 0xb0b8, 0xb0d2,
++      0xb0b4, 0xb0ce, 0xb6da, 0xb7d6, 0xb0b0, 0xb0ca, 0xb0ac, 0xb0c6,
++      0xb0a8, 0xb0ba, 0xb0a4, 0xb0b6, 0xb6c2, 0xb7be, 0xb0a0, 0xb0b2,
++      0xb09c, 0xb0ae, 0xb098, 0xb0a2, 0xb094, 0xb09e, 0xb6aa, 0xb7a6,
++      0xb090, 0xb09a, 0xb08c, 0xb096, 0xb088, 0xb08a, 0xb084, 0xb086,
++      0xb692, 0xb78e, 0xb080, 0xb082, 0xb07c, 0xb07e, 0xb078, 0xb072,
++      0xb074, 0xb06e, 0xb67a, 0xb776, 0xb004, 0x9055, 0x1958, 0x006e,
++      0x007e, 0x0005, 0x2009, 0x1833, 0x210c, 0x81ff, 0x1178, 0x080c,
++      0x5755, 0x1108, 0x0005, 0x080c, 0x63d1, 0x0126, 0x2091, 0x8000,
++      0x080c, 0xb374, 0x080c, 0x61a9, 0x012e, 0x0ca0, 0x080c, 0xb752,
++      0x1d70, 0x2001, 0x0028, 0x900e, 0x0c70, 0x2009, 0x1833, 0x210c,
++      0x81ff, 0x11d8, 0xa888, 0x9005, 0x01e0, 0xa883, 0x0000, 0xa87c,
++      0xd0f4, 0x0120, 0x080c, 0x5849, 0x1138, 0x0005, 0x9006, 0xa87a,
++      0x080c, 0x57e4, 0x1108, 0x0005, 0x0126, 0x2091, 0x8000, 0xa87a,
++      0xa982, 0x080c, 0x61a9, 0x012e, 0x0cb0, 0x2001, 0x0028, 0x900e,
++      0x0c98, 0x2001, 0x0000, 0x0c80, 0x7018, 0xa802, 0x2908, 0x2048,
++      0xa906, 0x711a, 0x7010, 0x8001, 0x7012, 0x0118, 0x7007, 0x0003,
++      0x0030, 0x7014, 0x2048, 0x7007, 0x0001, 0x7048, 0x080f, 0x0005,
++      0x00b6, 0x7007, 0x0001, 0xa974, 0xa878, 0x9084, 0x00ff, 0x9096,
++      0x0004, 0x0540, 0x20a9, 0x0001, 0x9096, 0x0001, 0x0190, 0x900e,
++      0x20a9, 0x0800, 0x9096, 0x0002, 0x0160, 0x9005, 0x11d8, 0xa974,
++      0x080c, 0x5c0d, 0x11b8, 0x0066, 0xae80, 0x080c, 0x5d1d, 0x006e,
++      0x0088, 0x0046, 0x2011, 0x180c, 0x2224, 0xc484, 0x2412, 0x004e,
++      0x00c6, 0x080c, 0x5c0d, 0x1110, 0x080c, 0x5e1d, 0x8108, 0x1f04,
++      0x6e89, 0x00ce, 0xa87c, 0xd084, 0x1120, 0x080c, 0x0fe0, 0x00be,
++      0x0005, 0x0126, 0x2091, 0x8000, 0x080c, 0x61a9, 0x012e, 0x00be,
++      0x0005, 0x0126, 0x2091, 0x8000, 0x7007, 0x0001, 0x080c, 0x5f29,
++      0x0580, 0x2061, 0x1a3d, 0x6100, 0xd184, 0x0178, 0xa888, 0x9084,
++      0x00ff, 0x1550, 0x6000, 0xd084, 0x0520, 0x6004, 0x9005, 0x1538,
++      0x6003, 0x0000, 0x600b, 0x0000, 0x00c8, 0x2011, 0x0001, 0xa890,
++      0x9005, 0x1110, 0x2001, 0x001e, 0x8000, 0x6016, 0xa888, 0x9084,
++      0x00ff, 0x0178, 0x6006, 0xa888, 0x8007, 0x9084, 0x00ff, 0x0148,
++      0x600a, 0xa888, 0x8000, 0x1108, 0xc28d, 0x6202, 0x012e, 0x0804,
++      0x70e3, 0x012e, 0x0804, 0x70dd, 0x012e, 0x0804, 0x70d7, 0x012e,
++      0x0804, 0x70da, 0x0126, 0x2091, 0x8000, 0x7007, 0x0001, 0x080c,
++      0x5f29, 0x05e0, 0x2061, 0x1a3d, 0x6000, 0xd084, 0x05b8, 0x6204,
++      0x6308, 0xd08c, 0x1530, 0xac78, 0x9484, 0x0003, 0x0170, 0xa988,
++      0x918c, 0x00ff, 0x8001, 0x1120, 0x2100, 0x9210, 0x0620, 0x0028,
++      0x8001, 0x1508, 0x2100, 0x9212, 0x02f0, 0x9484, 0x000c, 0x0188,
++      0xa988, 0x810f, 0x918c, 0x00ff, 0x9082, 0x0004, 0x1120, 0x2100,
++      0x9318, 0x0288, 0x0030, 0x9082, 0x0004, 0x1168, 0x2100, 0x931a,
++      0x0250, 0xa890, 0x9005, 0x0110, 0x8000, 0x6016, 0x6206, 0x630a,
++      0x012e, 0x0804, 0x70e3, 0x012e, 0x0804, 0x70e0, 0x012e, 0x0804,
++      0x70dd, 0x0126, 0x2091, 0x8000, 0x7007, 0x0001, 0x2061, 0x1a3d,
++      0x6300, 0xd38c, 0x1120, 0x6308, 0x8318, 0x0220, 0x630a, 0x012e,
++      0x0804, 0x70f1, 0x012e, 0x0804, 0x70e0, 0x00b6, 0x0126, 0x00c6,
++      0x2091, 0x8000, 0x7007, 0x0001, 0xa87c, 0xd0ac, 0x0148, 0x00c6,
++      0x2061, 0x1a3d, 0x6000, 0x9084, 0xfcff, 0x6002, 0x00ce, 0x0440,
++      0xa888, 0x9005, 0x05d8, 0xa88c, 0x9065, 0x0598, 0x2001, 0x1833,
++      0x2004, 0x9005, 0x0118, 0x080c, 0x9584, 0x0068, 0x6017, 0xf400,
++      0x605b, 0x0000, 0xa97c, 0xd1a4, 0x0110, 0xa980, 0x615a, 0x2009,
++      0x0041, 0x080c, 0x95ce, 0xa988, 0x918c, 0xff00, 0x9186, 0x2000,
++      0x1138, 0x0026, 0x900e, 0x2011, 0xfdff, 0x080c, 0x7a0a, 0x002e,
++      0xa87c, 0xd0c4, 0x0148, 0x2061, 0x1a3d, 0x6000, 0xd08c, 0x1120,
++      0x6008, 0x8000, 0x0208, 0x600a, 0x00ce, 0x012e, 0x00be, 0x0804,
++      0x70e3, 0x00ce, 0x012e, 0x00be, 0x0804, 0x70dd, 0xa984, 0x9186,
++      0x002e, 0x0d30, 0x9186, 0x002d, 0x0d18, 0x9186, 0x0045, 0x0510,
++      0x9186, 0x002a, 0x1130, 0x2001, 0x180c, 0x200c, 0xc194, 0x2102,
++      0x08b8, 0x9186, 0x0020, 0x0158, 0x9186, 0x0029, 0x1d10, 0xa974,
++      0x080c, 0x5c0d, 0x1968, 0xb800, 0xc0e4, 0xb802, 0x0848, 0xa88c,
++      0x9065, 0x09b8, 0x6007, 0x0024, 0x2001, 0x1953, 0x2004, 0x601a,
++      0x0804, 0x6f78, 0xa88c, 0x9065, 0x0960, 0x00e6, 0xa890, 0x9075,
++      0x2001, 0x1833, 0x2004, 0x9005, 0x0150, 0x080c, 0x9584, 0x8eff,
++      0x0118, 0x2e60, 0x080c, 0x9584, 0x00ee, 0x0804, 0x6f78, 0x6024,
++      0xc0dc, 0xc0d5, 0x6026, 0x2e60, 0x6007, 0x003a, 0xa8a0, 0x9005,
++      0x0130, 0x6007, 0x003b, 0xa8a4, 0x602e, 0xa8a8, 0x6016, 0x6003,
++      0x0001, 0x080c, 0x7bcb, 0x080c, 0x8125, 0x00ee, 0x0804, 0x6f78,
++      0x2061, 0x1a3d, 0x6000, 0xd084, 0x0190, 0xd08c, 0x1904, 0x70f1,
++      0x0126, 0x2091, 0x8000, 0x6204, 0x8210, 0x0220, 0x6206, 0x012e,
++      0x0804, 0x70f1, 0x012e, 0xa883, 0x0016, 0x0804, 0x70ea, 0xa883,
++      0x0007, 0x0804, 0x70ea, 0xa864, 0x8007, 0x9084, 0x00ff, 0x0130,
++      0x8001, 0x1138, 0x7007, 0x0001, 0x0069, 0x0005, 0x080c, 0x6ca4,
++      0x0040, 0x7007, 0x0003, 0x7012, 0x2900, 0x7016, 0x701a, 0x704b,
++      0x701a, 0x0005, 0x00b6, 0x00e6, 0x0126, 0x2091, 0x8000, 0x903e,
++      0x2061, 0x1800, 0x61cc, 0x81ff, 0x1904, 0x709c, 0x6130, 0xd194,
++      0x1904, 0x70c6, 0xa878, 0x2070, 0x9e82, 0x1cd0, 0x0a04, 0x7090,
++      0x6060, 0x9e02, 0x1a04, 0x7090, 0x7120, 0x9186, 0x0006, 0x1904,
++      0x7082, 0x7010, 0x905d, 0x0904, 0x709c, 0xb800, 0xd0e4, 0x1904,
++      0x70c0, 0x2061, 0x1a3d, 0x6100, 0x9184, 0x0301, 0x9086, 0x0001,
++      0x15a0, 0x7024, 0xd0dc, 0x1904, 0x70c9, 0xa883, 0x0000, 0xa803,
++      0x0000, 0x2908, 0x7014, 0x9005, 0x1198, 0x7116, 0xa87c, 0xd0f4,
++      0x1904, 0x70cc, 0x080c, 0x4dea, 0xd09c, 0x1118, 0xa87c, 0xc0cc,
++      0xa87e, 0x2e60, 0x080c, 0x792a, 0x012e, 0x00ee, 0x00be, 0x0005,
++      0x2048, 0xa800, 0x9005, 0x1de0, 0xa902, 0x2148, 0xa87c, 0xd0f4,
++      0x1904, 0x70cc, 0x012e, 0x00ee, 0x00be, 0x0005, 0x012e, 0x00ee,
++      0xa883, 0x0006, 0x00be, 0x0804, 0x70ea, 0xd184, 0x0db8, 0xd1c4,
++      0x1190, 0x00a0, 0xa974, 0x080c, 0x5c0d, 0x15d0, 0xb800, 0xd0e4,
++      0x15b8, 0x7120, 0x9186, 0x0007, 0x1118, 0xa883, 0x0002, 0x0490,
++      0xa883, 0x0008, 0x0478, 0xa883, 0x000e, 0x0460, 0xa883, 0x0017,
++      0x0448, 0xa883, 0x0035, 0x0430, 0x080c, 0x4dee, 0xd0fc, 0x01e8,
++      0xa878, 0x2070, 0x9e82, 0x1cd0, 0x02c0, 0x6060, 0x9e02, 0x12a8,
++      0x7120, 0x9186, 0x0006, 0x1188, 0x7010, 0x905d, 0x0170, 0xb800,
++      0xd0bc, 0x0158, 0x2039, 0x0001, 0x7000, 0x9086, 0x0007, 0x1904,
++      0x7026, 0x7003, 0x0002, 0x0804, 0x7026, 0xa883, 0x0028, 0x0010,
++      0xa883, 0x0029, 0x012e, 0x00ee, 0x00be, 0x0420, 0xa883, 0x002a,
++      0x0cc8, 0xa883, 0x0045, 0x0cb0, 0x2e60, 0x2019, 0x0002, 0x601b,
++      0x0014, 0x080c, 0xc58e, 0x012e, 0x00ee, 0x00be, 0x0005, 0x2009,
++      0x003e, 0x0058, 0x2009, 0x0004, 0x0040, 0x2009, 0x0006, 0x0028,
++      0x2009, 0x0016, 0x0010, 0x2009, 0x0001, 0xa884, 0x9084, 0xff00,
++      0x9105, 0xa886, 0x0126, 0x2091, 0x8000, 0x080c, 0x61a9, 0x012e,
++      0x0005, 0x080c, 0x0fe0, 0x0005, 0x00d6, 0x080c, 0x7921, 0x00de,
++      0x0005, 0x00d6, 0x00e6, 0x0126, 0x2091, 0x8000, 0x2071, 0x0040,
++      0x702c, 0xd084, 0x01d8, 0x908c, 0x0780, 0x190c, 0x7185, 0xd09c,
++      0x11a8, 0x2071, 0x1800, 0x70bc, 0x90ea, 0x0040, 0x0278, 0x8001,
++      0x70be, 0x702c, 0x2048, 0xa800, 0x702e, 0x9006, 0xa802, 0xa806,
++      0x2071, 0x0040, 0x2900, 0x7022, 0x702c, 0x0c28, 0x012e, 0x00ee,
++      0x00de, 0x0005, 0x0006, 0x9084, 0x0780, 0x190c, 0x7185, 0x000e,
++      0x0005, 0x00d6, 0x00c6, 0x0036, 0x0026, 0x0016, 0x00b6, 0x7007,
++      0x0001, 0xaa74, 0x9282, 0x0004, 0x1a04, 0x7176, 0xa97c, 0x9188,
++      0x1000, 0x2104, 0x905d, 0xb804, 0xd284, 0x0140, 0x05e8, 0x8007,
++      0x9084, 0x00ff, 0x9084, 0x0006, 0x1108, 0x04b0, 0x2b10, 0x080c,
++      0x94fe, 0x1118, 0x080c, 0x95a1, 0x05a8, 0x6212, 0xa874, 0x0002,
++      0x7154, 0x7159, 0x715c, 0x7162, 0x2019, 0x0002, 0x080c, 0xc941,
++      0x0060, 0x080c, 0xc8dd, 0x0048, 0x2019, 0x0002, 0xa980, 0x080c,
++      0xc8f8, 0x0018, 0xa980, 0x080c, 0xc8dd, 0x080c, 0x9554, 0xa887,
++      0x0000, 0x0126, 0x2091, 0x8000, 0x080c, 0x61a9, 0x012e, 0x00be,
++      0x001e, 0x002e, 0x003e, 0x00ce, 0x00de, 0x0005, 0xa887, 0x0006,
++      0x0c80, 0xa887, 0x0002, 0x0c68, 0xa887, 0x0005, 0x0c50, 0xa887,
++      0x0004, 0x0c38, 0xa887, 0x0007, 0x0c20, 0x2091, 0x8000, 0x0e04,
++      0x7187, 0x0006, 0x0016, 0x2001, 0x8003, 0x0006, 0x0804, 0x0d8d,
++      0x0005, 0x00f6, 0x2079, 0x0300, 0x2001, 0x0200, 0x200c, 0xc1e5,
++      0xc1dc, 0x2102, 0x2009, 0x0218, 0x210c, 0xd1ec, 0x1120, 0x080c,
++      0x1426, 0x00fe, 0x0005, 0x2001, 0x020d, 0x2003, 0x0020, 0x781f,
++      0x0300, 0x00fe, 0x0005, 0x781c, 0xd08c, 0x05e8, 0x7d44, 0x7c40,
++      0x9584, 0x00f6, 0x1508, 0x9484, 0x7000, 0x0138, 0x908a, 0x2000,
++      0x1258, 0x9584, 0x0700, 0x8007, 0x04a8, 0x7000, 0x9084, 0xff00,
++      0x9086, 0x8100, 0x0db0, 0x00b0, 0x9484, 0x0fff, 0x1130, 0x7000,
++      0x9084, 0xff00, 0x9086, 0x8100, 0x11c0, 0x080c, 0xcce2, 0x080c,
++      0x7692, 0x7817, 0x0140, 0x00a8, 0x9584, 0x0076, 0x1118, 0x080c,
++      0x76f0, 0x19c8, 0xd5a4, 0x0148, 0x0046, 0x0056, 0x080c, 0x724d,
++      0x080c, 0x1f79, 0x005e, 0x004e, 0x0020, 0x080c, 0xcce2, 0x7817,
++      0x0140, 0x080c, 0x722e, 0x2001, 0x19bd, 0x2004, 0x9005, 0x090c,
++      0x8125, 0x0005, 0x0002, 0x7204, 0x74c3, 0x71fb, 0x71fb, 0x71fb,
++      0x71fb, 0x71fb, 0x71fb, 0x7817, 0x0140, 0x2001, 0x19bd, 0x2004,
++      0x9005, 0x090c, 0x8125, 0x0005, 0x7000, 0x908c, 0xff00, 0x9194,
++      0xf000, 0x810f, 0x9484, 0x0fff, 0x688a, 0x9286, 0x2000, 0x1150,
++      0x6800, 0x9086, 0x0001, 0x1118, 0x080c, 0x4e04, 0x0070, 0x080c,
++      0x726d, 0x0058, 0x9286, 0x3000, 0x1118, 0x080c, 0x73fe, 0x0028,
++      0x9286, 0x8000, 0x1110, 0x080c, 0x75c8, 0x7817, 0x0140, 0x2001,
++      0x19bd, 0x2004, 0x9005, 0x090c, 0x8125, 0x0005, 0x2001, 0x180f,
++      0x2004, 0xd08c, 0x0178, 0x2001, 0x1800, 0x2004, 0x9086, 0x0003,
++      0x1148, 0x0026, 0x0036, 0x2011, 0x8048, 0x2518, 0x080c, 0x447f,
++      0x003e, 0x002e, 0x0005, 0x0036, 0x0046, 0x0056, 0x00f6, 0x2079,
++      0x0200, 0x2019, 0xfffe, 0x7c30, 0x0050, 0x0036, 0x0046, 0x0056,
++      0x00f6, 0x2079, 0x0200, 0x7d44, 0x7c40, 0x2019, 0xffff, 0x2001,
++      0x180f, 0x2004, 0xd08c, 0x0160, 0x2001, 0x1800, 0x2004, 0x9086,
++      0x0003, 0x1130, 0x0026, 0x2011, 0x8048, 0x080c, 0x447f, 0x002e,
++      0x00fe, 0x005e, 0x004e, 0x003e, 0x0005, 0x00b6, 0x00c6, 0x7010,
++      0x9084, 0xff00, 0x8007, 0x9096, 0x0001, 0x0120, 0x9096, 0x0023,
++      0x1904, 0x73cf, 0x9186, 0x0023, 0x1550, 0x080c, 0x7657, 0x0904,
++      0x73cf, 0x7124, 0x610a, 0x7030, 0x908e, 0x0200, 0x1130, 0x2009,
++      0x0015, 0x080c, 0x95ce, 0x0804, 0x73cf, 0x908e, 0x0214, 0x0118,
++      0x908e, 0x0210, 0x1130, 0x2009, 0x0015, 0x080c, 0x95ce, 0x0804,
++      0x73cf, 0x908e, 0x0100, 0x1904, 0x73cf, 0x7034, 0x9005, 0x1904,
++      0x73cf, 0x2009, 0x0016, 0x080c, 0x95ce, 0x0804, 0x73cf, 0x9186,
++      0x0022, 0x1904, 0x73cf, 0x7030, 0x908e, 0x0300, 0x1580, 0x68d8,
++      0xd0a4, 0x0528, 0xc0b5, 0x68da, 0x7100, 0x918c, 0x00ff, 0x6976,
++      0x7004, 0x687a, 0x00f6, 0x2079, 0x0100, 0x79e6, 0x78ea, 0x0006,
++      0x9084, 0x00ff, 0x0016, 0x2008, 0x080c, 0x2446, 0x7932, 0x7936,
++      0x001e, 0x000e, 0x00fe, 0x080c, 0x23fd, 0x6956, 0x703c, 0x00e6,
++      0x2071, 0x0140, 0x7086, 0x2071, 0x1800, 0x70ae, 0x00ee, 0x7034,
++      0x9005, 0x1904, 0x73cf, 0x2009, 0x0017, 0x0804, 0x739c, 0x908e,
++      0x0400, 0x1190, 0x7034, 0x9005, 0x1904, 0x73cf, 0x080c, 0x6877,
++      0x0120, 0x2009, 0x001d, 0x0804, 0x739c, 0x68d8, 0xc0a5, 0x68da,
++      0x2009, 0x0030, 0x0804, 0x739c, 0x908e, 0x0500, 0x1140, 0x7034,
++      0x9005, 0x1904, 0x73cf, 0x2009, 0x0018, 0x0804, 0x739c, 0x908e,
++      0x2010, 0x1120, 0x2009, 0x0019, 0x0804, 0x739c, 0x908e, 0x2110,
++      0x1120, 0x2009, 0x001a, 0x0804, 0x739c, 0x908e, 0x5200, 0x1140,
++      0x7034, 0x9005, 0x1904, 0x73cf, 0x2009, 0x001b, 0x0804, 0x739c,
++      0x908e, 0x5000, 0x1140, 0x7034, 0x9005, 0x1904, 0x73cf, 0x2009,
++      0x001c, 0x0804, 0x739c, 0x908e, 0x1300, 0x1120, 0x2009, 0x0034,
++      0x0804, 0x739c, 0x908e, 0x1200, 0x1140, 0x7034, 0x9005, 0x1904,
++      0x73cf, 0x2009, 0x0024, 0x0804, 0x739c, 0x908c, 0xff00, 0x918e,
++      0x2400, 0x1120, 0x2009, 0x002d, 0x0804, 0x739c, 0x908c, 0xff00,
++      0x918e, 0x5300, 0x1120, 0x2009, 0x002a, 0x0804, 0x739c, 0x908e,
++      0x0f00, 0x1120, 0x2009, 0x0020, 0x0804, 0x739c, 0x908e, 0x5300,
++      0x1108, 0x00d8, 0x908e, 0x6104, 0x11c0, 0x2011, 0x026d, 0x8208,
++      0x2204, 0x9082, 0x0004, 0x8004, 0x8004, 0x20a8, 0x2011, 0x8015,
++      0x211c, 0x8108, 0x0046, 0x2124, 0x080c, 0x447f, 0x004e, 0x8108,
++      0x1f04, 0x735e, 0x2009, 0x0023, 0x0478, 0x908e, 0x6000, 0x1118,
++      0x2009, 0x003f, 0x0448, 0x908e, 0x7800, 0x1118, 0x2009, 0x0045,
++      0x0418, 0x908e, 0x1000, 0x1118, 0x2009, 0x004e, 0x00e8, 0x908e,
++      0x6300, 0x1118, 0x2009, 0x004a, 0x00b8, 0x908c, 0xff00, 0x918e,
++      0x5600, 0x1118, 0x2009, 0x004f, 0x0078, 0x908c, 0xff00, 0x918e,
++      0x5700, 0x1118, 0x2009, 0x0050, 0x0038, 0x2009, 0x001d, 0x6834,
++      0xd0d4, 0x0110, 0x2009, 0x004c, 0x0016, 0x2011, 0x0263, 0x2204,
++      0x8211, 0x220c, 0x080c, 0x23fd, 0x1568, 0x080c, 0x5bb0, 0x1550,
++      0xbe12, 0xbd16, 0x001e, 0x0016, 0xb8b0, 0x9005, 0x1168, 0x9186,
++      0x0046, 0x1150, 0x6874, 0x9606, 0x1138, 0x6878, 0x9506, 0x9084,
++      0xff00, 0x1110, 0x001e, 0x0098, 0x080c, 0x94fe, 0x01a8, 0x2b08,
++      0x6112, 0x6023, 0x0004, 0x7120, 0x610a, 0x001e, 0x9186, 0x004c,
++      0x1110, 0x6023, 0x000a, 0x0016, 0x001e, 0x080c, 0x95ce, 0x00ce,
++      0x00be, 0x0005, 0x001e, 0x0cd8, 0x2001, 0x180d, 0x2004, 0xd0ec,
++      0x0120, 0x2011, 0x8049, 0x080c, 0x447f, 0x080c, 0x95a1, 0x0d90,
++      0x2b08, 0x6112, 0x6023, 0x0004, 0x7120, 0x610a, 0x001e, 0x0016,
++      0x9186, 0x0017, 0x0118, 0x9186, 0x0030, 0x1128, 0x6007, 0x0009,
++      0x6017, 0x2900, 0x0020, 0x6007, 0x0051, 0x6017, 0x0000, 0x602f,
++      0x0009, 0x6003, 0x0001, 0x080c, 0x7c1d, 0x08a0, 0x080c, 0x2e39,
++      0x1140, 0x7010, 0x9084, 0xff00, 0x8007, 0x908e, 0x0008, 0x1108,
++      0x0009, 0x0005, 0x00b6, 0x00c6, 0x0046, 0x7000, 0x908c, 0xff00,
++      0x810f, 0x9186, 0x0033, 0x11e8, 0x080c, 0x7657, 0x0904, 0x745b,
++      0x7124, 0x610a, 0x7030, 0x908e, 0x0200, 0x1140, 0x7034, 0x9005,
++      0x15d0, 0x2009, 0x0015, 0x080c, 0x95ce, 0x04a8, 0x908e, 0x0100,
++      0x1590, 0x7034, 0x9005, 0x1578, 0x2009, 0x0016, 0x080c, 0x95ce,
++      0x0450, 0x9186, 0x0032, 0x1538, 0x7030, 0x908e, 0x1400, 0x1518,
++      0x2009, 0x0038, 0x0016, 0x2011, 0x0263, 0x2204, 0x8211, 0x220c,
++      0x080c, 0x23fd, 0x11b8, 0x080c, 0x5bb0, 0x11a0, 0xbe12, 0xbd16,
++      0x080c, 0x94fe, 0x0178, 0x2b08, 0x6112, 0x080c, 0xb4e6, 0x6023,
++      0x0004, 0x7120, 0x610a, 0x001e, 0x080c, 0x95ce, 0x080c, 0x8125,
++      0x0010, 0x00ce, 0x001e, 0x004e, 0x00ce, 0x00be, 0x0005, 0x00b6,
++      0x0046, 0x00e6, 0x00d6, 0x2028, 0x2130, 0x9696, 0x00ff, 0x11b8,
++      0x9592, 0xfffc, 0x02a0, 0x9596, 0xfffd, 0x1120, 0x2009, 0x007f,
++      0x0804, 0x74bd, 0x9596, 0xfffe, 0x1120, 0x2009, 0x007e, 0x0804,
++      0x74bd, 0x9596, 0xfffc, 0x1118, 0x2009, 0x0080, 0x04f0, 0x2011,
++      0x0000, 0x2019, 0x1836, 0x231c, 0xd3ac, 0x0130, 0x9026, 0x20a9,
++      0x0800, 0x2071, 0x1000, 0x0030, 0x2021, 0x0081, 0x20a9, 0x077f,
++      0x2071, 0x1081, 0x2e1c, 0x93dd, 0x0000, 0x1140, 0x82ff, 0x11d0,
++      0x9496, 0x00ff, 0x01b8, 0x2410, 0xc2fd, 0x00a0, 0xbf10, 0x2600,
++      0x9706, 0xb814, 0x1120, 0x9546, 0x1110, 0x2408, 0x00b0, 0x9745,
++      0x1148, 0x94c6, 0x007e, 0x0130, 0x94c6, 0x007f, 0x0118, 0x94c6,
++      0x0080, 0x1d20, 0x8420, 0x8e70, 0x1f04, 0x7492, 0x82ff, 0x1118,
++      0x9085, 0x0001, 0x0018, 0xc2fc, 0x2208, 0x9006, 0x00de, 0x00ee,
++      0x004e, 0x00be, 0x0005, 0x7000, 0x908c, 0xff00, 0x810f, 0x9184,
++      0x000f, 0x0002, 0x74da, 0x74da, 0x74da, 0x7669, 0x74da, 0x74e3,
++      0x750e, 0x759d, 0x74da, 0x74da, 0x74da, 0x74da, 0x74da, 0x74da,
++      0x74da, 0x74da, 0x7817, 0x0140, 0x2001, 0x19bd, 0x2004, 0x9005,
++      0x090c, 0x8125, 0x0005, 0x00b6, 0x7110, 0xd1bc, 0x01e8, 0x7120,
++      0x2160, 0x9c8c, 0x0007, 0x11c0, 0x9c8a, 0x1cd0, 0x02a8, 0x6860,
++      0x9c02, 0x1290, 0x7008, 0x9084, 0x00ff, 0x6110, 0x2158, 0xb910,
++      0x9106, 0x1150, 0x700c, 0xb914, 0x9106, 0x1130, 0x7124, 0x610a,
++      0x2009, 0x0046, 0x080c, 0x95ce, 0x7817, 0x0140, 0x2001, 0x19bd,
++      0x2004, 0x9005, 0x090c, 0x8125, 0x00be, 0x0005, 0x00b6, 0x00c6,
++      0x9484, 0x0fff, 0x0904, 0x7573, 0x7110, 0xd1bc, 0x1904, 0x7573,
++      0x7108, 0x700c, 0x2028, 0x918c, 0x00ff, 0x2130, 0x9094, 0xff00,
++      0x15b8, 0x81ff, 0x15a8, 0x9080, 0x2e6e, 0x200d, 0x918c, 0xff00,
++      0x810f, 0x2001, 0x0080, 0x9106, 0x0904, 0x7573, 0x080c, 0x5bb0,
++      0x1904, 0x7573, 0xbe12, 0xbd16, 0xb800, 0xd0ec, 0x15e0, 0xba04,
++      0x9294, 0xff00, 0x9286, 0x0600, 0x11a0, 0x080c, 0x94fe, 0x05f0,
++      0x2b08, 0x7028, 0x604a, 0x702c, 0x6046, 0x6112, 0x6023, 0x0006,
++      0x7120, 0x610a, 0x7130, 0x6156, 0x2009, 0x0044, 0x080c, 0xbfdb,
++      0x0410, 0x080c, 0x5f2d, 0x2010, 0x1138, 0xb807, 0x0606, 0x0c28,
++      0x190c, 0x745f, 0x11c0, 0x0890, 0x080c, 0x94fe, 0x2b08, 0x0198,
++      0x6112, 0x6023, 0x0004, 0x7120, 0x610a, 0x9286, 0x0004, 0x1118,
++      0x6007, 0x0005, 0x0010, 0x6007, 0x0001, 0x6003, 0x0001, 0x080c,
++      0x7c1d, 0x080c, 0x8125, 0x7817, 0x0140, 0x2001, 0x19bd, 0x2004,
++      0x9005, 0x090c, 0x8125, 0x00ce, 0x00be, 0x0005, 0x2001, 0x180d,
++      0x2004, 0xd0ec, 0x0120, 0x2011, 0x8049, 0x080c, 0x447f, 0x080c,
++      0x95a1, 0x0d48, 0x2b08, 0x6112, 0x6023, 0x0006, 0x7120, 0x610a,
++      0x7130, 0x6156, 0x6017, 0xf300, 0x6003, 0x0001, 0x6007, 0x0041,
++      0x080c, 0x7bcb, 0x080c, 0x8125, 0x08b0, 0x00b6, 0x7110, 0xd1bc,
++      0x01e8, 0x7020, 0x2060, 0x9c84, 0x0007, 0x11c0, 0x9c82, 0x1cd0,
++      0x02a8, 0x6860, 0x9c02, 0x1290, 0x7008, 0x9084, 0x00ff, 0x6110,
++      0x2158, 0xb910, 0x9106, 0x1150, 0x700c, 0xb914, 0x9106, 0x1130,
++      0x7124, 0x610a, 0x2009, 0x0045, 0x080c, 0x95ce, 0x7817, 0x0140,
++      0x2001, 0x19bd, 0x2004, 0x9005, 0x090c, 0x8125, 0x00be, 0x0005,
++      0x080c, 0x2e39, 0x1168, 0x7010, 0x9084, 0xff00, 0x8007, 0x9086,
++      0x0000, 0x1130, 0x9184, 0x000f, 0x908a, 0x0006, 0x1208, 0x000b,
++      0x0005, 0x75df, 0x75e0, 0x75df, 0x75df, 0x763f, 0x764b, 0x0005,
++      0x00b6, 0x7110, 0xd1bc, 0x0120, 0x702c, 0xd084, 0x0904, 0x763d,
++      0x700c, 0x7108, 0x080c, 0x23fd, 0x1904, 0x763d, 0x080c, 0x5bb0,
++      0x1904, 0x763d, 0xbe12, 0xbd16, 0x7110, 0xd1bc, 0x01d8, 0x080c,
++      0x5f2d, 0x0118, 0x9086, 0x0004, 0x1588, 0x00c6, 0x080c, 0x7657,
++      0x00ce, 0x05d8, 0x080c, 0x94fe, 0x2b08, 0x05b8, 0x6112, 0x080c,
++      0xb4e6, 0x6023, 0x0002, 0x7120, 0x610a, 0x2009, 0x0088, 0x080c,
++      0x95ce, 0x0458, 0x080c, 0x5f2d, 0x0148, 0x9086, 0x0004, 0x0130,
++      0x080c, 0x5f35, 0x0118, 0x9086, 0x0004, 0x1180, 0x080c, 0x94fe,
++      0x2b08, 0x01d8, 0x6112, 0x080c, 0xb4e6, 0x6023, 0x0005, 0x7120,
++      0x610a, 0x2009, 0x0088, 0x080c, 0x95ce, 0x0078, 0x080c, 0x94fe,
++      0x2b08, 0x0158, 0x6112, 0x080c, 0xb4e6, 0x6023, 0x0004, 0x7120,
++      0x610a, 0x2009, 0x0001, 0x080c, 0x95ce, 0x00be, 0x0005, 0x7110,
++      0xd1bc, 0x0140, 0x00a1, 0x0130, 0x7124, 0x610a, 0x2009, 0x0089,
++      0x080c, 0x95ce, 0x0005, 0x7110, 0xd1bc, 0x0140, 0x0041, 0x0130,
++      0x7124, 0x610a, 0x2009, 0x008a, 0x080c, 0x95ce, 0x0005, 0x7020,
++      0x2060, 0x9c84, 0x0007, 0x1158, 0x9c82, 0x1cd0, 0x0240, 0x2001,
++      0x1818, 0x2004, 0x9c02, 0x1218, 0x9085, 0x0001, 0x0005, 0x9006,
++      0x0ce8, 0x00b6, 0x7110, 0xd1bc, 0x11d8, 0x7024, 0x2060, 0x9c84,
++      0x0007, 0x11b0, 0x9c82, 0x1cd0, 0x0298, 0x6860, 0x9c02, 0x1280,
++      0x7008, 0x9084, 0x00ff, 0x6110, 0x2158, 0xb910, 0x9106, 0x1140,
++      0x700c, 0xb914, 0x9106, 0x1120, 0x2009, 0x0051, 0x080c, 0x95ce,
++      0x7817, 0x0140, 0x2001, 0x19bd, 0x2004, 0x9005, 0x090c, 0x8125,
++      0x00be, 0x0005, 0x2031, 0x0105, 0x0069, 0x0005, 0x2031, 0x0206,
++      0x0049, 0x0005, 0x2031, 0x0207, 0x0029, 0x0005, 0x2031, 0x0213,
++      0x0009, 0x0005, 0x00c6, 0x0096, 0x00f6, 0x7000, 0x9084, 0xf000,
++      0x9086, 0xc000, 0x05d0, 0x080c, 0x94fe, 0x05b8, 0x0066, 0x00c6,
++      0x0046, 0x2011, 0x0263, 0x2204, 0x8211, 0x220c, 0x080c, 0x23fd,
++      0x15a0, 0x080c, 0x5bb0, 0x1588, 0xbe12, 0xbd16, 0x2b00, 0x004e,
++      0x00ce, 0x6012, 0x080c, 0xb4e6, 0x080c, 0x0fae, 0x0510, 0x2900,
++      0x605a, 0x9006, 0xa802, 0xa866, 0xac6a, 0xa85c, 0x90f8, 0x001b,
++      0x20a9, 0x000e, 0xa860, 0x20e8, 0x20e1, 0x0000, 0x2fa0, 0x2e98,
++      0x4003, 0x006e, 0x6616, 0x6007, 0x003e, 0x6023, 0x0001, 0x6003,
++      0x0001, 0x080c, 0x7c1d, 0x080c, 0x8125, 0x00fe, 0x009e, 0x00ce,
++      0x0005, 0x080c, 0x9554, 0x006e, 0x0cc0, 0x004e, 0x00ce, 0x0cc8,
++      0x00c6, 0x7000, 0x908c, 0xff00, 0x9184, 0xf000, 0x810f, 0x9086,
++      0x2000, 0x1904, 0x7747, 0x9186, 0x0022, 0x15f0, 0x2001, 0x0111,
++      0x2004, 0x9005, 0x1904, 0x7749, 0x7030, 0x908e, 0x0400, 0x0904,
++      0x7749, 0x908e, 0x6000, 0x05e8, 0x908e, 0x5400, 0x05d0, 0x908e,
++      0x0300, 0x11d8, 0x2009, 0x1836, 0x210c, 0xd18c, 0x1590, 0xd1a4,
++      0x1580, 0x080c, 0x5eeb, 0x0558, 0x68a8, 0x9084, 0x00ff, 0x7100,
++      0x918c, 0x00ff, 0x9106, 0x1518, 0x6878, 0x69a8, 0x918c, 0xff00,
++      0x9105, 0x7104, 0x9106, 0x11d8, 0x00e0, 0x2009, 0x0103, 0x210c,
++      0xd1b4, 0x11a8, 0x908e, 0x5200, 0x09e8, 0x908e, 0x0500, 0x09d0,
++      0x908e, 0x5000, 0x09b8, 0x0058, 0x9186, 0x0023, 0x1140, 0x080c,
++      0x7657, 0x0128, 0x6004, 0x9086, 0x0002, 0x0118, 0x0000, 0x9006,
++      0x0010, 0x9085, 0x0001, 0x00ce, 0x0005, 0x2071, 0x19c7, 0x7003,
++      0x0003, 0x700f, 0x0361, 0x9006, 0x701a, 0x7076, 0x7012, 0x7017,
++      0x1cd0, 0x7007, 0x0000, 0x7026, 0x702b, 0x8b66, 0x7032, 0x7037,
++      0x8bc9, 0x703f, 0xffff, 0x7043, 0xffff, 0x7046, 0x704b, 0x4c8b,
++      0x704e, 0x705f, 0x78ae, 0x080c, 0x0fc7, 0x090c, 0x0d84, 0x2900,
++      0x703a, 0xa867, 0x0003, 0xa86f, 0x0100, 0xa8ab, 0xdcb0, 0x0005,
++      0x2071, 0x19c7, 0x1d04, 0x7809, 0x2091, 0x6000, 0x700c, 0x8001,
++      0x700e, 0x1510, 0x2001, 0x1874, 0x2004, 0xd0c4, 0x0158, 0x3a00,
++      0xd08c, 0x1140, 0x20d1, 0x0000, 0x20d1, 0x0001, 0x20d1, 0x0000,
++      0x080c, 0x0d84, 0x700f, 0x0361, 0x7007, 0x0001, 0x0126, 0x2091,
++      0x8000, 0x080c, 0x78f3, 0x7044, 0x900d, 0x0148, 0x8109, 0x7146,
++      0x1130, 0x7048, 0x080f, 0x0018, 0x0126, 0x2091, 0x8000, 0x7024,
++      0x900d, 0x0188, 0x7020, 0x8001, 0x7022, 0x1168, 0x7023, 0x0009,
++      0x8109, 0x7126, 0x9186, 0x03e8, 0x1110, 0x7028, 0x080f, 0x81ff,
++      0x1110, 0x7028, 0x080f, 0x7030, 0x900d, 0x0180, 0x702c, 0x8001,
++      0x702e, 0x1160, 0x702f, 0x0009, 0x8109, 0x7132, 0x0128, 0x9184,
++      0x007f, 0x090c, 0x8c48, 0x0010, 0x7034, 0x080f, 0x703c, 0x9005,
++      0x0118, 0x0310, 0x8001, 0x703e, 0x7040, 0x9005, 0x0118, 0x0310,
++      0x8001, 0x7042, 0x7050, 0x900d, 0x0168, 0x704c, 0x8001, 0x704e,
++      0x1148, 0x704f, 0x0009, 0x8109, 0x7152, 0x1120, 0x7154, 0x7152,
++      0x705c, 0x080f, 0x7018, 0x900d, 0x01d8, 0x0016, 0x7074, 0x900d,
++      0x0158, 0x7070, 0x8001, 0x7072, 0x1138, 0x7073, 0x0009, 0x8109,
++      0x7176, 0x1110, 0x7078, 0x080f, 0x001e, 0x7008, 0x8001, 0x700a,
++      0x1138, 0x700b, 0x0009, 0x8109, 0x711a, 0x1110, 0x701c, 0x080f,
++      0x012e, 0x7004, 0x0002, 0x782f, 0x7830, 0x784a, 0x00e6, 0x2071,
++      0x19c7, 0x7018, 0x9005, 0x1120, 0x711a, 0x721e, 0x700b, 0x0009,
++      0x00ee, 0x0005, 0x00e6, 0x0006, 0x2071, 0x19c7, 0x701c, 0x9206,
++      0x1110, 0x701a, 0x701e, 0x000e, 0x00ee, 0x0005, 0x00e6, 0x2071,
++      0x19c7, 0xb888, 0x9102, 0x0208, 0xb98a, 0x00ee, 0x0005, 0x0005,
++      0x00b6, 0x7110, 0x080c, 0x5c0d, 0x1158, 0xb888, 0x8001, 0x0240,
++      0xb88a, 0x1130, 0x0126, 0x2091, 0x8000, 0x080c, 0x8125, 0x012e,
++      0x8108, 0x9182, 0x0800, 0x0218, 0x900e, 0x7007, 0x0002, 0x7112,
++      0x00be, 0x0005, 0x7014, 0x2060, 0x0126, 0x2091, 0x8000, 0x6040,
++      0x9005, 0x0128, 0x8001, 0x6042, 0x1110, 0x080c, 0xb38b, 0x6018,
++      0x9005, 0x0510, 0x8001, 0x601a, 0x11f8, 0x6120, 0x9186, 0x0003,
++      0x0118, 0x9186, 0x0006, 0x11b0, 0x6014, 0x2048, 0xa884, 0x908a,
++      0x199a, 0x0280, 0x9082, 0x1999, 0xa886, 0x908a, 0x199a, 0x0210,
++      0x2001, 0x1999, 0x8003, 0x800b, 0x810b, 0x9108, 0x611a, 0xa87c,
++      0xd0e4, 0x0110, 0x080c, 0xaddd, 0x012e, 0x9c88, 0x0018, 0x7116,
++      0x2001, 0x1818, 0x2004, 0x9102, 0x0220, 0x7017, 0x1cd0, 0x7007,
++      0x0000, 0x0005, 0x00e6, 0x2071, 0x19c7, 0x7027, 0x07d0, 0x7023,
++      0x0009, 0x00ee, 0x0005, 0x2001, 0x19d0, 0x2003, 0x0000, 0x0005,
++      0x00e6, 0x2071, 0x19c7, 0x7132, 0x702f, 0x0009, 0x00ee, 0x0005,
++      0x2011, 0x19d3, 0x2013, 0x0000, 0x0005, 0x00e6, 0x2071, 0x19c7,
++      0x711a, 0x721e, 0x700b, 0x0009, 0x00ee, 0x0005, 0x0086, 0x0026,
++      0x7058, 0x8000, 0x705a, 0x2001, 0x19d5, 0x2044, 0xa06c, 0x9086,
++      0x0000, 0x0150, 0x706c, 0xa09a, 0x7068, 0xa096, 0x7064, 0xa092,
++      0x7060, 0xa08e, 0x080c, 0x108c, 0x002e, 0x008e, 0x0005, 0x0006,
++      0x0016, 0x0096, 0x00a6, 0x00b6, 0x00c6, 0x00d6, 0x00e6, 0x00f6,
++      0x0156, 0x080c, 0x7778, 0x015e, 0x00fe, 0x00ee, 0x00de, 0x00ce,
++      0x00be, 0x00ae, 0x009e, 0x001e, 0x000e, 0x0005, 0x00e6, 0x2071,
++      0x19c7, 0x7176, 0x727a, 0x7073, 0x0009, 0x00ee, 0x0005, 0x00e6,
++      0x0006, 0x2071, 0x19c7, 0x7078, 0x9206, 0x1110, 0x7076, 0x707a,
++      0x000e, 0x00ee, 0x0005, 0x2069, 0x1800, 0x69ec, 0xd1e4, 0x1518,
++      0x0026, 0xd1ec, 0x0140, 0x684c, 0x9082, 0x0200, 0x0288, 0x8117,
++      0x9294, 0x00c0, 0x0088, 0x9184, 0x0007, 0x01a0, 0x8109, 0x9184,
++      0x0007, 0x0110, 0x69ee, 0x0070, 0x8107, 0x9084, 0x0007, 0x910d,
++      0x8107, 0x9106, 0x9094, 0x00c0, 0x9184, 0xff3f, 0x9205, 0x68ee,
++      0x080c, 0x0e8d, 0x002e, 0x0005, 0x00c6, 0x2061, 0x1a3d, 0x00ce,
++      0x0005, 0x9184, 0x000f, 0x8003, 0x8003, 0x8003, 0x9080, 0x1a3d,
++      0x2060, 0x0005, 0xa884, 0x908a, 0x199a, 0x1638, 0x9005, 0x1150,
++      0x00c6, 0x2061, 0x1a3d, 0x6014, 0x00ce, 0x9005, 0x1130, 0x2001,
++      0x001e, 0x0018, 0x908e, 0xffff, 0x01b0, 0x8003, 0x800b, 0x810b,
++      0x9108, 0x611a, 0xa87c, 0x908c, 0x00c0, 0x918e, 0x00c0, 0x0904,
++      0x79b4, 0xd0b4, 0x1168, 0xd0bc, 0x1904, 0x798d, 0x2009, 0x0006,
++      0x080c, 0x79e1, 0x0005, 0x900e, 0x0c60, 0x2001, 0x1999, 0x08b0,
++      0xd0fc, 0x0160, 0x908c, 0x0003, 0x0120, 0x918e, 0x0003, 0x1904,
++      0x79db, 0x908c, 0x2020, 0x918e, 0x2020, 0x01a8, 0x6024, 0xd0d4,
++      0x11e8, 0x2009, 0x1874, 0x2104, 0xd084, 0x1138, 0x87ff, 0x1120,
++      0x2009, 0x0043, 0x0804, 0x95ce, 0x0005, 0x87ff, 0x1de8, 0x2009,
++      0x0042, 0x0804, 0x95ce, 0x6110, 0x00b6, 0x2158, 0xb900, 0x00be,
++      0xd1ac, 0x0d20, 0x6024, 0xc0cd, 0x6026, 0x0c00, 0xc0d4, 0x6026,
++      0xa890, 0x602e, 0xa88c, 0x6032, 0x08e0, 0xd0fc, 0x0160, 0x908c,
++      0x0003, 0x0120, 0x918e, 0x0003, 0x1904, 0x79db, 0x908c, 0x2020,
++      0x918e, 0x2020, 0x0170, 0x0076, 0x00f6, 0x2c78, 0x080c, 0x150d,
++      0x00fe, 0x007e, 0x87ff, 0x1120, 0x2009, 0x0042, 0x080c, 0x95ce,
++      0x0005, 0x6110, 0x00b6, 0x2158, 0xb900, 0x00be, 0xd1ac, 0x0d58,
++      0x6124, 0xc1cd, 0x6126, 0x0c38, 0xd0fc, 0x0188, 0x908c, 0x2020,
++      0x918e, 0x2020, 0x01a8, 0x9084, 0x0003, 0x908e, 0x0002, 0x0148,
++      0x87ff, 0x1120, 0x2009, 0x0041, 0x080c, 0x95ce, 0x0005, 0x00b9,
++      0x0ce8, 0x87ff, 0x1dd8, 0x2009, 0x0043, 0x080c, 0x95ce, 0x0cb0,
++      0x6110, 0x00b6, 0x2158, 0xb900, 0x00be, 0xd1ac, 0x0d20, 0x6124,
++      0xc1cd, 0x6126, 0x0c00, 0x2009, 0x0004, 0x0019, 0x0005, 0x2009,
++      0x0001, 0x0096, 0x080c, 0xb0ad, 0x0518, 0x6014, 0x2048, 0xa982,
++      0xa800, 0x6016, 0x9186, 0x0001, 0x1188, 0xa97c, 0x918c, 0x8100,
++      0x918e, 0x8100, 0x1158, 0x00c6, 0x2061, 0x1a3d, 0x6200, 0xd28c,
++      0x1120, 0x6204, 0x8210, 0x0208, 0x6206, 0x00ce, 0x080c, 0x5ff7,
++      0x6014, 0x904d, 0x0076, 0x2039, 0x0000, 0x190c, 0x792a, 0x007e,
++      0x009e, 0x0005, 0x0156, 0x00c6, 0x2061, 0x1a3d, 0x6000, 0x81ff,
++      0x0110, 0x9205, 0x0008, 0x9204, 0x6002, 0x00ce, 0x015e, 0x0005,
++      0x6800, 0xd08c, 0x1138, 0x6808, 0x9005, 0x0120, 0x8001, 0x680a,
++      0x9085, 0x0001, 0x0005, 0x0126, 0x2091, 0x8000, 0x0036, 0x0046,
++      0x20a9, 0x0010, 0x9006, 0x8004, 0x2019, 0x0100, 0x231c, 0x93a6,
++      0x0008, 0x1118, 0x8086, 0x818e, 0x0020, 0x80f6, 0x3e00, 0x81f6,
++      0x3e08, 0x1208, 0x9200, 0x1f04, 0x7a2c, 0x93a6, 0x0008, 0x1118,
++      0x8086, 0x818e, 0x0020, 0x80f6, 0x3e00, 0x81f6, 0x3e08, 0x004e,
++      0x003e, 0x012e, 0x0005, 0x0126, 0x2091, 0x8000, 0x0076, 0x0156,
++      0x20a9, 0x0010, 0x9005, 0x0510, 0x911a, 0x1600, 0x8213, 0x2039,
++      0x0100, 0x273c, 0x97be, 0x0008, 0x1110, 0x818d, 0x0010, 0x81f5,
++      0x3e08, 0x0228, 0x911a, 0x1220, 0x1f04, 0x7a56, 0x0028, 0x911a,
++      0x2308, 0x8210, 0x1f04, 0x7a56, 0x0006, 0x3200, 0x9084, 0xefff,
++      0x2080, 0x000e, 0x015e, 0x007e, 0x012e, 0x0005, 0x0006, 0x3200,
++      0x9085, 0x1000, 0x0ca8, 0x0126, 0x2091, 0x2800, 0x2079, 0x19b4,
++      0x012e, 0x00d6, 0x2069, 0x19b4, 0x6803, 0x0005, 0x0156, 0x0146,
++      0x01d6, 0x20e9, 0x0000, 0x2069, 0x0200, 0x080c, 0x9363, 0x0401,
++      0x080c, 0x934e, 0x00e9, 0x080c, 0x9351, 0x00d1, 0x080c, 0x9354,
++      0x00b9, 0x080c, 0x9357, 0x00a1, 0x080c, 0x935a, 0x0089, 0x080c,
++      0x935d, 0x0071, 0x080c, 0x9360, 0x0059, 0x01de, 0x014e, 0x015e,
++      0x2069, 0x0004, 0x2d04, 0x9085, 0x8001, 0x206a, 0x00de, 0x0005,
++      0x20a9, 0x0020, 0x20a1, 0x0240, 0x9006, 0x4004, 0x0005, 0x00c6,
++      0x6027, 0x0001, 0x7804, 0x9084, 0x0007, 0x0002, 0x7ac8, 0x7aec,
++      0x7b36, 0x7ace, 0x7aec, 0x7ac8, 0x7ac6, 0x7ac6, 0x080c, 0x0d84,
++      0x080c, 0x7893, 0x080c, 0x8125, 0x00ce, 0x0005, 0x62c0, 0x82ff,
++      0x1110, 0x00ce, 0x0005, 0x2011, 0x554d, 0x080c, 0x781a, 0x7828,
++      0x9092, 0x00c8, 0x1228, 0x8000, 0x782a, 0x080c, 0x558a, 0x0c88,
++      0x62c0, 0x080c, 0x9367, 0x080c, 0x554d, 0x7807, 0x0003, 0x7827,
++      0x0000, 0x782b, 0x0000, 0x0c28, 0x080c, 0x7893, 0x6220, 0xd2a4,
++      0x0178, 0x62c0, 0x82ff, 0x1160, 0x782b, 0x0000, 0x7824, 0x9065,
++      0x090c, 0x0d84, 0x2009, 0x0013, 0x080c, 0x95ce, 0x00ce, 0x0005,
++      0x00c6, 0x7824, 0x9065, 0x090c, 0x0d84, 0x7804, 0x9086, 0x0004,
++      0x0904, 0x7b74, 0x7828, 0x9092, 0xc350, 0x1230, 0x8000, 0x782a,
++      0x00ce, 0x080c, 0x8b2c, 0x0c50, 0x2011, 0x0130, 0x2214, 0x080c,
++      0x9367, 0x6104, 0x9186, 0x0003, 0x1188, 0x00e6, 0x2071, 0x1800,
++      0x70e4, 0x00ee, 0xd08c, 0x0150, 0x00c6, 0x00e6, 0x2061, 0x0100,
++      0x2071, 0x1800, 0x080c, 0x55a0, 0x00ee, 0x00ce, 0x080c, 0xcd1f,
++      0x2009, 0x0014, 0x080c, 0x95ce, 0x00ce, 0x0840, 0x2001, 0x19d0,
++      0x2003, 0x0000, 0x62c0, 0x82ff, 0x1160, 0x782b, 0x0000, 0x7824,
++      0x9065, 0x090c, 0x0d84, 0x2009, 0x0013, 0x080c, 0x9620, 0x00ce,
++      0x0005, 0x00b6, 0x00c6, 0x00d6, 0x7824, 0x9005, 0x090c, 0x0d84,
++      0x781c, 0x905d, 0x090c, 0x0d84, 0x080c, 0x9367, 0xb800, 0xc0dc,
++      0xb802, 0x7924, 0x2160, 0x080c, 0x9554, 0xb93c, 0x81ff, 0x090c,
++      0x0d84, 0x8109, 0xb93e, 0xb854, 0x9015, 0x0110, 0x7a1e, 0x0010,
++      0x7918, 0x791e, 0x7807, 0x0000, 0x7827, 0x0000, 0x00de, 0x00ce,
++      0x00be, 0x080c, 0x8125, 0x0898, 0x6104, 0x9186, 0x0002, 0x0128,
++      0x9186, 0x0004, 0x0110, 0x0804, 0x7b0a, 0x7808, 0x9c06, 0x0904,
++      0x7b0a, 0x080c, 0x8026, 0x080c, 0x7c1d, 0x00ce, 0x080c, 0x8125,
++      0x0804, 0x7afe, 0x00c6, 0x6024, 0x6027, 0x0002, 0xd0f4, 0x1580,
++      0x62c8, 0x60c4, 0x9205, 0x1170, 0x783c, 0x9065, 0x0130, 0x2009,
++      0x0049, 0x080c, 0x95ce, 0x00ce, 0x0005, 0x2011, 0x19d3, 0x2013,
++      0x0000, 0x0cc8, 0x793c, 0x81ff, 0x0dc0, 0x7944, 0x9192, 0x7530,
++      0x12f0, 0x8108, 0x7946, 0x793c, 0x9188, 0x0008, 0x210c, 0x918e,
++      0x0006, 0x1138, 0x6014, 0x9084, 0x1984, 0x9085, 0x0012, 0x6016,
++      0x0c10, 0x6014, 0x9084, 0x1984, 0x9085, 0x0016, 0x6016, 0x08d8,
++      0x793c, 0x2160, 0x2009, 0x004a, 0x080c, 0x95ce, 0x08a0, 0x7848,
++      0xc085, 0x784a, 0x0880, 0x0006, 0x0016, 0x00c6, 0x0126, 0x2091,
++      0x8000, 0x600f, 0x0000, 0x2c08, 0x2061, 0x19b4, 0x6020, 0x8000,
++      0x6022, 0x6010, 0x9005, 0x0148, 0x9080, 0x0003, 0x2102, 0x6112,
++      0x012e, 0x00ce, 0x001e, 0x000e, 0x0005, 0x6116, 0x6112, 0x0cc0,
++      0x00d6, 0x2069, 0x19b4, 0xb800, 0xd0d4, 0x01b8, 0x6820, 0x8000,
++      0x6822, 0x9086, 0x0001, 0x1110, 0x2b00, 0x681e, 0x2001, 0x180c,
++      0x2004, 0xd0fc, 0x0118, 0x00de, 0x0804, 0x8125, 0x6804, 0x9084,
++      0x0007, 0x0804, 0x813c, 0x00de, 0x0005, 0xc0d5, 0xb802, 0x6818,
++      0x9005, 0x0168, 0xb856, 0xb85b, 0x0000, 0x0086, 0x0006, 0x2b00,
++      0x681a, 0x008e, 0xa05a, 0x008e, 0x2069, 0x19b4, 0x08b8, 0xb856,
++      0xb85a, 0x2b00, 0x681a, 0x681e, 0x0888, 0x0006, 0x0016, 0x00c6,
++      0x0126, 0x2091, 0x8000, 0x600f, 0x0000, 0x2c08, 0x2061, 0x19b4,
++      0x6020, 0x8000, 0x6022, 0x6008, 0x9005, 0x0148, 0x9080, 0x0003,
++      0x2102, 0x610a, 0x012e, 0x00ce, 0x001e, 0x000e, 0x0005, 0x610e,
++      0x610a, 0x0cc0, 0x00c6, 0x600f, 0x0000, 0x2c08, 0x2061, 0x19b4,
++      0x6034, 0x9005, 0x0130, 0x9080, 0x0003, 0x2102, 0x6136, 0x00ce,
++      0x0005, 0x613a, 0x6136, 0x00ce, 0x0005, 0x00f6, 0x00e6, 0x00d6,
++      0x00c6, 0x00b6, 0x0096, 0x0076, 0x0066, 0x0056, 0x0036, 0x0026,
++      0x0016, 0x0006, 0x0126, 0x902e, 0x2071, 0x19b4, 0x7638, 0x2660,
++      0x2678, 0x2091, 0x8000, 0x8cff, 0x0904, 0x7cc4, 0x6010, 0x2058,
++      0xb8a0, 0x9206, 0x1904, 0x7cbf, 0x87ff, 0x0120, 0x6054, 0x9106,
++      0x1904, 0x7cbf, 0x703c, 0x9c06, 0x1178, 0x0036, 0x2019, 0x0001,
++      0x080c, 0x8dfe, 0x7033, 0x0000, 0x9006, 0x703e, 0x7042, 0x7046,
++      0x704a, 0x003e, 0x2029, 0x0001, 0x7038, 0x9c36, 0x1110, 0x660c,
++      0x763a, 0x7034, 0x9c36, 0x1140, 0x2c00, 0x9f36, 0x0118, 0x2f00,
++      0x7036, 0x0010, 0x7037, 0x0000, 0x660c, 0x0066, 0x2c00, 0x9f06,
++      0x0110, 0x7e0e, 0x0008, 0x2678, 0x600f, 0x0000, 0x080c, 0xb0ad,
++      0x01c8, 0x6014, 0x2048, 0x6020, 0x9086, 0x0003, 0x1590, 0xa867,
++      0x0103, 0xab7a, 0xa877, 0x0000, 0x0016, 0x0036, 0x0076, 0x080c,
++      0xb374, 0x080c, 0xcc6b, 0x080c, 0x61a9, 0x007e, 0x003e, 0x001e,
++      0x080c, 0xb278, 0x080c, 0x9584, 0x00ce, 0x0804, 0x7c63, 0x2c78,
++      0x600c, 0x2060, 0x0804, 0x7c63, 0x85ff, 0x0120, 0x0036, 0x080c,
++      0x820b, 0x003e, 0x012e, 0x000e, 0x001e, 0x002e, 0x003e, 0x005e,
++      0x006e, 0x007e, 0x009e, 0x00be, 0x00ce, 0x00de, 0x00ee, 0x00fe,
++      0x0005, 0x6020, 0x9086, 0x0006, 0x1158, 0x0016, 0x0036, 0x0076,
++      0x080c, 0xcc6b, 0x080c, 0xc970, 0x007e, 0x003e, 0x001e, 0x0890,
++      0x6020, 0x9086, 0x000a, 0x0904, 0x7ca9, 0x0804, 0x7ca7, 0x0006,
++      0x0066, 0x0096, 0x00c6, 0x00d6, 0x00f6, 0x9036, 0x0126, 0x2091,
++      0x8000, 0x2079, 0x19b4, 0x7838, 0x9065, 0x0904, 0x7d3f, 0x600c,
++      0x0006, 0x600f, 0x0000, 0x783c, 0x9c06, 0x1168, 0x0036, 0x2019,
++      0x0001, 0x080c, 0x8dfe, 0x7833, 0x0000, 0x901e, 0x7b3e, 0x7b42,
++      0x7b46, 0x7b4a, 0x003e, 0x080c, 0xb0ad, 0x0520, 0x6014, 0x2048,
++      0x6020, 0x9086, 0x0003, 0x1568, 0x3e08, 0x918e, 0x0002, 0x1188,
++      0x6010, 0x9005, 0x0170, 0x00b6, 0x2058, 0xb800, 0x00be, 0xd0bc,
++      0x0140, 0x6040, 0x9005, 0x1180, 0x2001, 0x1955, 0x2004, 0x6042,
++      0x0058, 0xa867, 0x0103, 0xab7a, 0xa877, 0x0000, 0x080c, 0x61a9,
++      0x080c, 0xb278, 0x080c, 0x9584, 0x000e, 0x0804, 0x7cfc, 0x7e3a,
++      0x7e36, 0x012e, 0x00fe, 0x00de, 0x00ce, 0x009e, 0x006e, 0x000e,
++      0x0005, 0x6020, 0x9086, 0x0006, 0x1118, 0x080c, 0xc970, 0x0c50,
++      0x6020, 0x9086, 0x000a, 0x09f8, 0x08e0, 0x0016, 0x0026, 0x0086,
++      0x9046, 0x0099, 0x080c, 0x7e2b, 0x008e, 0x002e, 0x001e, 0x0005,
++      0x00f6, 0x0126, 0x2079, 0x19b4, 0x2091, 0x8000, 0x080c, 0x7ec2,
++      0x080c, 0x7f3a, 0x012e, 0x00fe, 0x0005, 0x00b6, 0x0096, 0x00f6,
++      0x00e6, 0x00d6, 0x00c6, 0x0066, 0x0016, 0x0006, 0x0126, 0x2091,
++      0x8000, 0x2071, 0x19b4, 0x7614, 0x2660, 0x2678, 0x8cff, 0x0904,
++      0x7dfc, 0x6010, 0x2058, 0xb8a0, 0x9206, 0x1904, 0x7df7, 0x88ff,
++      0x0120, 0x6054, 0x9106, 0x1904, 0x7df7, 0x7024, 0x9c06, 0x1550,
++      0x2069, 0x0100, 0x68c0, 0x9005, 0x0508, 0x080c, 0x7893, 0x080c,
++      0x8b50, 0x68c3, 0x0000, 0x080c, 0x900f, 0x7027, 0x0000, 0x0036,
++      0x2069, 0x0140, 0x6b04, 0x9384, 0x1000, 0x0138, 0x2001, 0x0100,
++      0x080c, 0x28a5, 0x9006, 0x080c, 0x28a5, 0x2069, 0x0100, 0x6824,
++      0xd084, 0x0110, 0x6827, 0x0001, 0x003e, 0x0020, 0x6003, 0x0009,
++      0x630a, 0x04e8, 0x7014, 0x9c36, 0x1110, 0x660c, 0x7616, 0x7010,
++      0x9c36, 0x1140, 0x2c00, 0x9f36, 0x0118, 0x2f00, 0x7012, 0x0010,
++      0x7013, 0x0000, 0x660c, 0x0066, 0x2c00, 0x9f06, 0x0110, 0x7e0e,
++      0x0008, 0x2678, 0x600f, 0x0000, 0x6014, 0x2048, 0x080c, 0xb0ad,
++      0x01b8, 0x6020, 0x9086, 0x0003, 0x1550, 0xa867, 0x0103, 0xab7a,
++      0xa877, 0x0000, 0x0016, 0x0036, 0x0086, 0x080c, 0xb374, 0x080c,
++      0xcc6b, 0x080c, 0x61a9, 0x008e, 0x003e, 0x001e, 0x080c, 0xb278,
++      0x080c, 0x9584, 0x080c, 0x8eec, 0x00ce, 0x0804, 0x7d7e, 0x2c78,
++      0x600c, 0x2060, 0x0804, 0x7d7e, 0x012e, 0x000e, 0x001e, 0x006e,
++      0x00ce, 0x00de, 0x00ee, 0x00fe, 0x009e, 0x00be, 0x0005, 0x6020,
++      0x9086, 0x0006, 0x1158, 0x0016, 0x0036, 0x0086, 0x080c, 0xcc6b,
++      0x080c, 0xc970, 0x008e, 0x003e, 0x001e, 0x08d0, 0x080c, 0x9e99,
++      0x6020, 0x9086, 0x0002, 0x1130, 0x6004, 0x9086, 0x0085, 0x0904,
++      0x7ddd, 0x0870, 0x6020, 0x9086, 0x0005, 0x1950, 0x6004, 0x9086,
++      0x0085, 0x0d08, 0x0828, 0x00b6, 0x00a6, 0x0096, 0x00c6, 0x0006,
++      0x0126, 0x2091, 0x8000, 0x9280, 0x1000, 0x2004, 0x905d, 0x0904,
++      0x7ebb, 0x00f6, 0x00e6, 0x00d6, 0x0066, 0x2071, 0x19b4, 0xbe54,
++      0x7018, 0x9b06, 0x1108, 0x761a, 0x701c, 0x9b06, 0x1130, 0x86ff,
++      0x1118, 0x7018, 0x701e, 0x0008, 0x761e, 0xb858, 0x904d, 0x0108,
++      0xae56, 0x96d5, 0x0000, 0x0110, 0x2900, 0xb05a, 0xb857, 0x0000,
++      0xb85b, 0x0000, 0xb800, 0xc0d4, 0xc0dc, 0xb802, 0x080c, 0x5b43,
++      0x0904, 0x7eb7, 0x7624, 0x86ff, 0x0904, 0x7ea6, 0x9680, 0x0005,
++      0x2004, 0x9906, 0x15d8, 0x00d6, 0x2069, 0x0100, 0x68c0, 0x9005,
++      0x0560, 0x080c, 0x7893, 0x080c, 0x8b50, 0x68c3, 0x0000, 0x080c,
++      0x900f, 0x7027, 0x0000, 0x0036, 0x2069, 0x0140, 0x6b04, 0x9384,
++      0x1000, 0x0138, 0x2001, 0x0100, 0x080c, 0x28a5, 0x9006, 0x080c,
++      0x28a5, 0x2069, 0x0100, 0x6824, 0xd084, 0x0110, 0x6827, 0x0001,
++      0x003e, 0x00de, 0x00c6, 0xb83c, 0x9005, 0x0110, 0x8001, 0xb83e,
++      0x2660, 0x080c, 0x9584, 0x00ce, 0x0048, 0x00de, 0x00c6, 0x2660,
++      0x6003, 0x0009, 0x630a, 0x00ce, 0x0804, 0x7e5e, 0x89ff, 0x0158,
++      0xa867, 0x0103, 0xab7a, 0xa877, 0x0000, 0x080c, 0xb374, 0x080c,
++      0xcc6b, 0x080c, 0x61a9, 0x080c, 0x8eec, 0x0804, 0x7e5e, 0x006e,
++      0x00de, 0x00ee, 0x00fe, 0x012e, 0x000e, 0x00ce, 0x009e, 0x00ae,
++      0x00be, 0x0005, 0x0096, 0x0006, 0x0066, 0x00c6, 0x00d6, 0x9036,
++      0x7814, 0x9065, 0x0904, 0x7f17, 0x600c, 0x0006, 0x600f, 0x0000,
++      0x7824, 0x9c06, 0x1558, 0x2069, 0x0100, 0x68c0, 0x9005, 0x0508,
++      0x080c, 0x7893, 0x080c, 0x8b50, 0x68c3, 0x0000, 0x080c, 0x900f,
++      0x7827, 0x0000, 0x0036, 0x2069, 0x0140, 0x6b04, 0x9384, 0x1000,
++      0x0138, 0x2001, 0x0100, 0x080c, 0x28a5, 0x9006, 0x080c, 0x28a5,
++      0x2069, 0x0100, 0x6824, 0xd084, 0x0110, 0x6827, 0x0001, 0x003e,
++      0x0028, 0x6003, 0x0009, 0x630a, 0x2c30, 0x00b0, 0x6014, 0x2048,
++      0x080c, 0xb0ab, 0x0168, 0x6020, 0x9086, 0x0003, 0x11c0, 0xa867,
++      0x0103, 0xab7a, 0xa877, 0x0000, 0x080c, 0x61a9, 0x080c, 0xb278,
++      0x080c, 0x9584, 0x080c, 0x8eec, 0x000e, 0x0804, 0x7ec9, 0x7e16,
++      0x7e12, 0x00de, 0x00ce, 0x006e, 0x000e, 0x009e, 0x0005, 0x6020,
++      0x9086, 0x0006, 0x1118, 0x080c, 0xc970, 0x0c50, 0x080c, 0x9e99,
++      0x6020, 0x9086, 0x0002, 0x1128, 0x6004, 0x9086, 0x0085, 0x09b8,
++      0x08f8, 0x6020, 0x9086, 0x0005, 0x19d8, 0x6004, 0x9086, 0x0085,
++      0x0d50, 0x08b0, 0x0006, 0x0066, 0x0096, 0x00b6, 0x00c6, 0x00d6,
++      0x7818, 0x905d, 0x0904, 0x7fb7, 0xb854, 0x0006, 0x9006, 0xb856,
++      0xb85a, 0xb800, 0xc0d4, 0xc0dc, 0xb802, 0x080c, 0x5b43, 0x0904,
++      0x7fb4, 0x7e24, 0x86ff, 0x0904, 0x7fa7, 0x9680, 0x0005, 0x2004,
++      0x9906, 0x1904, 0x7fa7, 0x00d6, 0x2069, 0x0100, 0x68c0, 0x9005,
++      0x05e8, 0x080c, 0x7893, 0x080c, 0x8b50, 0x68c3, 0x0000, 0x080c,
++      0x900f, 0x7827, 0x0000, 0x0036, 0x2069, 0x0140, 0x6b04, 0x9384,
++      0x1000, 0x0138, 0x2001, 0x0100, 0x080c, 0x28a5, 0x9006, 0x080c,
++      0x28a5, 0x2069, 0x0100, 0x6824, 0xd084, 0x0110, 0x6827, 0x0001,
++      0x003e, 0x00de, 0x00c6, 0x3e08, 0x918e, 0x0002, 0x1168, 0xb800,
++      0xd0bc, 0x0150, 0x9680, 0x0010, 0x200c, 0x81ff, 0x1508, 0x2009,
++      0x1955, 0x210c, 0x2102, 0x00e0, 0xb83c, 0x9005, 0x0110, 0x8001,
++      0xb83e, 0x2660, 0x080c, 0x9584, 0x00ce, 0x0048, 0x00de, 0x00c6,
++      0x2660, 0x6003, 0x0009, 0x630a, 0x00ce, 0x0804, 0x7f4d, 0x89ff,
++      0x0138, 0xa867, 0x0103, 0xab7a, 0xa877, 0x0000, 0x080c, 0x61a9,
++      0x080c, 0x8eec, 0x0804, 0x7f4d, 0x000e, 0x0804, 0x7f41, 0x781e,
++      0x781a, 0x00de, 0x00ce, 0x00be, 0x009e, 0x006e, 0x000e, 0x0005,
++      0x00e6, 0x00d6, 0x0096, 0x0066, 0xb800, 0xd0dc, 0x01a0, 0xb84c,
++      0x904d, 0x0188, 0xa878, 0x9606, 0x1170, 0x2071, 0x19b4, 0x7024,
++      0x9035, 0x0148, 0x9080, 0x0005, 0x2004, 0x9906, 0x1120, 0xb800,
++      0xc0dc, 0xb802, 0x0029, 0x006e, 0x009e, 0x00de, 0x00ee, 0x0005,
++      0x00f6, 0x2079, 0x0100, 0x78c0, 0x9005, 0x1138, 0x00c6, 0x2660,
++      0x6003, 0x0009, 0x630a, 0x00ce, 0x04b8, 0x080c, 0x8b50, 0x78c3,
++      0x0000, 0x080c, 0x900f, 0x7027, 0x0000, 0x0036, 0x2079, 0x0140,
++      0x7b04, 0x9384, 0x1000, 0x0138, 0x2001, 0x0100, 0x080c, 0x28a5,
++      0x9006, 0x080c, 0x28a5, 0x2079, 0x0100, 0x7824, 0xd084, 0x0110,
++      0x7827, 0x0001, 0x080c, 0x900f, 0x003e, 0x080c, 0x5b43, 0x00c6,
++      0xb83c, 0x9005, 0x0110, 0x8001, 0xb83e, 0x2660, 0x080c, 0x9554,
++      0x00ce, 0xa867, 0x0103, 0xab7a, 0xa877, 0x0000, 0x080c, 0xb374,
++      0x080c, 0x61a9, 0x080c, 0x8eec, 0x00fe, 0x0005, 0x00b6, 0x00e6,
++      0x00c6, 0x2001, 0x180c, 0x2014, 0xc2e4, 0x2202, 0x2071, 0x19b4,
++      0x7004, 0x9084, 0x0007, 0x0002, 0x803e, 0x8042, 0x8059, 0x8082,
++      0x80c0, 0x803e, 0x8059, 0x803c, 0x080c, 0x0d84, 0x00ce, 0x00ee,
++      0x00be, 0x0005, 0x7024, 0x9065, 0x0148, 0x7020, 0x8001, 0x7022,
++      0x600c, 0x9015, 0x0158, 0x7216, 0x600f, 0x0000, 0x7007, 0x0000,
++      0x7027, 0x0000, 0x00ce, 0x00ee, 0x00be, 0x0005, 0x7216, 0x7212,
++      0x0ca8, 0x6010, 0x2058, 0x080c, 0x5b43, 0xb800, 0xc0dc, 0xb802,
++      0x7007, 0x0000, 0x7027, 0x0000, 0x7020, 0x8001, 0x7022, 0x1148,
++      0x2001, 0x180c, 0x2014, 0xd2ec, 0x1180, 0x00ce, 0x00ee, 0x00be,
++      0x0005, 0xb854, 0x9015, 0x0120, 0x721e, 0x080c, 0x8125, 0x0ca8,
++      0x7218, 0x721e, 0x080c, 0x8125, 0x0c80, 0xc2ec, 0x2202, 0x080c,
++      0x820b, 0x0c58, 0x7024, 0x9065, 0x05b8, 0x700c, 0x9c06, 0x1160,
++      0x080c, 0x8eec, 0x600c, 0x9015, 0x0120, 0x720e, 0x600f, 0x0000,
++      0x0448, 0x720e, 0x720a, 0x0430, 0x7014, 0x9c06, 0x1160, 0x080c,
++      0x8eec, 0x600c, 0x9015, 0x0120, 0x7216, 0x600f, 0x0000, 0x00d0,
++      0x7216, 0x7212, 0x00b8, 0x6020, 0x9086, 0x0003, 0x1198, 0x6010,
++      0x2058, 0x080c, 0x5b43, 0xb800, 0xc0dc, 0xb802, 0x080c, 0x8eec,
++      0x701c, 0x9065, 0x0138, 0xb854, 0x9015, 0x0110, 0x721e, 0x0010,
++      0x7218, 0x721e, 0x7027, 0x0000, 0x00ce, 0x00ee, 0x00be, 0x0005,
++      0x7024, 0x9065, 0x0140, 0x080c, 0x8eec, 0x600c, 0x9015, 0x0158,
++      0x720e, 0x600f, 0x0000, 0x080c, 0x900f, 0x7027, 0x0000, 0x00ce,
++      0x00ee, 0x00be, 0x0005, 0x720e, 0x720a, 0x0ca8, 0x00d6, 0x2069,
++      0x19b4, 0x6830, 0x9084, 0x0003, 0x0002, 0x80e3, 0x80e5, 0x8109,
++      0x80e1, 0x080c, 0x0d84, 0x00de, 0x0005, 0x00c6, 0x6840, 0x9086,
++      0x0001, 0x01b8, 0x683c, 0x9065, 0x0130, 0x600c, 0x9015, 0x0170,
++      0x6a3a, 0x600f, 0x0000, 0x6833, 0x0000, 0x683f, 0x0000, 0x2011,
++      0x19d3, 0x2013, 0x0000, 0x00ce, 0x00de, 0x0005, 0x683a, 0x6836,
++      0x0c90, 0x6843, 0x0000, 0x6838, 0x9065, 0x0d68, 0x6003, 0x0003,
++      0x0c50, 0x00c6, 0x9006, 0x6842, 0x6846, 0x684a, 0x683c, 0x9065,
++      0x0160, 0x600c, 0x9015, 0x0130, 0x6a3a, 0x600f, 0x0000, 0x683f,
++      0x0000, 0x0018, 0x683e, 0x683a, 0x6836, 0x00ce, 0x00de, 0x0005,
++      0xc1e5, 0x2001, 0x180c, 0x2102, 0x0005, 0x2001, 0x180c, 0x200c,
++      0xd1ec, 0x0138, 0xc1ec, 0x2102, 0x080c, 0x820b, 0x2001, 0x180c,
++      0x200c, 0x9184, 0x0600, 0x9086, 0x0600, 0x0d50, 0x00d6, 0x2069,
++      0x19b4, 0x6804, 0x9084, 0x0007, 0x0002, 0x8147, 0x81ea, 0x81ea,
++      0x81ea, 0x81ea, 0x81ec, 0x81ea, 0x8145, 0x080c, 0x0d84, 0x6820,
++      0x9005, 0x1110, 0x00de, 0x0005, 0x00c6, 0x680c, 0x9065, 0x0150,
++      0x6807, 0x0004, 0x6826, 0x682b, 0x0000, 0x080c, 0x8256, 0x00ce,
++      0x00de, 0x0005, 0x6814, 0x9065, 0x0150, 0x6807, 0x0001, 0x6826,
++      0x682b, 0x0000, 0x080c, 0x8256, 0x00ce, 0x00de, 0x0005, 0x00b6,
++      0x00e6, 0x6a1c, 0x92dd, 0x0000, 0x0904, 0x81d6, 0xb84c, 0x900d,
++      0x0118, 0xb888, 0x9005, 0x01a0, 0xb854, 0x905d, 0x0120, 0x920e,
++      0x0904, 0x81d6, 0x0028, 0x6818, 0x920e, 0x0904, 0x81d6, 0x2058,
++      0xb84c, 0x900d, 0x0d88, 0xb888, 0x9005, 0x1d70, 0x2b00, 0x681e,
++      0xbb3c, 0xb838, 0x9302, 0x1e40, 0x080c, 0x952b, 0x0904, 0x81d6,
++      0x8318, 0xbb3e, 0x6116, 0x2b10, 0x6212, 0x0096, 0x2148, 0xa880,
++      0x9084, 0x00ff, 0x605e, 0xa883, 0x0000, 0xa884, 0x009e, 0x908a,
++      0x199a, 0x0210, 0x2001, 0x1999, 0x8003, 0x801b, 0x831b, 0x9318,
++      0x631a, 0x6114, 0x0096, 0x2148, 0xa964, 0x009e, 0x918c, 0x00ff,
++      0x918e, 0x0048, 0x0538, 0x00f6, 0x2c78, 0x2061, 0x0100, 0xbab0,
++      0x629a, 0x2069, 0x0200, 0x2071, 0x0240, 0x080c, 0x8786, 0x2069,
++      0x19b4, 0xbb00, 0xc3dd, 0xbb02, 0x6807, 0x0002, 0x2f18, 0x6b26,
++      0x682b, 0x0000, 0x7823, 0x0003, 0x7803, 0x0001, 0x7807, 0x0040,
++      0x00fe, 0x00ee, 0x00be, 0x00ce, 0x00de, 0x0005, 0x00ee, 0x00be,
++      0x00ce, 0x0cd0, 0xbb00, 0xc3dd, 0xbb02, 0x6807, 0x0006, 0x2f18,
++      0x6b26, 0x682b, 0x0000, 0x080c, 0x9387, 0x00ee, 0x00be, 0x00ce,
++      0x00de, 0x0005, 0x00de, 0x0005, 0x00c6, 0x680c, 0x9065, 0x0138,
++      0x6807, 0x0004, 0x6826, 0x682b, 0x0000, 0x080c, 0x8256, 0x00ce,
++      0x00de, 0x0005, 0x2001, 0x180c, 0x2014, 0xc2ed, 0x2202, 0x00de,
++      0x00fe, 0x0005, 0x2001, 0x180c, 0x2014, 0xd2e4, 0x0120, 0xc2e4,
++      0x2202, 0x080c, 0x8136, 0x00f6, 0x00d6, 0x2069, 0x19b4, 0x6830,
++      0x9086, 0x0000, 0x11f0, 0x2001, 0x180c, 0x200c, 0xd1c4, 0x11e0,
++      0x6838, 0x907d, 0x01b0, 0x6a04, 0x9296, 0x0000, 0x1588, 0x6833,
++      0x0001, 0x683e, 0x6847, 0x0000, 0x684b, 0x0000, 0x0126, 0x00f6,
++      0x2091, 0x2400, 0x002e, 0x080c, 0x1933, 0x1178, 0x012e, 0x080c,
++      0x899e, 0x00de, 0x00fe, 0x0005, 0xc1c4, 0x2102, 0x0066, 0x2031,
++      0x0001, 0x080c, 0x691e, 0x006e, 0x08d8, 0x012e, 0x6843, 0x0000,
++      0x7803, 0x0002, 0x780c, 0x9015, 0x0140, 0x6a3a, 0x780f, 0x0000,
++      0x6833, 0x0000, 0x683f, 0x0000, 0x0c20, 0x683a, 0x6836, 0x0cc0,
++      0x6a04, 0x9296, 0x0006, 0x0958, 0x0804, 0x81fa, 0x6020, 0x9084,
++      0x000f, 0x000b, 0x0005, 0x826a, 0x826f, 0x86ca, 0x874f, 0x826f,
++      0x86ca, 0x874f, 0x826a, 0x826f, 0x826a, 0x826a, 0x826a, 0x826a,
++      0x826a, 0x826a, 0x080c, 0x8026, 0x080c, 0x8125, 0x0005, 0x00b6,
++      0x0156, 0x0136, 0x0146, 0x01c6, 0x01d6, 0x00c6, 0x00d6, 0x00e6,
++      0x00f6, 0x2069, 0x0200, 0x2071, 0x0240, 0x6004, 0x908a, 0x0053,
++      0x1a0c, 0x0d84, 0x6110, 0x2158, 0xb9b0, 0x2c78, 0x2061, 0x0100,
++      0x619a, 0x908a, 0x0040, 0x1a04, 0x82db, 0x005b, 0x00fe, 0x00ee,
++      0x00de, 0x00ce, 0x01de, 0x01ce, 0x014e, 0x013e, 0x015e, 0x00be,
++      0x0005, 0x8451, 0x848c, 0x84b5, 0x8559, 0x857b, 0x8581, 0x858e,
++      0x8596, 0x85a2, 0x85a8, 0x85b9, 0x85a8, 0x8611, 0x8596, 0x861d,
++      0x8623, 0x85a2, 0x8623, 0x862f, 0x82d9, 0x82d9, 0x82d9, 0x82d9,
++      0x82d9, 0x82d9, 0x82d9, 0x82d9, 0x82d9, 0x82d9, 0x82d9, 0x8c9a,
++      0x8cb0, 0x8cba, 0x8cda, 0x8d0c, 0x858e, 0x82d9, 0x858e, 0x85a8,
++      0x82d9, 0x84b5, 0x8559, 0x82d9, 0x90fc, 0x85a8, 0x82d9, 0x9118,
++      0x85a8, 0x82d9, 0x85a2, 0x844b, 0x82fc, 0x82d9, 0x912e, 0x919a,
++      0x9271, 0x82d9, 0x927e, 0x858b, 0x92a9, 0x82d9, 0x8d16, 0x92d6,
++      0x82d9, 0x080c, 0x0d84, 0x2100, 0x005b, 0x00fe, 0x00ee, 0x00de,
++      0x00ce, 0x01de, 0x01ce, 0x014e, 0x013e, 0x015e, 0x00be, 0x0005,
++      0x82fa, 0x82fa, 0x82fa, 0x8322, 0x83ce, 0x83d9, 0x82fa, 0x82fa,
++      0x82fa, 0x8420, 0x842c, 0x833d, 0x82fa, 0x8358, 0x838c, 0x9447,
++      0x948c, 0x85a8, 0x080c, 0x0d84, 0x00d6, 0x0096, 0x080c, 0x8642,
++      0x7003, 0x2414, 0x7007, 0x0018, 0x700b, 0x0800, 0x7814, 0x2048,
++      0xa83c, 0x700e, 0xa850, 0x7022, 0xa854, 0x7026, 0x60c3, 0x0018,
++      0x080c, 0x8b24, 0x009e, 0x00de, 0x0005, 0x7810, 0x00b6, 0x2058,
++      0xb8a0, 0x00be, 0x080c, 0x94d3, 0x1110, 0xd0bc, 0x0110, 0x9085,
++      0x0001, 0x0005, 0x00d6, 0x0096, 0x080c, 0x8642, 0x7003, 0x0500,
++      0x7814, 0x2048, 0xa874, 0x700a, 0xa878, 0x700e, 0xa87c, 0x7012,
++      0xa880, 0x7016, 0xa884, 0x701a, 0xa888, 0x701e, 0x60c3, 0x0010,
++      0x080c, 0x8b24, 0x009e, 0x00de, 0x0005, 0x00d6, 0x0096, 0x080c,
++      0x8642, 0x7003, 0x0500, 0x7814, 0x2048, 0xa8cc, 0x700a, 0xa8d0,
++      0x700e, 0xa8d4, 0x7012, 0xa8d8, 0x7016, 0xa8dc, 0x701a, 0xa8e0,
++      0x701e, 0x60c3, 0x0010, 0x080c, 0x8b24, 0x009e, 0x00de, 0x0005,
++      0x00d6, 0x0096, 0x0126, 0x2091, 0x8000, 0x080c, 0x8642, 0x20e9,
++      0x0000, 0x2001, 0x1970, 0x2003, 0x0000, 0x7814, 0x2048, 0xa814,
++      0x8003, 0x60c2, 0xa830, 0x20a8, 0xa860, 0x20e0, 0xa85c, 0x9080,
++      0x001b, 0x2098, 0x2001, 0x1970, 0x0016, 0x200c, 0x2001, 0x0001,
++      0x080c, 0x1ff9, 0x080c, 0xbd44, 0x9006, 0x080c, 0x1ff9, 0x001e,
++      0xa804, 0x9005, 0x0110, 0x2048, 0x0c28, 0x04d9, 0x080c, 0x8b24,
++      0x012e, 0x009e, 0x00de, 0x0005, 0x00d6, 0x0096, 0x0126, 0x2091,
++      0x8000, 0x080c, 0x868d, 0x20e9, 0x0000, 0x2001, 0x1970, 0x2003,
++      0x0000, 0x7814, 0x2048, 0xa86f, 0x0200, 0xa873, 0x0000, 0xa814,
++      0x8003, 0x60c2, 0xa830, 0x20a8, 0xa860, 0x20e0, 0xa85c, 0x9080,
++      0x001b, 0x2098, 0x2001, 0x1970, 0x0016, 0x200c, 0x080c, 0xbd44,
++      0x001e, 0xa804, 0x9005, 0x0110, 0x2048, 0x0c60, 0x0051, 0x7814,
++      0x2048, 0x080c, 0x0f60, 0x080c, 0x8b24, 0x012e, 0x009e, 0x00de,
++      0x0005, 0x60c0, 0x8004, 0x9084, 0x0003, 0x9005, 0x0130, 0x9082,
++      0x0004, 0x20a3, 0x0000, 0x8000, 0x1de0, 0x0005, 0x080c, 0x8642,
++      0x7003, 0x7800, 0x7808, 0x8007, 0x700a, 0x60c3, 0x0008, 0x0804,
++      0x8b24, 0x00d6, 0x00e6, 0x080c, 0x868d, 0x7814, 0x9084, 0xff00,
++      0x2073, 0x0200, 0x8e70, 0x8e70, 0x9095, 0x0010, 0x2272, 0x8e70,
++      0x2073, 0x0034, 0x8e70, 0x2069, 0x1805, 0x20a9, 0x0004, 0x2d76,
++      0x8d68, 0x8e70, 0x1f04, 0x83ef, 0x2069, 0x1801, 0x20a9, 0x0004,
++      0x2d76, 0x8d68, 0x8e70, 0x1f04, 0x83f8, 0x2069, 0x1980, 0x9086,
++      0xdf00, 0x0110, 0x2069, 0x199a, 0x20a9, 0x001a, 0x9e86, 0x0260,
++      0x1148, 0x00c6, 0x2061, 0x0200, 0x6010, 0x8000, 0x6012, 0x00ce,
++      0x2071, 0x0240, 0x2d04, 0x8007, 0x2072, 0x8d68, 0x8e70, 0x1f04,
++      0x8406, 0x60c3, 0x004c, 0x080c, 0x8b24, 0x00ee, 0x00de, 0x0005,
++      0x080c, 0x8642, 0x7003, 0x6300, 0x7007, 0x0028, 0x7808, 0x700e,
++      0x60c3, 0x0008, 0x0804, 0x8b24, 0x00d6, 0x0026, 0x0016, 0x080c,
++      0x868d, 0x7003, 0x0200, 0x7814, 0x700e, 0x00e6, 0x9ef0, 0x0004,
++      0x2009, 0x0001, 0x2011, 0x000c, 0x2073, 0x0800, 0x8e70, 0x2073,
++      0x0000, 0x00ee, 0x7206, 0x710a, 0x62c2, 0x080c, 0x8b24, 0x001e,
++      0x002e, 0x00de, 0x0005, 0x2001, 0x1816, 0x2004, 0x609a, 0x0804,
++      0x8b24, 0x080c, 0x8642, 0x7003, 0x5200, 0x2069, 0x1852, 0x6804,
++      0xd084, 0x0130, 0x6828, 0x0016, 0x080c, 0x2430, 0x710e, 0x001e,
++      0x20a9, 0x0004, 0x20e1, 0x0001, 0x2099, 0x1805, 0x20e9, 0x0000,
++      0x20a1, 0x0250, 0x4003, 0x20a9, 0x0004, 0x2099, 0x1801, 0x20a1,
++      0x0254, 0x4003, 0x080c, 0x94d3, 0x1120, 0xb8a0, 0x9082, 0x007f,
++      0x0248, 0x2001, 0x181d, 0x2004, 0x7032, 0x2001, 0x181e, 0x2004,
++      0x7036, 0x0030, 0x2001, 0x1816, 0x2004, 0x9084, 0x00ff, 0x7036,
++      0x60c3, 0x001c, 0x0804, 0x8b24, 0x080c, 0x8642, 0x7003, 0x0500,
++      0x080c, 0x94d3, 0x1120, 0xb8a0, 0x9082, 0x007f, 0x0248, 0x2001,
++      0x181d, 0x2004, 0x700a, 0x2001, 0x181e, 0x2004, 0x700e, 0x0030,
++      0x2001, 0x1816, 0x2004, 0x9084, 0x00ff, 0x700e, 0x20a9, 0x0004,
++      0x20e1, 0x0001, 0x2099, 0x1805, 0x20e9, 0x0000, 0x20a1, 0x0250,
++      0x4003, 0x60c3, 0x0010, 0x0804, 0x8b24, 0x080c, 0x8642, 0x9006,
++      0x080c, 0x5ef7, 0xb8a0, 0x9086, 0x007e, 0x1130, 0x7003, 0x0400,
++      0x620c, 0xc2b4, 0x620e, 0x0058, 0x7814, 0x0096, 0x904d, 0x0120,
++      0x9006, 0xa89a, 0xa8a6, 0xa8aa, 0x009e, 0x7003, 0x0300, 0xb8a0,
++      0x9086, 0x007e, 0x1904, 0x8520, 0x00d6, 0x2069, 0x193b, 0x2001,
++      0x1836, 0x2004, 0xd0a4, 0x0178, 0x6800, 0x700a, 0x6808, 0x9084,
++      0x2000, 0x7012, 0x680c, 0x7016, 0x701f, 0x2710, 0x6818, 0x7022,
++      0x681c, 0x7026, 0x0080, 0x6800, 0x700a, 0x6804, 0x700e, 0x6808,
++      0x080c, 0x6877, 0x1118, 0x9084, 0x37ff, 0x0010, 0x9084, 0x3fff,
++      0x7012, 0x680c, 0x7016, 0x00de, 0x20a9, 0x0004, 0x20e1, 0x0001,
++      0x2099, 0x1805, 0x20e9, 0x0000, 0x20a1, 0x0256, 0x4003, 0x20a9,
++      0x0004, 0x2099, 0x1801, 0x20a1, 0x025a, 0x4003, 0x00d6, 0x080c,
++      0x934e, 0x2069, 0x1943, 0x2071, 0x024e, 0x6800, 0xc0dd, 0x7002,
++      0x080c, 0x4dee, 0xd0e4, 0x0110, 0x680c, 0x700e, 0x00de, 0x04a8,
++      0x2001, 0x1836, 0x2004, 0xd0a4, 0x0170, 0x0016, 0x2001, 0x193c,
++      0x200c, 0x60e0, 0x9106, 0x0130, 0x2100, 0x60e3, 0x0000, 0x080c,
++      0x2471, 0x61e2, 0x001e, 0x20e1, 0x0001, 0x2099, 0x193b, 0x20e9,
++      0x0000, 0x20a1, 0x024e, 0x20a9, 0x0008, 0x4003, 0x20a9, 0x0004,
++      0x2099, 0x1805, 0x20a1, 0x0256, 0x4003, 0x20a9, 0x0004, 0x2099,
++      0x1801, 0x20a1, 0x025a, 0x4003, 0x080c, 0x934e, 0x20a1, 0x024e,
++      0x20a9, 0x0008, 0x2099, 0x1943, 0x4003, 0x60c3, 0x0074, 0x0804,
++      0x8b24, 0x080c, 0x8642, 0x7003, 0x2010, 0x7007, 0x0014, 0x700b,
++      0x0800, 0x700f, 0x2000, 0x9006, 0x00f6, 0x2079, 0x1852, 0x7904,
++      0x00fe, 0xd1ac, 0x1110, 0x9085, 0x0020, 0xd1a4, 0x0110, 0x9085,
++      0x0010, 0x9085, 0x0002, 0x00d6, 0x0804, 0x85f2, 0x7026, 0x60c3,
++      0x0014, 0x0804, 0x8b24, 0x080c, 0x8642, 0x7003, 0x5000, 0x0804,
++      0x84cf, 0x080c, 0x8642, 0x7003, 0x2110, 0x7007, 0x0014, 0x60c3,
++      0x0014, 0x0804, 0x8b24, 0x080c, 0x8684, 0x0010, 0x080c, 0x868d,
++      0x7003, 0x0200, 0x60c3, 0x0004, 0x0804, 0x8b24, 0x080c, 0x868d,
++      0x7003, 0x0100, 0x700b, 0x0003, 0x700f, 0x2a00, 0x60c3, 0x0008,
++      0x0804, 0x8b24, 0x080c, 0x868d, 0x7003, 0x0200, 0x0804, 0x84cf,
++      0x080c, 0x868d, 0x7003, 0x0100, 0x782c, 0x9005, 0x0110, 0x700a,
++      0x0010, 0x700b, 0x0003, 0x7814, 0x700e, 0x60c3, 0x0008, 0x0804,
++      0x8b24, 0x00d6, 0x080c, 0x868d, 0x7003, 0x0210, 0x7007, 0x0014,
++      0x700b, 0x0800, 0xb894, 0x9086, 0x0014, 0x1198, 0xb99c, 0x9184,
++      0x0030, 0x0190, 0xb998, 0x9184, 0xc000, 0x1140, 0xd1ec, 0x0118,
++      0x700f, 0x2100, 0x0058, 0x700f, 0x0100, 0x0040, 0x700f, 0x0400,
++      0x0028, 0x700f, 0x0700, 0x0010, 0x700f, 0x0800, 0x00f6, 0x2079,
++      0x1852, 0x7904, 0x00fe, 0xd1ac, 0x1110, 0x9085, 0x0020, 0xd1a4,
++      0x0110, 0x9085, 0x0010, 0x2009, 0x1874, 0x210c, 0xd184, 0x1110,
++      0x9085, 0x0002, 0x0026, 0x2009, 0x1872, 0x210c, 0xd1e4, 0x0150,
++      0xc0c5, 0xbabc, 0xd28c, 0x1108, 0xc0cd, 0x9094, 0x0030, 0x9296,
++      0x0010, 0x0140, 0xd1ec, 0x0130, 0x9094, 0x0030, 0x9296, 0x0010,
++      0x0108, 0xc0bd, 0x002e, 0x7026, 0x60c3, 0x0014, 0x00de, 0x0804,
++      0x8b24, 0x080c, 0x868d, 0x7003, 0x0210, 0x7007, 0x0014, 0x700f,
++      0x0100, 0x60c3, 0x0014, 0x0804, 0x8b24, 0x080c, 0x868d, 0x7003,
++      0x0200, 0x0804, 0x8455, 0x080c, 0x868d, 0x7003, 0x0100, 0x700b,
++      0x0003, 0x700f, 0x2a00, 0x60c3, 0x0008, 0x0804, 0x8b24, 0x080c,
++      0x868d, 0x7003, 0x0100, 0x700b, 0x000b, 0x60c3, 0x0008, 0x0804,
++      0x8b24, 0x0026, 0x00d6, 0x0036, 0x0046, 0x2019, 0x3200, 0x2021,
++      0x0800, 0x0040, 0x0026, 0x00d6, 0x0036, 0x0046, 0x2019, 0x2200,
++      0x2021, 0x0100, 0x080c, 0x9363, 0xb810, 0x9305, 0x7002, 0xb814,
++      0x7006, 0x2069, 0x1800, 0x6874, 0x700a, 0x6878, 0x700e, 0x9485,
++      0x0029, 0x7012, 0x004e, 0x003e, 0x00de, 0x080c, 0x8b12, 0x721a,
++      0x9f95, 0x0000, 0x7222, 0x7027, 0xffff, 0x2071, 0x024c, 0x002e,
++      0x0005, 0x0026, 0x080c, 0x9363, 0x7003, 0x02ff, 0x7007, 0xfffc,
++      0x00d6, 0x2069, 0x1800, 0x6874, 0x700a, 0x6878, 0x700e, 0x00de,
++      0x7013, 0x2029, 0x0c10, 0x7003, 0x0100, 0x7007, 0x0000, 0x700b,
++      0xfc02, 0x700f, 0x0000, 0x0005, 0x0026, 0x00d6, 0x0036, 0x0046,
++      0x2019, 0x3300, 0x2021, 0x0800, 0x0040, 0x0026, 0x00d6, 0x0036,
++      0x0046, 0x2019, 0x2300, 0x2021, 0x0100, 0x080c, 0x9363, 0xb810,
++      0x9305, 0x7002, 0xb814, 0x7006, 0x2069, 0x1800, 0xb810, 0x9005,
++      0x1140, 0xb814, 0x9005, 0x1128, 0x700b, 0x00ff, 0x700f, 0xfffe,
++      0x0020, 0x6874, 0x700a, 0x6878, 0x700e, 0x0000, 0x9485, 0x0098,
++      0x7012, 0x004e, 0x003e, 0x00de, 0x080c, 0x8b12, 0x721a, 0x7a08,
++      0x7222, 0x2f10, 0x7226, 0x2071, 0x024c, 0x002e, 0x0005, 0x080c,
++      0x8b12, 0x721a, 0x7a08, 0x7222, 0x7814, 0x7026, 0x2071, 0x024c,
++      0x002e, 0x0005, 0x00b6, 0x00c6, 0x00d6, 0x00e6, 0x00f6, 0x2069,
++      0x0200, 0x2071, 0x0240, 0x6004, 0x908a, 0x0085, 0x0a0c, 0x0d84,
++      0x908a, 0x0092, 0x1a0c, 0x0d84, 0x6110, 0x2158, 0xb9b0, 0x2c78,
++      0x2061, 0x0100, 0x619a, 0x9082, 0x0085, 0x0033, 0x00fe, 0x00ee,
++      0x00de, 0x00ce, 0x00be, 0x0005, 0x86fb, 0x8700, 0x870b, 0x86f9,
++      0x86f9, 0x86f9, 0x86fb, 0x86f9, 0x86f9, 0x86f9, 0x86f9, 0x86f9,
++      0x86f9, 0x080c, 0x0d84, 0x00c1, 0x60c3, 0x0000, 0x0804, 0x8b24,
++      0x0431, 0x7808, 0x700a, 0x7814, 0x700e, 0x7017, 0xffff, 0x60c3,
++      0x000c, 0x0804, 0x8b24, 0x0479, 0x7003, 0x0003, 0x7007, 0x0300,
++      0x60c3, 0x0004, 0x0804, 0x8b24, 0x0026, 0x080c, 0x9363, 0xb810,
++      0x9085, 0x8100, 0x7002, 0xb814, 0x7006, 0x2069, 0x1800, 0x6874,
++      0x700a, 0x6878, 0x700e, 0x7013, 0x0009, 0x0804, 0x865d, 0x0026,
++      0x080c, 0x9363, 0xb810, 0x9085, 0x8400, 0x7002, 0xb814, 0x7006,
++      0x2069, 0x1800, 0x6874, 0x700a, 0x6878, 0x700e, 0x2001, 0x0099,
++      0x7012, 0x0804, 0x86bf, 0x0026, 0x080c, 0x9363, 0xb810, 0x9085,
++      0x8500, 0x7002, 0xb814, 0x7006, 0x2069, 0x1800, 0x6874, 0x700a,
++      0x6878, 0x700e, 0x2001, 0x0099, 0x7012, 0x0804, 0x86bf, 0x00b6,
++      0x00c6, 0x00d6, 0x00e6, 0x00f6, 0x2c78, 0x2069, 0x0200, 0x2071,
++      0x0240, 0x7804, 0x908a, 0x0040, 0x0a0c, 0x0d84, 0x908a, 0x0054,
++      0x1a0c, 0x0d84, 0x7910, 0x2158, 0xb9b0, 0x2061, 0x0100, 0x619a,
++      0x9082, 0x0040, 0x0033, 0x00fe, 0x00ee, 0x00de, 0x00ce, 0x00be,
++      0x0005, 0x8786, 0x882d, 0x8800, 0x894f, 0x8784, 0x8784, 0x8784,
++      0x8784, 0x8784, 0x8784, 0x8784, 0x8eb9, 0x8ec5, 0x8ed1, 0x8edd,
++      0x8784, 0x92b5, 0x8784, 0x8ead, 0x080c, 0x0d84, 0x0096, 0x780b,
++      0xffff, 0x080c, 0x87dc, 0x7914, 0x2148, 0xa978, 0x7956, 0x7132,
++      0xa97c, 0x9184, 0x000f, 0x1118, 0x2001, 0x0005, 0x0040, 0xd184,
++      0x0118, 0x2001, 0x0004, 0x0018, 0x9084, 0x0006, 0x8004, 0x2010,
++      0x785c, 0x9084, 0x00ff, 0x8007, 0x9205, 0x7042, 0xd1ac, 0x0128,
++      0x7047, 0x0002, 0x080c, 0x150d, 0x0050, 0xd1b4, 0x0118, 0x7047,
++      0x0001, 0x0028, 0x7047, 0x0000, 0x9016, 0x2230, 0x0010, 0xaab0,
++      0xaeac, 0x726a, 0x766e, 0x20a9, 0x0008, 0x20e9, 0x0000, 0xa860,
++      0x20e0, 0xa85c, 0x9080, 0x0023, 0x2098, 0x20a1, 0x0252, 0x2069,
++      0x0200, 0x6813, 0x0018, 0x4003, 0x6813, 0x0008, 0x60c3, 0x0020,
++      0x6017, 0x0009, 0x2001, 0x19d0, 0x2003, 0x07d0, 0x2001, 0x19cf,
++      0x2003, 0x0009, 0x009e, 0x0005, 0x6813, 0x0008, 0xba8c, 0x8210,
++      0xb8bc, 0xd084, 0x0128, 0x7a46, 0x7b14, 0x7b4a, 0x722e, 0x732a,
++      0x9294, 0x00ff, 0xba8e, 0x8217, 0x721a, 0xba10, 0x9295, 0x0600,
++      0x7202, 0xba14, 0x7206, 0x2069, 0x1800, 0x6a74, 0x720a, 0x6a78,
++      0x720e, 0x7013, 0x0829, 0x2f10, 0x7222, 0x7027, 0xffff, 0x0005,
++      0x00d6, 0x0096, 0x0081, 0x7814, 0x2048, 0xa890, 0x7002, 0xa88c,
++      0x7006, 0xa8b0, 0x700a, 0xa8ac, 0x700e, 0x60c3, 0x000c, 0x009e,
++      0x00de, 0x0804, 0x8b24, 0x6813, 0x0008, 0xb810, 0x9085, 0x0500,
++      0x7002, 0xb814, 0x7006, 0x2069, 0x1800, 0x6874, 0x700a, 0x6878,
++      0x700e, 0x7013, 0x0889, 0x080c, 0x8b12, 0x721a, 0x7a08, 0x7222,
++      0x2f10, 0x7226, 0x2071, 0x024c, 0x0005, 0x00d6, 0x0096, 0x080c,
++      0x892d, 0x7814, 0x2048, 0x080c, 0xb0ab, 0x1130, 0x7814, 0x9084,
++      0x0700, 0x8007, 0x0033, 0x0010, 0x9006, 0x001b, 0x009e, 0x00de,
++      0x0005, 0x884b, 0x88b4, 0x88c4, 0x88ea, 0x88f6, 0x8907, 0x890f,
++      0x8849, 0x080c, 0x0d84, 0x0016, 0x0036, 0xa97c, 0x918c, 0x0003,
++      0x0118, 0x9186, 0x0003, 0x1198, 0xaba8, 0x7824, 0xd0cc, 0x1168,
++      0x7316, 0xa898, 0x701a, 0xa894, 0x701e, 0x003e, 0x001e, 0x2001,
++      0x197e, 0x2004, 0x60c2, 0x0804, 0x8b24, 0xc3e5, 0x0c88, 0x9186,
++      0x0001, 0x190c, 0x0d84, 0xaba8, 0x7824, 0xd0cc, 0x1904, 0x88b1,
++      0x7316, 0xa898, 0x701a, 0xa894, 0x701e, 0xa8a4, 0x7026, 0xa8ac,
++      0x702e, 0x2009, 0x0018, 0x9384, 0x0300, 0x0570, 0xd3c4, 0x0110,
++      0xa8ac, 0x9108, 0xd3cc, 0x0110, 0xa8a4, 0x9108, 0x6810, 0x9085,
++      0x0010, 0x6812, 0x2011, 0x0258, 0x20e9, 0x0000, 0x22a0, 0x0156,
++      0x20a9, 0x0008, 0xa860, 0x20e0, 0xa85c, 0x9080, 0x002c, 0x2098,
++      0x4003, 0x6810, 0x8000, 0x6812, 0x2011, 0x0240, 0x22a0, 0x20a9,
++      0x0005, 0x4003, 0x6810, 0xc084, 0x6812, 0x015e, 0x9184, 0x0003,
++      0x0118, 0x2019, 0x0245, 0x201a, 0x61c2, 0x003e, 0x001e, 0x0804,
++      0x8b24, 0xc3e5, 0x0804, 0x8870, 0x2011, 0x0008, 0x2001, 0x180e,
++      0x2004, 0xd0a4, 0x0110, 0x2011, 0x0028, 0x7824, 0xd0cc, 0x1110,
++      0x7216, 0x0470, 0x0ce8, 0xc2e5, 0x2011, 0x0302, 0x0016, 0x782c,
++      0x701a, 0x7930, 0x711e, 0x9105, 0x0108, 0xc2dd, 0x001e, 0x7824,
++      0xd0cc, 0x0108, 0xc2e5, 0x7216, 0x7027, 0x0012, 0x702f, 0x0008,
++      0x7043, 0x7000, 0x7047, 0x0500, 0x704f, 0x000a, 0x2069, 0x0200,
++      0x6813, 0x0009, 0x2071, 0x0240, 0x700b, 0x2500, 0x60c3, 0x0032,
++      0x0804, 0x8b24, 0x2011, 0x0028, 0x7824, 0xd0cc, 0x1128, 0x7216,
++      0x60c3, 0x0018, 0x0804, 0x8b24, 0x0cd0, 0xc2e5, 0x2011, 0x0100,
++      0x7824, 0xd0cc, 0x0108, 0xc2e5, 0x7216, 0x702f, 0x0008, 0x7858,
++      0x9084, 0x00ff, 0x7036, 0x60c3, 0x0020, 0x0804, 0x8b24, 0x2011,
++      0x0008, 0x7824, 0xd0cc, 0x0108, 0xc2e5, 0x7216, 0x0c08, 0x0036,
++      0x7b14, 0x9384, 0xff00, 0x7816, 0x9384, 0x00ff, 0x8001, 0x1138,
++      0x7824, 0xd0cc, 0x0108, 0xc2e5, 0x7216, 0x003e, 0x0888, 0x0046,
++      0x2021, 0x0800, 0x0006, 0x7824, 0xd0cc, 0x000e, 0x0108, 0xc4e5,
++      0x7416, 0x004e, 0x701e, 0x003e, 0x0818, 0x00d6, 0x6813, 0x0008,
++      0xb810, 0x9085, 0x0700, 0x7002, 0xb814, 0x7006, 0x2069, 0x1800,
++      0x6874, 0x700a, 0x6878, 0x700e, 0x7824, 0xd0cc, 0x1168, 0x7013,
++      0x0898, 0x080c, 0x8b12, 0x721a, 0x7a08, 0x7222, 0x2f10, 0x7226,
++      0x2071, 0x024c, 0x00de, 0x0005, 0x7013, 0x0889, 0x0c90, 0x0016,
++      0x7814, 0x9084, 0x0700, 0x8007, 0x0013, 0x001e, 0x0005, 0x895f,
++      0x895f, 0x8961, 0x895f, 0x895f, 0x895f, 0x897b, 0x895f, 0x080c,
++      0x0d84, 0x7914, 0x918c, 0x08ff, 0x918d, 0xf600, 0x7916, 0x2009,
++      0x0003, 0x00b9, 0x2069, 0x1852, 0x6804, 0xd0bc, 0x0130, 0x682c,
++      0x9084, 0x00ff, 0x8007, 0x7032, 0x0010, 0x7033, 0x3f00, 0x60c3,
++      0x0001, 0x0804, 0x8b24, 0x2009, 0x0003, 0x0019, 0x7033, 0x7f00,
++      0x0cb0, 0x0016, 0x080c, 0x9363, 0x001e, 0xb810, 0x9085, 0x0100,
++      0x7002, 0xb814, 0x7006, 0x2069, 0x1800, 0x6a74, 0x720a, 0x6a78,
++      0x720e, 0x7013, 0x0888, 0x918d, 0x0008, 0x7116, 0x080c, 0x8b12,
++      0x721a, 0x7a08, 0x7222, 0x2f10, 0x7226, 0x0005, 0x00b6, 0x0096,
++      0x00e6, 0x00d6, 0x00c6, 0x0056, 0x0046, 0x0036, 0x2061, 0x0100,
++      0x2071, 0x1800, 0x7158, 0x7810, 0x2058, 0xb8a0, 0x2028, 0xb910,
++      0xba14, 0x7374, 0x7478, 0x7820, 0x90be, 0x0006, 0x0904, 0x8a81,
++      0x90be, 0x000a, 0x1904, 0x8a3d, 0x609f, 0x0000, 0x7814, 0x2048,
++      0xa87c, 0xd0fc, 0x05c8, 0xaf90, 0x9784, 0xff00, 0x9105, 0x6062,
++      0x873f, 0x9784, 0xff00, 0x0006, 0x7814, 0x2048, 0xa878, 0x9005,
++      0x000e, 0x1160, 0xaf94, 0x87ff, 0x0510, 0x2039, 0x0098, 0x9705,
++      0x6072, 0x7808, 0x6082, 0x2f00, 0x6086, 0x0038, 0x9185, 0x2200,
++      0x6062, 0x6073, 0x0129, 0x6077, 0x0000, 0x609f, 0x0000, 0x2001,
++      0x1836, 0x2004, 0xd0ac, 0x11a8, 0xd09c, 0x0130, 0x7814, 0x2048,
++      0xa874, 0x9082, 0x0080, 0x1268, 0xb814, 0x609e, 0x0050, 0x2039,
++      0x0029, 0x9705, 0x6072, 0x0c48, 0x9185, 0x0200, 0x6062, 0x6073,
++      0x2029, 0xa87c, 0xd0fc, 0x0118, 0xaf94, 0x87ff, 0x1120, 0x2f00,
++      0x6082, 0x7808, 0x6086, 0x6266, 0x636a, 0x646e, 0x6077, 0x0000,
++      0xb88c, 0x8000, 0x9084, 0x00ff, 0xb88e, 0x8007, 0x607a, 0x607f,
++      0x0000, 0xa838, 0x608a, 0xa834, 0x608e, 0xa848, 0x60c6, 0xa844,
++      0x60ca, 0xb86c, 0x60ce, 0x60af, 0x95d5, 0x60d7, 0x0000, 0x080c,
++      0x9348, 0x2009, 0x07d0, 0x60c4, 0x9084, 0xfff0, 0x9005, 0x0110,
++      0x2009, 0x1b58, 0x080c, 0x7898, 0x003e, 0x004e, 0x005e, 0x00ce,
++      0x00de, 0x00ee, 0x009e, 0x00be, 0x0005, 0x7804, 0x9086, 0x0040,
++      0x0904, 0x8abd, 0x9185, 0x0100, 0x6062, 0x6266, 0x636a, 0x646e,
++      0x6073, 0x0809, 0x6077, 0x0008, 0x60af, 0x95d5, 0x60d7, 0x0000,
++      0xb88c, 0x8000, 0x9084, 0x00ff, 0xb88e, 0x8007, 0x607a, 0x607f,
++      0x0000, 0x2f00, 0x6082, 0x7808, 0x6086, 0x7814, 0x2048, 0xa838,
++      0x608a, 0xa834, 0x608e, 0xa848, 0x60c6, 0xa844, 0x60ca, 0xb86c,
++      0x60ce, 0xbab0, 0x629e, 0x080c, 0x9348, 0x2009, 0x07d0, 0x60c4,
++      0x9084, 0xfff0, 0x9005, 0x0110, 0x2009, 0x1b58, 0x080c, 0x7898,
++      0x003e, 0x004e, 0x005e, 0x00ce, 0x00de, 0x00ee, 0x009e, 0x00be,
++      0x0005, 0x7814, 0x2048, 0xa87c, 0x9084, 0x0003, 0x9086, 0x0002,
++      0x0904, 0x8ad9, 0x9185, 0x0100, 0x6062, 0x6266, 0x636a, 0x646e,
++      0x6073, 0x0880, 0x6077, 0x0008, 0xb88c, 0x8000, 0x9084, 0x00ff,
++      0xb88e, 0x8007, 0x607a, 0x7838, 0x607e, 0x2f00, 0x6086, 0x7808,
++      0x6082, 0xa890, 0x608a, 0xa88c, 0x608e, 0xa8b0, 0x60c6, 0xa8ac,
++      0x60ca, 0xa8ac, 0x7930, 0x9108, 0x7932, 0xa8b0, 0x792c, 0x9109,
++      0x792e, 0xb86c, 0x60ce, 0x60af, 0x95d5, 0x60d7, 0x0000, 0xbab0,
++      0x629e, 0x080c, 0x9325, 0x0804, 0x8a6d, 0xb8bc, 0xd084, 0x0148,
++      0xb88c, 0x7814, 0x2048, 0xb88c, 0x7846, 0xa836, 0x2900, 0xa83a,
++      0xb04a, 0x9185, 0x0600, 0x6062, 0x6266, 0x636a, 0x646e, 0x6073,
++      0x0829, 0x6077, 0x0000, 0x60af, 0x9575, 0x60d7, 0x0000, 0x0804,
++      0x8a50, 0x9185, 0x0700, 0x6062, 0x6266, 0x636a, 0x646e, 0x7824,
++      0xd0cc, 0x7826, 0x0118, 0x6073, 0x0889, 0x0010, 0x6073, 0x0898,
++      0x6077, 0x0000, 0xb88c, 0x8000, 0x9084, 0x00ff, 0xb88e, 0x8007,
++      0x607a, 0x607f, 0x0000, 0x2f00, 0x6086, 0x7808, 0x6082, 0xa838,
++      0x608a, 0xa834, 0x608e, 0xa848, 0x60c6, 0xa844, 0x60ca, 0xb86c,
++      0x60ce, 0x60af, 0x95d5, 0x60d7, 0x0000, 0xbab0, 0x629e, 0x7824,
++      0xd0cc, 0x0120, 0x080c, 0x9348, 0x0804, 0x8a6d, 0x080c, 0x9325,
++      0x0804, 0x8a6d, 0x7a10, 0x00b6, 0x2258, 0xba8c, 0x8210, 0x9294,
++      0x00ff, 0xba8e, 0x00be, 0x8217, 0x0005, 0x00d6, 0x2069, 0x19b4,
++      0x6843, 0x0001, 0x00de, 0x0005, 0x60a3, 0x0056, 0x60a7, 0x9575,
++      0x00f1, 0x080c, 0x788a, 0x0005, 0x0016, 0x2001, 0x180c, 0x200c,
++      0x9184, 0x0600, 0x9086, 0x0600, 0x0128, 0x0089, 0x080c, 0x788a,
++      0x001e, 0x0005, 0xc1e5, 0x2001, 0x180c, 0x2102, 0x2001, 0x19b5,
++      0x2003, 0x0000, 0x2001, 0x19bd, 0x2003, 0x0000, 0x0c88, 0x0006,
++      0x6014, 0x9084, 0x1804, 0x9085, 0x0009, 0x6016, 0x000e, 0x0005,
++      0x0016, 0x00c6, 0x0006, 0x2061, 0x0100, 0x61a4, 0x60a7, 0x95f5,
++      0x6014, 0x9084, 0x1804, 0x9085, 0x0008, 0x6016, 0x000e, 0xa001,
++      0xa001, 0xa001, 0x61a6, 0x00ce, 0x001e, 0x0005, 0x00c6, 0x00d6,
++      0x0016, 0x0026, 0x2061, 0x0100, 0x2069, 0x0140, 0x080c, 0x6877,
++      0x1198, 0x2001, 0x19d0, 0x2004, 0x9005, 0x15d0, 0x0066, 0x2031,
++      0x0001, 0x080c, 0x691e, 0x006e, 0x1118, 0x080c, 0x788a, 0x0480,
++      0x00c6, 0x2061, 0x19b4, 0x00f0, 0x6904, 0x9194, 0x4000, 0x0568,
++      0x0839, 0x2001, 0x1000, 0x080c, 0x28a5, 0x9006, 0x080c, 0x28a5,
++      0x00c6, 0x2061, 0x19b4, 0x6128, 0x9192, 0x00c8, 0x1258, 0x8108,
++      0x612a, 0x6124, 0x00ce, 0x81ff, 0x0198, 0x080c, 0x788a, 0x080c,
++      0x8b47, 0x0070, 0x6124, 0x91e5, 0x0000, 0x0140, 0x080c, 0xcd1f,
++      0x080c, 0x7893, 0x2009, 0x0014, 0x080c, 0x95ce, 0x00ce, 0x0000,
++      0x002e, 0x001e, 0x00de, 0x00ce, 0x0005, 0x2001, 0x19d0, 0x2004,
++      0x9005, 0x1db0, 0x00c6, 0x2061, 0x19b4, 0x6128, 0x9192, 0x0003,
++      0x1e08, 0x8108, 0x612a, 0x00ce, 0x080c, 0x788a, 0x080c, 0x55a0,
++      0x0c38, 0x0096, 0x00c6, 0x00d6, 0x00e6, 0x0016, 0x0026, 0x080c,
++      0x78a0, 0x2071, 0x19b4, 0x713c, 0x81ff, 0x0904, 0x8c3c, 0x2061,
++      0x0100, 0x2069, 0x0140, 0x080c, 0x6877, 0x11b0, 0x0036, 0x2019,
++      0x0002, 0x080c, 0x8dfe, 0x003e, 0x713c, 0x2160, 0x080c, 0xcd1f,
++      0x2009, 0x004a, 0x080c, 0x95ce, 0x0066, 0x2031, 0x0001, 0x080c,
++      0x691e, 0x006e, 0x0804, 0x8c3c, 0x6904, 0xd1f4, 0x0904, 0x8c43,
++      0x2001, 0x1000, 0x080c, 0x28a5, 0x9006, 0x080c, 0x28a5, 0x00c6,
++      0x703c, 0x9065, 0x090c, 0x0d84, 0x6020, 0x00ce, 0x9086, 0x0006,
++      0x1528, 0x61c8, 0x60c4, 0x9105, 0x1508, 0x2009, 0x180c, 0x2104,
++      0xd0d4, 0x01e0, 0x6214, 0x9294, 0x1800, 0x1128, 0x6224, 0x9294,
++      0x0002, 0x1510, 0x0030, 0xc0d4, 0x200a, 0xd0cc, 0x0110, 0x080c,
++      0x2809, 0x6014, 0x9084, 0xe7fd, 0x9085, 0x0010, 0x6016, 0x703c,
++      0x2060, 0x2009, 0x0049, 0x080c, 0x95ce, 0x0070, 0x0036, 0x2019,
++      0x0001, 0x080c, 0x8dfe, 0x003e, 0x713c, 0x2160, 0x080c, 0xcd1f,
++      0x2009, 0x004a, 0x080c, 0x95ce, 0x002e, 0x001e, 0x00ee, 0x00de,
++      0x00ce, 0x009e, 0x0005, 0xd1ec, 0x1904, 0x8bf8, 0x0804, 0x8bff,
++      0x0026, 0x00e6, 0x2071, 0x19b4, 0x7048, 0xd084, 0x01c0, 0x713c,
++      0x81ff, 0x01a8, 0x2071, 0x0100, 0x9188, 0x0008, 0x2114, 0x928e,
++      0x0006, 0x1138, 0x7014, 0x9084, 0x1984, 0x9085, 0x0012, 0x7016,
++      0x0030, 0x7014, 0x9084, 0x1984, 0x9085, 0x0016, 0x7016, 0x00ee,
++      0x002e, 0x0005, 0x00b6, 0x00e6, 0x00d6, 0x00c6, 0x0066, 0x0056,
++      0x0046, 0x0006, 0x0126, 0x2091, 0x8000, 0x6010, 0x2058, 0xbca0,
++      0x2071, 0x19b4, 0x7018, 0x2058, 0x8bff, 0x0190, 0xb8a0, 0x9406,
++      0x0118, 0xb854, 0x2058, 0x0cc0, 0x6014, 0x0096, 0x2048, 0xac6c,
++      0xad70, 0xae78, 0x009e, 0x080c, 0x5d3f, 0x0110, 0x9085, 0x0001,
++      0x012e, 0x000e, 0x004e, 0x005e, 0x006e, 0x00ce, 0x00de, 0x00ee,
++      0x00be, 0x0005, 0x080c, 0x8642, 0x7003, 0x1200, 0x7820, 0x9086,
++      0x0004, 0x1110, 0x6098, 0x0018, 0x2001, 0x1816, 0x2004, 0x700e,
++      0x7838, 0x7012, 0x783c, 0x7016, 0x60c3, 0x002c, 0x0804, 0x8b24,
++      0x080c, 0x8642, 0x7003, 0x0f00, 0x7808, 0x700e, 0x60c3, 0x0008,
++      0x0804, 0x8b24, 0x0156, 0x080c, 0x868d, 0x7003, 0x0200, 0x2011,
++      0x1848, 0x63f0, 0x2312, 0x20a9, 0x0006, 0x2011, 0x1840, 0x2019,
++      0x1841, 0x9ef0, 0x0002, 0x2376, 0x8e70, 0x2276, 0x8e70, 0x9398,
++      0x0002, 0x9290, 0x0002, 0x1f04, 0x8ccb, 0x60c3, 0x001c, 0x015e,
++      0x0804, 0x8b24, 0x0016, 0x0026, 0x080c, 0x8669, 0x080c, 0x867b,
++      0x9e80, 0x0004, 0x20e9, 0x0000, 0x20a0, 0x7814, 0x0096, 0x2048,
++      0xa800, 0x2048, 0xa860, 0x20e0, 0xa85c, 0x9080, 0x0021, 0x2098,
++      0x009e, 0x7808, 0x9088, 0x0002, 0x21a8, 0x9192, 0x0010, 0x1250,
++      0x4003, 0x9080, 0x0004, 0x8003, 0x60c2, 0x080c, 0x8b24, 0x002e,
++      0x001e, 0x0005, 0x20a9, 0x0010, 0x4003, 0x080c, 0x934e, 0x20a1,
++      0x0240, 0x22a8, 0x4003, 0x0c68, 0x080c, 0x8642, 0x7003, 0x6200,
++      0x7808, 0x700e, 0x60c3, 0x0008, 0x0804, 0x8b24, 0x0016, 0x0026,
++      0x080c, 0x8642, 0x20e9, 0x0000, 0x20a1, 0x024c, 0x7814, 0x0096,
++      0x2048, 0xa800, 0x2048, 0xa860, 0x20e0, 0xa85c, 0x9080, 0x0021,
++      0x2098, 0x009e, 0x7808, 0x9088, 0x0002, 0x21a8, 0x4003, 0x8003,
++      0x60c2, 0x080c, 0x8b24, 0x002e, 0x001e, 0x0005, 0x00e6, 0x00c6,
++      0x0006, 0x0126, 0x2091, 0x8000, 0x2071, 0x19b4, 0x700c, 0x2060,
++      0x8cff, 0x0178, 0x080c, 0xb295, 0x1110, 0x080c, 0x9e99, 0x600c,
++      0x0006, 0x080c, 0xb4de, 0x080c, 0x9554, 0x080c, 0x8eec, 0x00ce,
++      0x0c78, 0x2c00, 0x700e, 0x700a, 0x012e, 0x000e, 0x00ce, 0x00ee,
++      0x0005, 0x0126, 0x0156, 0x00f6, 0x00e6, 0x00d6, 0x00c6, 0x0026,
++      0x0016, 0x0006, 0x2091, 0x8000, 0x2001, 0x180c, 0x200c, 0x918c,
++      0xe7ff, 0x2102, 0x2069, 0x0100, 0x2079, 0x0140, 0x2071, 0x19b4,
++      0x7024, 0x2060, 0x8cff, 0x0904, 0x8db6, 0x080c, 0x8b50, 0x6ac0,
++      0x68c3, 0x0000, 0x080c, 0x7893, 0x00c6, 0x2061, 0x0100, 0x080c,
++      0x9367, 0x00ce, 0x2009, 0x0013, 0x080c, 0x95ce, 0x20a9, 0x01f4,
++      0x6824, 0xd094, 0x0170, 0x6827, 0x0004, 0x7804, 0x9084, 0x4000,
++      0x01d0, 0x2001, 0x1000, 0x080c, 0x28a5, 0x9006, 0x080c, 0x28a5,
++      0x0090, 0xd084, 0x0118, 0x6827, 0x0001, 0x0010, 0x1f04, 0x8d88,
++      0x7804, 0x9084, 0x1000, 0x0138, 0x2001, 0x0100, 0x080c, 0x28a5,
++      0x9006, 0x080c, 0x28a5, 0x6824, 0x000e, 0x001e, 0x002e, 0x00ce,
++      0x00de, 0x00ee, 0x00fe, 0x015e, 0x012e, 0x0005, 0x2001, 0x1800,
++      0x2004, 0x9096, 0x0001, 0x05c0, 0x9096, 0x0004, 0x05a8, 0x080c,
++      0x7893, 0x6814, 0x9084, 0x0001, 0x0110, 0x68a7, 0x95f5, 0x6817,
++      0x0008, 0x68c3, 0x0000, 0x2011, 0x554d, 0x080c, 0x781a, 0x20a9,
++      0x01f4, 0x6824, 0xd094, 0x0170, 0x6827, 0x0004, 0x7804, 0x9084,
++      0x4000, 0x01d0, 0x2001, 0x1000, 0x080c, 0x28a5, 0x9006, 0x080c,
++      0x28a5, 0x0090, 0xd084, 0x0118, 0x6827, 0x0001, 0x0010, 0x1f04,
++      0x8dd1, 0x7804, 0x9084, 0x1000, 0x0138, 0x2001, 0x0100, 0x080c,
++      0x28a5, 0x9006, 0x080c, 0x28a5, 0x000e, 0x001e, 0x002e, 0x00ce,
++      0x00de, 0x00ee, 0x00fe, 0x015e, 0x012e, 0x0005, 0x0126, 0x0156,
++      0x00f6, 0x00e6, 0x00d6, 0x00c6, 0x0026, 0x0016, 0x0006, 0x2091,
++      0x8000, 0x2001, 0x180c, 0x200c, 0x918c, 0xdbff, 0x2102, 0x2069,
++      0x0100, 0x2079, 0x0140, 0x2071, 0x19b4, 0x703c, 0x2060, 0x8cff,
++      0x0904, 0x8e8f, 0x9386, 0x0002, 0x1128, 0x6814, 0x9084, 0x0002,
++      0x0904, 0x8e8f, 0x68af, 0x95f5, 0x6817, 0x0010, 0x2009, 0x00fa,
++      0x8109, 0x1df0, 0x69c6, 0x68cb, 0x0008, 0x080c, 0x78a0, 0x080c,
++      0x1c4f, 0x0046, 0x2009, 0x017f, 0x200b, 0x00a5, 0x2021, 0x0169,
++      0x2404, 0x9084, 0x000f, 0x9086, 0x0004, 0x11f8, 0x68af, 0x95f5,
++      0x68c6, 0x68cb, 0x0008, 0x00e6, 0x00f6, 0x2079, 0x0090, 0x2071,
++      0x1a33, 0x6814, 0x9084, 0x1984, 0x9085, 0x0012, 0x6816, 0x782b,
++      0x0008, 0x7003, 0x0000, 0x00fe, 0x00ee, 0x9386, 0x0002, 0x1128,
++      0x7884, 0x9005, 0x1110, 0x7887, 0x0001, 0x2001, 0x194e, 0x2004,
++      0x200a, 0x004e, 0x939d, 0x0000, 0x1120, 0x2009, 0x0049, 0x080c,
++      0x95ce, 0x20a9, 0x03e8, 0x6824, 0xd094, 0x0170, 0x6827, 0x0004,
++      0x7804, 0x9084, 0x4000, 0x01d0, 0x2001, 0x1000, 0x080c, 0x28a5,
++      0x9006, 0x080c, 0x28a5, 0x0090, 0xd08c, 0x0118, 0x6827, 0x0002,
++      0x0010, 0x1f04, 0x8e6b, 0x7804, 0x9084, 0x1000, 0x0138, 0x2001,
++      0x0100, 0x080c, 0x28a5, 0x9006, 0x080c, 0x28a5, 0x6824, 0x000e,
++      0x001e, 0x002e, 0x00ce, 0x00de, 0x00ee, 0x00fe, 0x015e, 0x012e,
++      0x0005, 0x00d6, 0x0126, 0x2091, 0x8000, 0x2069, 0x19b4, 0x6a06,
++      0x012e, 0x00de, 0x0005, 0x00d6, 0x0126, 0x2091, 0x8000, 0x2069,
++      0x19b4, 0x6a32, 0x012e, 0x00de, 0x0005, 0x080c, 0x87dc, 0x7814,
++      0x080c, 0x4df2, 0x0108, 0x782c, 0x7032, 0x7042, 0x7047, 0x1000,
++      0x0478, 0x080c, 0x87dc, 0x7814, 0x080c, 0x4df2, 0x0108, 0x782c,
++      0x7032, 0x7042, 0x7047, 0x4000, 0x0418, 0x080c, 0x87dc, 0x7814,
++      0x080c, 0x4df2, 0x0108, 0x782c, 0x7032, 0x7042, 0x7047, 0x2000,
++      0x00b8, 0x080c, 0x87dc, 0x7814, 0x080c, 0x4df2, 0x0108, 0x782c,
++      0x7032, 0x7042, 0x7047, 0x0400, 0x0058, 0x080c, 0x87dc, 0x7814,
++      0x080c, 0x4df2, 0x0108, 0x782c, 0x7032, 0x7042, 0x7047, 0x0200,
++      0x60c3, 0x0020, 0x0804, 0x8b24, 0x00e6, 0x2071, 0x19b4, 0x7020,
++      0x9005, 0x0110, 0x8001, 0x7022, 0x00ee, 0x0005, 0x00f6, 0x00e6,
++      0x00d6, 0x00c6, 0x0076, 0x0066, 0x0006, 0x0126, 0x2091, 0x8000,
++      0x2071, 0x19b4, 0x7614, 0x2660, 0x2678, 0x2039, 0x0001, 0x87ff,
++      0x0904, 0x8f8a, 0x8cff, 0x0904, 0x8f8a, 0x6020, 0x9086, 0x0006,
++      0x1904, 0x8f85, 0x88ff, 0x0138, 0x2800, 0x9c06, 0x1904, 0x8f85,
++      0x2039, 0x0000, 0x0050, 0x6010, 0x9b06, 0x1904, 0x8f85, 0x85ff,
++      0x0120, 0x6054, 0x9106, 0x1904, 0x8f85, 0x7024, 0x9c06, 0x1578,
++      0x2069, 0x0100, 0x68c0, 0x9005, 0x0530, 0x080c, 0x7893, 0x6820,
++      0xd0b4, 0x0110, 0x68a7, 0x95f5, 0x6817, 0x0008, 0x68c3, 0x0000,
++      0x080c, 0x900f, 0x7027, 0x0000, 0x0036, 0x2069, 0x0140, 0x6b04,
++      0x9384, 0x1000, 0x0138, 0x2001, 0x0100, 0x080c, 0x28a5, 0x9006,
++      0x080c, 0x28a5, 0x2069, 0x0100, 0x6824, 0xd084, 0x0110, 0x6827,
++      0x0001, 0x003e, 0x0020, 0x6003, 0x0009, 0x630a, 0x0470, 0x7014,
++      0x9c36, 0x1110, 0x660c, 0x7616, 0x7010, 0x9c36, 0x1140, 0x2c00,
++      0x9f36, 0x0118, 0x2f00, 0x7012, 0x0010, 0x7013, 0x0000, 0x660c,
++      0x0066, 0x2c00, 0x9f06, 0x0110, 0x7e0e, 0x0008, 0x2678, 0x89ff,
++      0x1168, 0x600f, 0x0000, 0x6014, 0x0096, 0x2048, 0x080c, 0xb0ab,
++      0x0110, 0x080c, 0xc970, 0x009e, 0x080c, 0x9584, 0x080c, 0x8eec,
++      0x88ff, 0x1190, 0x00ce, 0x0804, 0x8f07, 0x2c78, 0x600c, 0x2060,
++      0x0804, 0x8f07, 0x9006, 0x012e, 0x000e, 0x006e, 0x007e, 0x00ce,
++      0x00de, 0x00ee, 0x00fe, 0x0005, 0x601b, 0x0000, 0x00ce, 0x98c5,
++      0x0001, 0x0c88, 0x00f6, 0x00e6, 0x00d6, 0x0096, 0x00c6, 0x0066,
++      0x0026, 0x0006, 0x0126, 0x2091, 0x8000, 0x2071, 0x19b4, 0x7638,
++      0x2660, 0x2678, 0x8cff, 0x0904, 0x8ffe, 0x6020, 0x9086, 0x0006,
++      0x1904, 0x8ff9, 0x87ff, 0x0128, 0x2700, 0x9c06, 0x1904, 0x8ff9,
++      0x0040, 0x6010, 0x9b06, 0x15e8, 0x85ff, 0x0118, 0x6054, 0x9106,
++      0x15c0, 0x703c, 0x9c06, 0x1168, 0x0036, 0x2019, 0x0001, 0x080c,
++      0x8dfe, 0x7033, 0x0000, 0x9006, 0x703e, 0x7042, 0x7046, 0x704a,
++      0x003e, 0x7038, 0x9c36, 0x1110, 0x660c, 0x763a, 0x7034, 0x9c36,
++      0x1140, 0x2c00, 0x9f36, 0x0118, 0x2f00, 0x7036, 0x0010, 0x7037,
++      0x0000, 0x660c, 0x0066, 0x2c00, 0x9f06, 0x0110, 0x7e0e, 0x0008,
++      0x2678, 0x600f, 0x0000, 0x6014, 0x2048, 0x080c, 0xb0ab, 0x0110,
++      0x080c, 0xc970, 0x080c, 0x9584, 0x87ff, 0x1198, 0x00ce, 0x0804,
++      0x8faa, 0x2c78, 0x600c, 0x2060, 0x0804, 0x8faa, 0x9006, 0x012e,
++      0x000e, 0x002e, 0x006e, 0x00ce, 0x009e, 0x00de, 0x00ee, 0x00fe,
++      0x0005, 0x601b, 0x0000, 0x00ce, 0x97bd, 0x0001, 0x0c80, 0x00e6,
++      0x2071, 0x19b4, 0x2001, 0x1800, 0x2004, 0x9086, 0x0002, 0x1118,
++      0x7007, 0x0005, 0x0010, 0x7007, 0x0000, 0x00ee, 0x0005, 0x00f6,
++      0x00e6, 0x00c6, 0x0066, 0x0026, 0x0006, 0x0126, 0x2091, 0x8000,
++      0x2071, 0x19b4, 0x2c10, 0x7638, 0x2660, 0x2678, 0x8cff, 0x0518,
++      0x2200, 0x9c06, 0x11e0, 0x7038, 0x9c36, 0x1110, 0x660c, 0x763a,
++      0x7034, 0x9c36, 0x1140, 0x2c00, 0x9f36, 0x0118, 0x2f00, 0x7036,
++      0x0010, 0x7037, 0x0000, 0x660c, 0x2c00, 0x9f06, 0x0110, 0x7e0e,
++      0x0008, 0x2678, 0x600f, 0x0000, 0x9085, 0x0001, 0x0020, 0x2c78,
++      0x600c, 0x2060, 0x08d8, 0x012e, 0x000e, 0x002e, 0x006e, 0x00ce,
++      0x00ee, 0x00fe, 0x0005, 0x0096, 0x00f6, 0x00e6, 0x00d6, 0x00c6,
++      0x0066, 0x0026, 0x0006, 0x0126, 0x2091, 0x8000, 0x2071, 0x19b4,
++      0x760c, 0x2660, 0x2678, 0x8cff, 0x0904, 0x90eb, 0x6010, 0x00b6,
++      0x2058, 0xb8a0, 0x00be, 0x9206, 0x1904, 0x90e6, 0x7024, 0x9c06,
++      0x1520, 0x2069, 0x0100, 0x68c0, 0x9005, 0x0904, 0x90c2, 0x080c,
++      0x8b50, 0x68c3, 0x0000, 0x080c, 0x900f, 0x7027, 0x0000, 0x0036,
++      0x2069, 0x0140, 0x6b04, 0x9384, 0x1000, 0x0138, 0x2001, 0x0100,
++      0x080c, 0x28a5, 0x9006, 0x080c, 0x28a5, 0x2069, 0x0100, 0x6824,
++      0xd084, 0x0110, 0x6827, 0x0001, 0x003e, 0x700c, 0x9c36, 0x1110,
++      0x660c, 0x760e, 0x7008, 0x9c36, 0x1140, 0x2c00, 0x9f36, 0x0118,
++      0x2f00, 0x700a, 0x0010, 0x700b, 0x0000, 0x660c, 0x0066, 0x2c00,
++      0x9f06, 0x0110, 0x7e0e, 0x0008, 0x2678, 0x600f, 0x0000, 0x080c,
++      0xb284, 0x1158, 0x080c, 0x2d3f, 0x080c, 0xb295, 0x11f0, 0x080c,
++      0x9e99, 0x00d8, 0x080c, 0x900f, 0x08c0, 0x080c, 0xb295, 0x1118,
++      0x080c, 0x9e99, 0x0090, 0x6014, 0x2048, 0x080c, 0xb0ab, 0x0168,
++      0x6020, 0x9086, 0x0003, 0x1508, 0xa867, 0x0103, 0xab7a, 0xa877,
++      0x0000, 0x080c, 0x61a9, 0x080c, 0xb278, 0x080c, 0xb4de, 0x080c,
++      0x9584, 0x080c, 0x8eec, 0x00ce, 0x0804, 0x906b, 0x2c78, 0x600c,
++      0x2060, 0x0804, 0x906b, 0x012e, 0x000e, 0x002e, 0x006e, 0x00ce,
++      0x00de, 0x00ee, 0x00fe, 0x009e, 0x0005, 0x6020, 0x9086, 0x0006,
++      0x1d20, 0x080c, 0xc970, 0x0c08, 0x00d6, 0x080c, 0x868d, 0x7003,
++      0x0200, 0x7007, 0x0014, 0x60c3, 0x0014, 0x20e1, 0x0001, 0x2099,
++      0x1956, 0x20e9, 0x0000, 0x20a1, 0x0250, 0x20a9, 0x0004, 0x4003,
++      0x7023, 0x0004, 0x7027, 0x7878, 0x080c, 0x8b24, 0x00de, 0x0005,
++      0x080c, 0x868d, 0x7003, 0x0214, 0x7007, 0x0018, 0x700b, 0x0800,
++      0x7814, 0x9084, 0xff00, 0x700e, 0x7814, 0x9084, 0x00ff, 0x7022,
++      0x782c, 0x7026, 0x60c3, 0x0018, 0x0804, 0x8b24, 0x00b6, 0x00d6,
++      0x0016, 0x00d6, 0x2f68, 0x2009, 0x0035, 0x080c, 0xb6d9, 0x00de,
++      0x1904, 0x9192, 0x080c, 0x8642, 0x7003, 0x1300, 0x782c, 0x080c,
++      0x9294, 0x2068, 0x6820, 0x9086, 0x0003, 0x0558, 0x7810, 0x2058,
++      0xbaa0, 0x080c, 0x94d3, 0x11d0, 0x9286, 0x007e, 0x1128, 0x700b,
++      0x00ff, 0x700f, 0xfffe, 0x0490, 0x9286, 0x007f, 0x1128, 0x700b,
++      0x00ff, 0x700f, 0xfffd, 0x0450, 0xd2bc, 0x0180, 0x9286, 0x0080,
++      0x1128, 0x700b, 0x00ff, 0x700f, 0xfffc, 0x0400, 0x92d8, 0x1000,
++      0x2b5c, 0xb810, 0x700a, 0xb814, 0x700e, 0x00c0, 0x6098, 0x700e,
++      0x00a8, 0x080c, 0x94d3, 0x1130, 0x7810, 0x2058, 0xb8a0, 0x9082,
++      0x007e, 0x0250, 0x00d6, 0x2069, 0x181d, 0x2d04, 0x700a, 0x8d68,
++      0x2d04, 0x700e, 0x00de, 0x0010, 0x6034, 0x700e, 0x7838, 0x7012,
++      0x783c, 0x7016, 0x60c3, 0x000c, 0x001e, 0x00de, 0x080c, 0x8b24,
++      0x00be, 0x0005, 0x781b, 0x0001, 0x7803, 0x0006, 0x001e, 0x00de,
++      0x00be, 0x0005, 0x792c, 0x9180, 0x0008, 0x200c, 0x9186, 0x0006,
++      0x01c0, 0x9186, 0x0003, 0x0904, 0x920c, 0x9186, 0x0005, 0x0904,
++      0x91f5, 0x9186, 0x0004, 0x05d8, 0x9186, 0x0008, 0x0904, 0x91fd,
++      0x7807, 0x0037, 0x782f, 0x0003, 0x7817, 0x1700, 0x080c, 0x9271,
++      0x0005, 0x080c, 0x9232, 0x00d6, 0x0026, 0x792c, 0x2168, 0x2009,
++      0x4000, 0x6800, 0x0002, 0x91d6, 0x91e1, 0x91d8, 0x91e1, 0x91dd,
++      0x91d6, 0x91d6, 0x91e1, 0x91e1, 0x91e1, 0x91e1, 0x91d6, 0x91d6,
++      0x91d6, 0x91d6, 0x91d6, 0x91e1, 0x91d6, 0x91e1, 0x080c, 0x0d84,
++      0x6824, 0xd0e4, 0x0110, 0xd0cc, 0x0110, 0x900e, 0x0010, 0x2009,
++      0x2000, 0x682c, 0x7022, 0x6830, 0x7026, 0x0804, 0x922b, 0x080c,
++      0x9232, 0x00d6, 0x0026, 0x792c, 0x2168, 0x2009, 0x4000, 0x6a00,
++      0x9286, 0x0002, 0x1108, 0x900e, 0x04b0, 0x04e1, 0x00d6, 0x0026,
++      0x792c, 0x2168, 0x2009, 0x4000, 0x0470, 0x04a1, 0x00d6, 0x0026,
++      0x792c, 0x2168, 0x2009, 0x4000, 0x9286, 0x0005, 0x0118, 0x9286,
++      0x0002, 0x1108, 0x900e, 0x00f8, 0x0429, 0x00d6, 0x0026, 0x792c,
++      0x2168, 0x6814, 0x0096, 0x2048, 0xa9ac, 0xa834, 0x9112, 0xa9b0,
++      0xa838, 0x009e, 0x9103, 0x7022, 0x7226, 0x792c, 0x9180, 0x0000,
++      0x2004, 0x908e, 0x0002, 0x0130, 0x908e, 0x0004, 0x0118, 0x2009,
++      0x4000, 0x0008, 0x900e, 0x712a, 0x60c3, 0x0018, 0x002e, 0x00de,
++      0x0804, 0x8b24, 0x00b6, 0x0036, 0x0046, 0x0056, 0x0066, 0x080c,
++      0x868d, 0x9006, 0x7003, 0x0200, 0x7938, 0x710a, 0x793c, 0x710e,
++      0x7810, 0x2058, 0xb8a0, 0x080c, 0x94d3, 0x1118, 0x9092, 0x007e,
++      0x0268, 0x00d6, 0x2069, 0x181d, 0x2d2c, 0x8d68, 0x2d34, 0x90d8,
++      0x1000, 0x2b5c, 0xbb10, 0xbc14, 0x00de, 0x0028, 0x901e, 0x6498,
++      0x2029, 0x0000, 0x6634, 0x782c, 0x9080, 0x0008, 0x2004, 0x9086,
++      0x0003, 0x1128, 0x7512, 0x7616, 0x731a, 0x741e, 0x0020, 0x7312,
++      0x7416, 0x751a, 0x761e, 0x006e, 0x005e, 0x004e, 0x003e, 0x00be,
++      0x0005, 0x080c, 0x868d, 0x7003, 0x0100, 0x782c, 0x700a, 0x7814,
++      0x700e, 0x700e, 0x60c3, 0x0008, 0x0804, 0x8b24, 0x080c, 0x8639,
++      0x7003, 0x1400, 0x7838, 0x700a, 0x0079, 0x783c, 0x700e, 0x782c,
++      0x7012, 0x7830, 0x7016, 0x7834, 0x9084, 0x00ff, 0x8007, 0x701a,
++      0x60c3, 0x0010, 0x0804, 0x8b24, 0x00e6, 0x2071, 0x0240, 0x0006,
++      0x00f6, 0x2078, 0x7810, 0x00b6, 0x2058, 0xb8bc, 0xd084, 0x0120,
++      0x7848, 0x702a, 0x7844, 0x702e, 0x00be, 0x00fe, 0x000e, 0x00ee,
++      0x0005, 0x080c, 0x8684, 0x7003, 0x0100, 0x782c, 0x700a, 0x7814,
++      0x700e, 0x60c3, 0x0008, 0x0804, 0x8b24, 0x0021, 0x60c3, 0x0000,
++      0x0804, 0x8b24, 0x00d6, 0x080c, 0x9363, 0xb810, 0x9085, 0x0300,
++      0x7002, 0xb814, 0x7006, 0x2069, 0x1800, 0x6874, 0x700a, 0x6878,
++      0x700e, 0x7013, 0x0819, 0x080c, 0x8b12, 0x721a, 0x2f10, 0x7222,
++      0x7a08, 0x7226, 0x2071, 0x024c, 0x00de, 0x0005, 0x0059, 0x7914,
++      0x712a, 0x60c3, 0x0000, 0x60a7, 0x9575, 0x080c, 0x8b47, 0x080c,
++      0x788a, 0x0005, 0x0036, 0x0096, 0x00d6, 0x00e6, 0x7858, 0x2048,
++      0xaa7c, 0x9296, 0x00c0, 0x9294, 0xfffd, 0xaa7e, 0xaa80, 0x9294,
++      0x0300, 0xaa82, 0xa96c, 0x9194, 0x00ff, 0xab74, 0x9384, 0x00ff,
++      0x908d, 0xc200, 0xa96e, 0x9384, 0xff00, 0x9215, 0xaa76, 0xa870,
++      0xaa78, 0xa87a, 0xaa72, 0x00d6, 0x2069, 0x0200, 0x080c, 0x9363,
++      0x00de, 0x20e9, 0x0000, 0x20a1, 0x0240, 0x20a9, 0x000a, 0xa860,
++      0x20e0, 0xa85c, 0x9080, 0x001b, 0x2098, 0x4003, 0x60a3, 0x0035,
++      0xaa68, 0x9294, 0x7000, 0x9286, 0x3000, 0x0110, 0x60a3, 0x0037,
++      0x00ee, 0x00de, 0x009e, 0x003e, 0x0005, 0x900e, 0x7814, 0x0096,
++      0x2048, 0xa87c, 0xd0fc, 0x01c0, 0x9084, 0x0003, 0x11a8, 0x2001,
++      0x180c, 0x2004, 0xd0bc, 0x0180, 0x7824, 0xd0cc, 0x1168, 0xd0c4,
++      0x1158, 0xa8a8, 0x9005, 0x1140, 0x2001, 0x180c, 0x200c, 0xc1d5,
++      0x2102, 0x2009, 0x197f, 0x210c, 0x009e, 0x918d, 0x0092, 0x0010,
++      0x2009, 0x0096, 0x60ab, 0x0036, 0x6116, 0x0005, 0x2009, 0x0009,
++      0x00a0, 0x2009, 0x000a, 0x0088, 0x2009, 0x000b, 0x0070, 0x2009,
++      0x000c, 0x0058, 0x2009, 0x000d, 0x0040, 0x2009, 0x000e, 0x0028,
++      0x2009, 0x000f, 0x0010, 0x2009, 0x0008, 0x6912, 0x0005, 0x00d6,
++      0x9290, 0x0018, 0x8214, 0x20e9, 0x0000, 0x2069, 0x0200, 0x6813,
++      0x0000, 0x22a8, 0x9284, 0x00e0, 0x0128, 0x20a9, 0x0020, 0x9292,
++      0x0020, 0x0008, 0x9016, 0x20a1, 0x0240, 0x9006, 0x4004, 0x82ff,
++      0x0120, 0x6810, 0x8000, 0x6812, 0x0c60, 0x00de, 0x0005, 0x00d6,
++      0x0096, 0x6014, 0x2048, 0x9006, 0xa836, 0xa83a, 0xa99c, 0xa946,
++      0xa84a, 0x6023, 0x0003, 0x6007, 0x0040, 0x6003, 0x0003, 0x600b,
++      0xffff, 0xa817, 0x0001, 0xa842, 0xa83e, 0x2900, 0xa85a, 0xa813,
++      0x1cdb, 0x080c, 0x7c3a, 0x0126, 0x2091, 0x8000, 0x080c, 0x820b,
++      0x012e, 0x009e, 0x00de, 0x0005, 0x00f6, 0x00e6, 0x00d6, 0x00c6,
++      0x00a6, 0x0096, 0x0066, 0x0126, 0x2091, 0x8000, 0x2071, 0x19b4,
++      0x760c, 0x2660, 0x2678, 0x8cff, 0x0904, 0x9433, 0x7024, 0x9c06,
++      0x1520, 0x2069, 0x0100, 0x68c0, 0x9005, 0x0904, 0x940a, 0x080c,
++      0x8b50, 0x68c3, 0x0000, 0x080c, 0x900f, 0x7027, 0x0000, 0x0036,
++      0x2069, 0x0140, 0x6b04, 0x9384, 0x1000, 0x0138, 0x2001, 0x0100,
++      0x080c, 0x28a5, 0x9006, 0x080c, 0x28a5, 0x2069, 0x0100, 0x6824,
++      0xd084, 0x0110, 0x6827, 0x0001, 0x003e, 0x700c, 0x9c36, 0x1110,
++      0x660c, 0x760e, 0x7008, 0x9c36, 0x1140, 0x2c00, 0x9f36, 0x0118,
++      0x2f00, 0x700a, 0x0010, 0x700b, 0x0000, 0x660c, 0x0066, 0x2c00,
++      0x9f06, 0x0110, 0x7e0e, 0x0008, 0x2678, 0x600f, 0x0000, 0x080c,
++      0xb284, 0x1158, 0x080c, 0x2d3f, 0x080c, 0xb295, 0x11f0, 0x080c,
++      0x9e99, 0x00d8, 0x080c, 0x900f, 0x08c0, 0x080c, 0xb295, 0x1118,
++      0x080c, 0x9e99, 0x0090, 0x6014, 0x2048, 0x080c, 0xb0ab, 0x0168,
++      0x6020, 0x9086, 0x0003, 0x1520, 0xa867, 0x0103, 0xab7a, 0xa877,
++      0x0000, 0x080c, 0x61a9, 0x080c, 0xb278, 0x080c, 0xb4de, 0x080c,
++      0x9584, 0x080c, 0x8eec, 0x00ce, 0x0804, 0x93bb, 0x2c78, 0x600c,
++      0x2060, 0x0804, 0x93bb, 0x700f, 0x0000, 0x700b, 0x0000, 0x012e,
++      0x006e, 0x009e, 0x00ae, 0x00ce, 0x00de, 0x00ee, 0x00fe, 0x0005,
++      0x6020, 0x9086, 0x0006, 0x1d08, 0x080c, 0xc970, 0x08f0, 0x00d6,
++      0x0156, 0x080c, 0x868d, 0x7a14, 0x82ff, 0x0138, 0x7003, 0x0100,
++      0x700b, 0x0003, 0x60c3, 0x0008, 0x0490, 0x7003, 0x0200, 0x7007,
++      0x0000, 0x2069, 0x1800, 0x901e, 0x6800, 0x9086, 0x0004, 0x1110,
++      0xc38d, 0x0060, 0x080c, 0x6877, 0x1110, 0xc3ad, 0x0008, 0xc3a5,
++      0x6ad8, 0xd29c, 0x1110, 0xd2ac, 0x0108, 0xc39d, 0x730e, 0x2011,
++      0x1848, 0x63f0, 0x2312, 0x20a9, 0x0006, 0x2011, 0x1840, 0x2019,
++      0x1841, 0x2071, 0x0250, 0x2376, 0x8e70, 0x2276, 0x8e70, 0x9398,
++      0x0002, 0x9290, 0x0002, 0x1f04, 0x947b, 0x60c3, 0x0040, 0x080c,
++      0x8b24, 0x015e, 0x00de, 0x0005, 0x0156, 0x080c, 0x868d, 0x7a14,
++      0x82ff, 0x0168, 0x9286, 0xffff, 0x0118, 0x9282, 0x000e, 0x1238,
++      0x7003, 0x0100, 0x700b, 0x0003, 0x60c3, 0x0008, 0x0488, 0x7003,
++      0x0200, 0x7007, 0x001c, 0x700f, 0x0001, 0x2011, 0x198a, 0x2204,
++      0x8007, 0x701a, 0x8210, 0x2204, 0x8007, 0x701e, 0x0421, 0x1120,
++      0xb8a0, 0x9082, 0x007f, 0x0248, 0x2001, 0x181d, 0x2004, 0x7022,
++      0x2001, 0x181e, 0x2004, 0x7026, 0x0030, 0x2001, 0x1816, 0x2004,
++      0x9084, 0x00ff, 0x7026, 0x20a9, 0x0004, 0x20e1, 0x0001, 0x2099,
++      0x1805, 0x20e9, 0x0000, 0x20a1, 0x0256, 0x4003, 0x60c3, 0x001c,
++      0x015e, 0x0804, 0x8b24, 0x0006, 0x2001, 0x1836, 0x2004, 0xd0ac,
++      0x000e, 0x0005, 0x2011, 0x0003, 0x080c, 0x8e99, 0x2011, 0x0002,
++      0x080c, 0x8ea3, 0x080c, 0x8d59, 0x0036, 0x901e, 0x080c, 0x8dfe,
++      0x003e, 0x0005, 0x2071, 0x1882, 0x7000, 0x9005, 0x0140, 0x2001,
++      0x0976, 0x2071, 0x1800, 0x706e, 0x7072, 0x7063, 0xffe0, 0x2071,
++      0x1800, 0x706c, 0x704e, 0x7053, 0x1cd0, 0x0005, 0x00e6, 0x0126,
++      0x2071, 0x1800, 0x2091, 0x8000, 0x754c, 0x9582, 0x0010, 0x0608,
++      0x7050, 0x2060, 0x6000, 0x9086, 0x0000, 0x0148, 0x9ce0, 0x0018,
++      0x7060, 0x9c02, 0x1208, 0x0cb0, 0x2061, 0x1cd0, 0x0c98, 0x6003,
++      0x0008, 0x8529, 0x754e, 0x9ca8, 0x0018, 0x7060, 0x9502, 0x1230,
++      0x7552, 0x9085, 0x0001, 0x012e, 0x00ee, 0x0005, 0x7053, 0x1cd0,
++      0x0cc0, 0x9006, 0x0cc0, 0x00e6, 0x2071, 0x1800, 0x754c, 0x9582,
++      0x0010, 0x0600, 0x7050, 0x2060, 0x6000, 0x9086, 0x0000, 0x0148,
++      0x9ce0, 0x0018, 0x7060, 0x9c02, 0x1208, 0x0cb0, 0x2061, 0x1cd0,
++      0x0c98, 0x6003, 0x0008, 0x8529, 0x754e, 0x9ca8, 0x0018, 0x7060,
++      0x9502, 0x1228, 0x7552, 0x9085, 0x0001, 0x00ee, 0x0005, 0x7053,
++      0x1cd0, 0x0cc8, 0x9006, 0x0cc8, 0x9c82, 0x1cd0, 0x0a0c, 0x0d84,
++      0x2001, 0x1818, 0x2004, 0x9c02, 0x1a0c, 0x0d84, 0x9006, 0x6006,
++      0x600a, 0x600e, 0x6016, 0x601a, 0x6012, 0x6023, 0x0000, 0x6003,
++      0x0000, 0x601e, 0x6056, 0x605a, 0x6026, 0x602a, 0x602e, 0x6032,
++      0x6036, 0x603a, 0x603e, 0x6042, 0x2061, 0x1800, 0x604c, 0x8000,
++      0x604e, 0x9086, 0x0001, 0x0108, 0x0005, 0x0126, 0x2091, 0x8000,
++      0x080c, 0x8125, 0x012e, 0x0cc0, 0x0006, 0x6000, 0x9086, 0x0000,
++      0x01b0, 0x601c, 0xd084, 0x190c, 0x17b0, 0x6017, 0x0000, 0x6023,
++      0x0007, 0x2001, 0x1953, 0x2004, 0x0006, 0x9082, 0x0051, 0x000e,
++      0x0208, 0x8004, 0x601a, 0x080c, 0xcc1f, 0x6043, 0x0000, 0x000e,
++      0x0005, 0x00e6, 0x0126, 0x2071, 0x1800, 0x2091, 0x8000, 0x754c,
++      0x9582, 0x0001, 0x0608, 0x7050, 0x2060, 0x6000, 0x9086, 0x0000,
++      0x0148, 0x9ce0, 0x0018, 0x7060, 0x9c02, 0x1208, 0x0cb0, 0x2061,
++      0x1cd0, 0x0c98, 0x6003, 0x0008, 0x8529, 0x754e, 0x9ca8, 0x0018,
++      0x7060, 0x9502, 0x1230, 0x7552, 0x9085, 0x0001, 0x012e, 0x00ee,
++      0x0005, 0x7053, 0x1cd0, 0x0cc0, 0x9006, 0x0cc0, 0x6020, 0x9084,
++      0x000f, 0x0002, 0x95e1, 0x95ea, 0x9605, 0x9620, 0xb77d, 0xb79a,
++      0xb7b5, 0x95e1, 0x95ea, 0x95e1, 0x963c, 0x95e1, 0x95e1, 0x95e1,
++      0x95e1, 0x9186, 0x0013, 0x1128, 0x080c, 0x8026, 0x080c, 0x8125,
++      0x0005, 0x0005, 0x0066, 0x6000, 0x90b2, 0x0016, 0x1a0c, 0x0d84,
++      0x0013, 0x006e, 0x0005, 0x9603, 0x9d1f, 0x9ee0, 0x9603, 0x9f6e,
++      0x98e8, 0x9603, 0x9603, 0x9ca1, 0xa463, 0x9603, 0x9603, 0x9603,
++      0x9603, 0x9603, 0x9603, 0x080c, 0x0d84, 0x0066, 0x6000, 0x90b2,
++      0x0016, 0x1a0c, 0x0d84, 0x0013, 0x006e, 0x0005, 0x961e, 0xaaef,
++      0x961e, 0x961e, 0x961e, 0x961e, 0x961e, 0x961e, 0xaa94, 0xac61,
++      0x961e, 0xab21, 0xaba0, 0xab21, 0xaba0, 0x961e, 0x080c, 0x0d84,
++      0x6000, 0x9082, 0x0016, 0x1a0c, 0x0d84, 0x6000, 0x0002, 0x963a,
++      0xa4a5, 0xa574, 0xa69f, 0xa838, 0x963a, 0x963a, 0x963a, 0xa47e,
++      0xaa2b, 0xaa2e, 0x963a, 0x963a, 0x963a, 0x963a, 0xaa57, 0x963a,
++      0x963a, 0x963a, 0x080c, 0x0d84, 0x0066, 0x6000, 0x90b2, 0x0016,
++      0x1a0c, 0x0d84, 0x0013, 0x006e, 0x0005, 0x9655, 0x9655, 0x9694,
++      0x972f, 0x979c, 0x9655, 0x9655, 0x9655, 0x9657, 0x9655, 0x9655,
++      0x9655, 0x9655, 0x9655, 0x9655, 0x9655, 0x080c, 0x0d84, 0x9186,
++      0x004c, 0x0588, 0x9186, 0x0003, 0x190c, 0x0d84, 0x0096, 0x601c,
++      0xc0ed, 0x601e, 0x6003, 0x0003, 0x6106, 0x6014, 0x2048, 0xa87c,
++      0x9084, 0x8000, 0xc0b5, 0xa87e, 0xa8ac, 0xa846, 0xa8b0, 0xa84a,
++      0x9006, 0xa836, 0xa83a, 0xa884, 0x9092, 0x199a, 0x0210, 0x2001,
++      0x1999, 0x8003, 0x8013, 0x8213, 0x9210, 0x621a, 0x009e, 0x2c10,
++      0x080c, 0x18b7, 0x080c, 0x7c3a, 0x0126, 0x2091, 0x8000, 0x080c,
++      0x820b, 0x012e, 0x0005, 0x6010, 0x00b6, 0x2058, 0xbca0, 0x00be,
++      0x2c00, 0x080c, 0x97be, 0x0005, 0x00d6, 0x0096, 0x00f6, 0x2079,
++      0x1800, 0x7a88, 0x9290, 0x0018, 0x6014, 0x2048, 0xac78, 0x0046,
++      0xa8e0, 0x9005, 0x1140, 0xa8dc, 0x921a, 0x0140, 0x0220, 0xa87b,
++      0x0007, 0x2010, 0x0028, 0xa87b, 0x0015, 0x0010, 0xa87b, 0x0000,
++      0x8214, 0xa883, 0x0000, 0xaa02, 0x0006, 0x0016, 0x0026, 0x00c6,
++      0x00d6, 0x00e6, 0x00f6, 0x2400, 0x9005, 0x1108, 0x009a, 0x2100,
++      0x9086, 0x0015, 0x1118, 0x2001, 0x0001, 0x0038, 0x2100, 0x9086,
++      0x0016, 0x0118, 0x2001, 0x0001, 0x002a, 0x94a4, 0x0007, 0x8423,
++      0x9405, 0x0002, 0x96f7, 0x96f7, 0x96f2, 0x96f5, 0x96f7, 0x96ef,
++      0x96e2, 0x96e2, 0x96e2, 0x96e2, 0x96e2, 0x96e2, 0x96e2, 0x96e2,
++      0x96e2, 0x96e2, 0x00fe, 0x00ee, 0x00de, 0x00ce, 0x002e, 0x001e,
++      0x000e, 0x004e, 0x00fe, 0x009e, 0x00de, 0x080c, 0x0d84, 0x080c,
++      0xa0f1, 0x0028, 0x080c, 0xa1cf, 0x0010, 0x080c, 0xa2bc, 0x00fe,
++      0x00ee, 0x00de, 0x00ce, 0x002e, 0x001e, 0x2c00, 0xa896, 0x000e,
++      0x080c, 0x987c, 0x0530, 0xa804, 0xa80e, 0x00a6, 0x2050, 0xb100,
++      0x00ae, 0x8006, 0x8006, 0x8007, 0x97bc, 0x003f, 0x9084, 0xffc0,
++      0x9080, 0x0002, 0xaacc, 0xabd0, 0xacd4, 0xadd8, 0x2031, 0x0000,
++      0x2041, 0x11fd, 0x080c, 0x9a1f, 0x0160, 0x000e, 0x9005, 0x0120,
++      0x00fe, 0x009e, 0x00de, 0x0005, 0x00fe, 0x009e, 0x00de, 0x0804,
++      0x9554, 0x2001, 0x002c, 0x900e, 0x080c, 0x98db, 0x0c70, 0x9182,
++      0x0047, 0x0002, 0x973b, 0x973b, 0x973d, 0x9772, 0x973b, 0x973b,
++      0x973b, 0x973b, 0x9785, 0x080c, 0x0d84, 0x00d6, 0x0016, 0x0096,
++      0x080c, 0x80d6, 0x080c, 0x820b, 0x6003, 0x0004, 0x6114, 0x2148,
++      0xa87c, 0xd0fc, 0x01b8, 0xa878, 0x9005, 0x1158, 0xa894, 0x9005,
++      0x0140, 0x2001, 0x0000, 0x900e, 0x080c, 0x98db, 0x080c, 0x9554,
++      0x00a8, 0x6003, 0x0002, 0xa8a4, 0xa9a8, 0x9105, 0x1178, 0xa8ae,
++      0xa8b2, 0x0c78, 0xa87f, 0x0020, 0xa88c, 0xa88a, 0xa8a4, 0xa8ae,
++      0xa8a8, 0xa8b2, 0xa8c7, 0x0000, 0xa8cb, 0x0000, 0x009e, 0x001e,
++      0x00de, 0x0005, 0x080c, 0x80d6, 0x00d6, 0x0096, 0x6114, 0x2148,
++      0x080c, 0xb0ad, 0x0120, 0xa87b, 0x0006, 0x080c, 0x61a9, 0x009e,
++      0x00de, 0x080c, 0x9554, 0x0804, 0x820b, 0x080c, 0x80d6, 0x080c,
++      0x2d1a, 0x080c, 0xb76c, 0x00d6, 0x0096, 0x6114, 0x2148, 0x080c,
++      0xb0ad, 0x0120, 0xa87b, 0x0029, 0x080c, 0x61a9, 0x009e, 0x00de,
++      0x080c, 0x9554, 0x0804, 0x820b, 0x9182, 0x0047, 0x0002, 0x97ac,
++      0x97ae, 0x97ac, 0x97ac, 0x97ac, 0x97ac, 0x97ac, 0x97ac, 0x97ac,
++      0x97ac, 0x97ac, 0x97ac, 0x97ae, 0x080c, 0x0d84, 0x00d6, 0x0096,
++      0x080c, 0x1489, 0x6114, 0x2148, 0xa87b, 0x0000, 0xa883, 0x0000,
++      0x080c, 0x61a9, 0x009e, 0x00de, 0x0804, 0x9554, 0x0026, 0x0036,
++      0x0056, 0x0066, 0x0096, 0x00a6, 0x00f6, 0x0006, 0x080c, 0x0fae,
++      0x000e, 0x090c, 0x0d84, 0xa960, 0x21e8, 0xa95c, 0x9188, 0x0019,
++      0x21a0, 0x900e, 0x20a9, 0x0020, 0x4104, 0xa87a, 0x2079, 0x1800,
++      0x7988, 0x9188, 0x0018, 0x918c, 0x0fff, 0xa972, 0xac76, 0x2950,
++      0x00a6, 0x2001, 0x0205, 0x2003, 0x0000, 0x901e, 0x2029, 0x0001,
++      0x9182, 0x0034, 0x1228, 0x2011, 0x001f, 0x080c, 0xace6, 0x04c0,
++      0x2130, 0x2009, 0x0034, 0x2011, 0x001f, 0x080c, 0xace6, 0x96b2,
++      0x0034, 0xb004, 0x904d, 0x0110, 0x080c, 0x0f60, 0x080c, 0x0fae,
++      0x01d0, 0x8528, 0xa867, 0x0110, 0xa86b, 0x0000, 0x2920, 0xb406,
++      0x968a, 0x003d, 0x1230, 0x2608, 0x2011, 0x001b, 0x080c, 0xace6,
++      0x00b8, 0x96b2, 0x003c, 0x2009, 0x003c, 0x2950, 0x2011, 0x001b,
++      0x080c, 0xace6, 0x0c18, 0x2001, 0x0205, 0x2003, 0x0000, 0x00ae,
++      0x852f, 0x95ad, 0x0050, 0xb566, 0xb070, 0xc0fd, 0xb072, 0x0048,
++      0x2001, 0x0205, 0x2003, 0x0000, 0x00ae, 0x852f, 0x95ad, 0x0050,
++      0xb566, 0x2a48, 0xa804, 0xa807, 0x0000, 0x0006, 0x080c, 0x61a9,
++      0x000e, 0x2048, 0x9005, 0x1db0, 0x00fe, 0x00ae, 0x009e, 0x006e,
++      0x005e, 0x003e, 0x002e, 0x0005, 0x00d6, 0x00f6, 0x0096, 0x0006,
++      0x080c, 0x0fae, 0x000e, 0x090c, 0x0d84, 0xa960, 0x21e8, 0xa95c,
++      0x9188, 0x0019, 0x21a0, 0x900e, 0x20a9, 0x0020, 0x4104, 0xaa66,
++      0xa87a, 0x2079, 0x1800, 0x7988, 0x810c, 0x9188, 0x000c, 0x9182,
++      0x001a, 0x0210, 0x2009, 0x001a, 0x21a8, 0x810b, 0xa972, 0xac76,
++      0x2e98, 0xa85c, 0x9080, 0x001f, 0x20a0, 0x2001, 0x0205, 0x200c,
++      0x918d, 0x0080, 0x2102, 0x4003, 0x2003, 0x0000, 0x080c, 0x61a9,
++      0x009e, 0x00fe, 0x00de, 0x0005, 0x0016, 0x00d6, 0x00f6, 0x0096,
++      0x0016, 0x2001, 0x0205, 0x200c, 0x918d, 0x0080, 0x2102, 0x001e,
++      0x2079, 0x0200, 0x2e98, 0x2021, 0x003e, 0x901e, 0x9282, 0x0020,
++      0x0218, 0x2011, 0x0020, 0x2018, 0x9486, 0x003e, 0x1170, 0x0096,
++      0x080c, 0x0fae, 0x2900, 0x009e, 0x05b8, 0xa806, 0x2048, 0xa860,
++      0x20e8, 0xa85c, 0x9080, 0x0002, 0x20a0, 0x3300, 0x908e, 0x0260,
++      0x0140, 0x2009, 0x0280, 0x9102, 0x920a, 0x0218, 0x2010, 0x2100,
++      0x9318, 0x2200, 0x9402, 0x1220, 0x2410, 0x9006, 0x9398, 0x0002,
++      0x2020, 0x22a8, 0xa800, 0x9200, 0xa802, 0x20e1, 0x0000, 0x4003,
++      0x83ff, 0x0180, 0x3300, 0x9086, 0x0280, 0x1130, 0x7814, 0x8000,
++      0x9085, 0x0080, 0x7816, 0x2e98, 0x2310, 0x84ff, 0x0904, 0x988b,
++      0x0804, 0x988d, 0x9085, 0x0001, 0x7817, 0x0000, 0x009e, 0x00fe,
++      0x00de, 0x001e, 0x0005, 0x00d6, 0x0036, 0x0096, 0x6314, 0x2348,
++      0xa87a, 0xa982, 0x080c, 0x619c, 0x009e, 0x003e, 0x00de, 0x0005,
++      0x91b6, 0x0015, 0x1118, 0x080c, 0x9554, 0x0030, 0x91b6, 0x0016,
++      0x190c, 0x0d84, 0x080c, 0x9554, 0x0005, 0x20a9, 0x000e, 0x20e1,
++      0x0000, 0x2e98, 0x6014, 0x0096, 0x2048, 0xa860, 0x20e8, 0xa85c,
++      0x20a0, 0x009e, 0x4003, 0x0136, 0x9080, 0x001b, 0x2011, 0x0006,
++      0x20a9, 0x0001, 0x3418, 0x8318, 0x23a0, 0x4003, 0x3318, 0x8318,
++      0x2398, 0x8211, 0x1db8, 0x2011, 0x0006, 0x013e, 0x20a0, 0x3318,
++      0x8318, 0x2398, 0x4003, 0x3418, 0x8318, 0x23a0, 0x8211, 0x1db8,
++      0x0096, 0x080c, 0xb0ad, 0x0130, 0x6014, 0x2048, 0xa807, 0x0000,
++      0xa867, 0x0103, 0x009e, 0x0804, 0x9554, 0x0096, 0x00d6, 0x0036,
++      0x7330, 0x9386, 0x0200, 0x11a8, 0x6010, 0x00b6, 0x2058, 0xb8bf,
++      0x0000, 0x00be, 0x6014, 0x9005, 0x0130, 0x2048, 0xa807, 0x0000,
++      0xa867, 0x0103, 0xab32, 0x080c, 0x9554, 0x003e, 0x00de, 0x009e,
++      0x0005, 0x0011, 0x1d48, 0x0cc8, 0x0006, 0x0016, 0x080c, 0xb759,
++      0x0188, 0x6014, 0x9005, 0x1170, 0x600b, 0x0003, 0x601b, 0x0000,
++      0x6043, 0x0000, 0x2009, 0x0022, 0x080c, 0x9cf7, 0x9006, 0x001e,
++      0x000e, 0x0005, 0x9085, 0x0001, 0x0cd0, 0x0096, 0x0016, 0x20a9,
++      0x0014, 0x9e80, 0x000c, 0x20e1, 0x0000, 0x2098, 0x6014, 0x2048,
++      0xa860, 0x20e8, 0xa85c, 0x9080, 0x0002, 0x20a0, 0x4003, 0x2001,
++      0x0205, 0x2003, 0x0001, 0x2099, 0x0260, 0x20a9, 0x0016, 0x4003,
++      0x20a9, 0x000a, 0xa804, 0x2048, 0xa860, 0x20e8, 0xa85c, 0x9080,
++      0x0002, 0x20a0, 0x4003, 0x2001, 0x0205, 0x2003, 0x0002, 0x2099,
++      0x0260, 0x20a9, 0x0020, 0x4003, 0x2003, 0x0000, 0x6014, 0x2048,
++      0xa800, 0x2048, 0xa867, 0x0103, 0x080c, 0x9554, 0x001e, 0x009e,
++      0x0005, 0x0096, 0x0016, 0x900e, 0x7030, 0x9086, 0x0100, 0x0140,
++      0x7038, 0x9084, 0x00ff, 0x800c, 0x703c, 0x9084, 0x00ff, 0x8004,
++      0x9080, 0x0004, 0x9108, 0x810b, 0x2011, 0x0002, 0x2019, 0x000c,
++      0x6014, 0x2048, 0x080c, 0xace6, 0x080c, 0xb0ad, 0x0140, 0x6014,
++      0x2048, 0xa807, 0x0000, 0xa864, 0xa8e2, 0xa867, 0x0103, 0x080c,
++      0x9554, 0x001e, 0x009e, 0x0005, 0x0016, 0x0096, 0x7030, 0x9086,
++      0x0100, 0x1118, 0x2009, 0x0004, 0x0010, 0x7034, 0x800c, 0x810b,
++      0x2011, 0x000c, 0x2019, 0x000c, 0x6014, 0x2048, 0xa804, 0x0096,
++      0x9005, 0x0108, 0x2048, 0x080c, 0xace6, 0x009e, 0x080c, 0xb0ad,
++      0x0148, 0xa804, 0x9005, 0x1158, 0xa807, 0x0000, 0xa864, 0xa8e2,
++      0xa867, 0x0103, 0x080c, 0x9554, 0x009e, 0x001e, 0x0005, 0x0086,
++      0x2040, 0xa030, 0x8007, 0x9086, 0x0100, 0x1118, 0x080c, 0x9e99,
++      0x00e0, 0xa034, 0x8007, 0x800c, 0x8806, 0x8006, 0x8007, 0x90bc,
++      0x003f, 0x9084, 0xffc0, 0x9080, 0x000c, 0xa87b, 0x0000, 0xa883,
++      0x0000, 0xa897, 0x4000, 0xaaa0, 0xab9c, 0xaca8, 0xada4, 0x2031,
++      0x0000, 0x2041, 0x11e3, 0x0019, 0x0d08, 0x008e, 0x0898, 0x0096,
++      0x0006, 0x080c, 0x0fae, 0x000e, 0x01b0, 0xa8ab, 0x0dcb, 0xa876,
++      0x000e, 0xa8a2, 0x0006, 0xae6a, 0x2800, 0xa89e, 0xa97a, 0xaf72,
++      0xaa8e, 0xab92, 0xac96, 0xad9a, 0x0086, 0x2940, 0x080c, 0x108c,
++      0x008e, 0x9085, 0x0001, 0x009e, 0x0005, 0x00e6, 0x00d6, 0x0026,
++      0x7008, 0x9084, 0x00ff, 0x6210, 0x00b6, 0x2258, 0xba10, 0x00be,
++      0x9206, 0x1520, 0x700c, 0x6210, 0x00b6, 0x2258, 0xba14, 0x00be,
++      0x9206, 0x11e0, 0x6043, 0x0000, 0x2c68, 0x0016, 0x2009, 0x0035,
++      0x080c, 0xb6d9, 0x001e, 0x1158, 0x622c, 0x2268, 0x2071, 0x026c,
++      0x6b20, 0x9386, 0x0003, 0x0130, 0x9386, 0x0006, 0x0128, 0x080c,
++      0x9554, 0x0020, 0x0039, 0x0010, 0x080c, 0x9b31, 0x002e, 0x00de,
++      0x00ee, 0x0005, 0x0096, 0x6814, 0x2048, 0x9186, 0x0015, 0x0904,
++      0x9b19, 0x918e, 0x0016, 0x1904, 0x9b2f, 0x700c, 0x908c, 0xff00,
++      0x9186, 0x1700, 0x0120, 0x9186, 0x0300, 0x1904, 0x9af3, 0x89ff,
++      0x1138, 0x6800, 0x9086, 0x000f, 0x0904, 0x9ad6, 0x0804, 0x9b2d,
++      0x6808, 0x9086, 0xffff, 0x1904, 0x9b1b, 0xa87c, 0x9084, 0x0060,
++      0x9086, 0x0020, 0x1128, 0xa83c, 0xa940, 0x9105, 0x1904, 0x9b1b,
++      0x6824, 0xd0b4, 0x1904, 0x9b1b, 0x080c, 0xb278, 0x685c, 0xa882,
++      0xa87c, 0xc0dc, 0xc0f4, 0xc0d4, 0xa87e, 0x0026, 0x900e, 0x6a18,
++      0x2001, 0x000a, 0x080c, 0x7a4b, 0xa884, 0x920a, 0x0208, 0x8011,
++      0xaa86, 0x82ff, 0x002e, 0x1138, 0x00c6, 0x2d60, 0x080c, 0xae04,
++      0x00ce, 0x0804, 0x9b2d, 0x00c6, 0xa868, 0xd0fc, 0x1118, 0x080c,
++      0x5755, 0x0010, 0x080c, 0x5ac6, 0x00ce, 0x1904, 0x9b1b, 0x00c6,
++      0x2d60, 0x080c, 0x9554, 0x00ce, 0x0804, 0x9b2d, 0x00c6, 0x080c,
++      0x95a1, 0x0198, 0x6017, 0x0000, 0x6810, 0x6012, 0x080c, 0xb4e6,
++      0x6023, 0x0003, 0x6904, 0x00c6, 0x2d60, 0x080c, 0x9554, 0x00ce,
++      0x080c, 0x95ce, 0x00ce, 0x0804, 0x9b2d, 0x2001, 0x1955, 0x2004,
++      0x6842, 0x00ce, 0x04d0, 0x7008, 0x9086, 0x000b, 0x11c8, 0x6010,
++      0x00b6, 0x2058, 0xb900, 0xc1bc, 0xb902, 0x00be, 0x00c6, 0x2d60,
++      0xa883, 0x0003, 0x080c, 0xb71f, 0x6007, 0x0085, 0x6003, 0x000b,
++      0x6023, 0x0002, 0x080c, 0x7bcb, 0x080c, 0x8125, 0x00ce, 0x00e8,
++      0x700c, 0x9086, 0x2a00, 0x1138, 0x2001, 0x1955, 0x2004, 0x6842,
++      0x00a0, 0x0479, 0x00a0, 0x89ff, 0x090c, 0x0d84, 0x00c6, 0x00d6,
++      0x2d60, 0xa867, 0x0103, 0xa87b, 0x0003, 0x080c, 0xacd6, 0x080c,
++      0xb278, 0x080c, 0x9584, 0x00de, 0x00ce, 0x080c, 0x9554, 0x009e,
++      0x0005, 0x9186, 0x0015, 0x1128, 0x2001, 0x1955, 0x2004, 0x6842,
++      0x0068, 0x918e, 0x0016, 0x1160, 0x00c6, 0x2d00, 0x2060, 0x080c,
++      0xcc1f, 0x080c, 0x79df, 0x080c, 0x9554, 0x00ce, 0x080c, 0x9554,
++      0x0005, 0x0026, 0x0036, 0x0046, 0x7228, 0xacb0, 0xabac, 0xd2f4,
++      0x0130, 0x2001, 0x1955, 0x2004, 0x6842, 0x0804, 0x9ba9, 0x00c6,
++      0x2d60, 0x080c, 0xad11, 0x00ce, 0x6804, 0x9086, 0x0050, 0x1168,
++      0x00c6, 0x2d00, 0x2060, 0x6003, 0x0001, 0x6007, 0x0050, 0x080c,
++      0x7bcb, 0x080c, 0x8125, 0x00ce, 0x04e0, 0x6800, 0x9086, 0x000f,
++      0x01b0, 0x89ff, 0x090c, 0x0d84, 0x6800, 0x9086, 0x0004, 0x1198,
++      0xa87c, 0xd0ac, 0x0180, 0xa843, 0x0fff, 0xa83f, 0x0fff, 0xa880,
++      0xc0f4, 0xc0fc, 0xa882, 0x2001, 0x0001, 0x6832, 0x00e8, 0x2001,
++      0x0007, 0x6832, 0x00c8, 0xa87c, 0xd0b4, 0x1138, 0xd0ac, 0x0db8,
++      0xa838, 0xa934, 0x9105, 0x0d98, 0x0c30, 0xd2ec, 0x1d80, 0x7024,
++      0x9306, 0x1118, 0x7020, 0x9406, 0x0d50, 0x7020, 0x683e, 0x7024,
++      0x683a, 0x2001, 0x0005, 0x6832, 0x080c, 0xb3e0, 0x080c, 0x8125,
++      0x0010, 0x080c, 0x9554, 0x004e, 0x003e, 0x002e, 0x0005, 0x00e6,
++      0x00d6, 0x0026, 0x7008, 0x9084, 0x00ff, 0x6210, 0x00b6, 0x2258,
++      0xba10, 0x00be, 0x9206, 0x1904, 0x9c11, 0x700c, 0x6210, 0x00b6,
++      0x2258, 0xba14, 0x00be, 0x9206, 0x1904, 0x9c11, 0x6038, 0x2068,
++      0x6a20, 0x9286, 0x0007, 0x0904, 0x9c11, 0x9286, 0x0002, 0x0904,
++      0x9c11, 0x9286, 0x0000, 0x05e8, 0x6808, 0x633c, 0x9306, 0x15c8,
++      0x2071, 0x026c, 0x9186, 0x0015, 0x0570, 0x918e, 0x0016, 0x1100,
++      0x00c6, 0x6038, 0x2060, 0x6104, 0x9186, 0x004b, 0x01c0, 0x9186,
++      0x004c, 0x01a8, 0x9186, 0x004d, 0x0190, 0x9186, 0x004e, 0x0178,
++      0x9186, 0x0052, 0x0160, 0x6014, 0x0096, 0x2048, 0x080c, 0xb0ad,
++      0x090c, 0x0d84, 0xa883, 0x0003, 0x009e, 0x080c, 0xb71f, 0x6007,
++      0x0085, 0x6003, 0x000b, 0x6023, 0x0002, 0x080c, 0x7bcb, 0x080c,
++      0x8125, 0x00ce, 0x0030, 0x6038, 0x2070, 0x2001, 0x1955, 0x2004,
++      0x7042, 0x080c, 0x9554, 0x002e, 0x00de, 0x00ee, 0x0005, 0x00b6,
++      0x0096, 0x00f6, 0x6014, 0x2048, 0x6010, 0x2058, 0x91b6, 0x0015,
++      0x0130, 0xba08, 0xbb0c, 0xbc00, 0xc48c, 0xbc02, 0x0460, 0x0096,
++      0x0156, 0x0036, 0x0026, 0x2b48, 0x9e90, 0x0010, 0x2019, 0x000a,
++      0x20a9, 0x0004, 0x080c, 0xa439, 0x002e, 0x003e, 0x015e, 0x009e,
++      0x1904, 0x9c80, 0x0096, 0x0156, 0x0036, 0x0026, 0x2b48, 0x9e90,
++      0x0014, 0x2019, 0x0006, 0x20a9, 0x0004, 0x080c, 0xa439, 0x002e,
++      0x003e, 0x015e, 0x009e, 0x15a0, 0x7238, 0xba0a, 0x733c, 0xbb0e,
++      0xbc00, 0xc48d, 0xbc02, 0xa804, 0x9005, 0x1128, 0x00fe, 0x009e,
++      0x00be, 0x0804, 0x9920, 0x0096, 0x2048, 0xaa12, 0xab16, 0xac0a,
++      0x009e, 0x8006, 0x8006, 0x8007, 0x90bc, 0x003f, 0x9084, 0xffc0,
++      0x9080, 0x0002, 0x2009, 0x002b, 0xaaa0, 0xab9c, 0xaca8, 0xada4,
++      0x2031, 0x0000, 0x2041, 0x11e3, 0x080c, 0x9a1f, 0x0130, 0x00fe,
++      0x009e, 0x080c, 0x9554, 0x00be, 0x0005, 0x080c, 0x9e99, 0x0cb8,
++      0x2b78, 0x00f6, 0x080c, 0x2d1a, 0x080c, 0xb76c, 0x00fe, 0x00c6,
++      0x080c, 0x94fe, 0x2f00, 0x6012, 0x6017, 0x0000, 0x6023, 0x0001,
++      0x6007, 0x0001, 0x6003, 0x0001, 0x2001, 0x0007, 0x080c, 0x5b61,
++      0x080c, 0x5b8d, 0x080c, 0x7c1d, 0x080c, 0x8125, 0x00ce, 0x0804,
++      0x9c53, 0x2100, 0x91b2, 0x0053, 0x1a0c, 0x0d84, 0x91b2, 0x0040,
++      0x1a04, 0x9d09, 0x0002, 0x9cf7, 0x9cf7, 0x9ced, 0x9cf7, 0x9cf7,
++      0x9cf7, 0x9ceb, 0x9ceb, 0x9ceb, 0x9ceb, 0x9ceb, 0x9ceb, 0x9ceb,
++      0x9ceb, 0x9ceb, 0x9ceb, 0x9ceb, 0x9ceb, 0x9ceb, 0x9ceb, 0x9ceb,
++      0x9ceb, 0x9ceb, 0x9ceb, 0x9ceb, 0x9ceb, 0x9ceb, 0x9ceb, 0x9ceb,
++      0x9ceb, 0x9ceb, 0x9cf7, 0x9ceb, 0x9cf7, 0x9cf7, 0x9ceb, 0x9ceb,
++      0x9ceb, 0x9ceb, 0x9ceb, 0x9ced, 0x9ceb, 0x9ceb, 0x9ceb, 0x9ceb,
++      0x9ceb, 0x9ceb, 0x9ceb, 0x9ceb, 0x9ceb, 0x9cf7, 0x9cf7, 0x9ceb,
++      0x9ceb, 0x9ceb, 0x9ceb, 0x9ceb, 0x9ceb, 0x9ceb, 0x9ceb, 0x9ceb,
++      0x9cf7, 0x9ceb, 0x9ceb, 0x080c, 0x0d84, 0x0066, 0x00b6, 0x6610,
++      0x2658, 0xb8bc, 0xc08c, 0xb8be, 0x00be, 0x006e, 0x0000, 0x6003,
++      0x0001, 0x6106, 0x9186, 0x0032, 0x0118, 0x080c, 0x7c1d, 0x0010,
++      0x080c, 0x7bcb, 0x0126, 0x2091, 0x8000, 0x080c, 0x8125, 0x012e,
++      0x0005, 0x2600, 0x0002, 0x9d1d, 0x9d1d, 0x9d1d, 0x9cf7, 0x9cf7,
++      0x9d1d, 0x9d1d, 0x9d1d, 0x9d1d, 0x9cf7, 0x9d1d, 0x9cf7, 0x9d1d,
++      0x9cf7, 0x9d1d, 0x9d1d, 0x9d1d, 0x9d1d, 0x080c, 0x0d84, 0x6004,
++      0x90b2, 0x0053, 0x1a0c, 0x0d84, 0x91b6, 0x0013, 0x0904, 0x9dd4,
++      0x91b6, 0x0027, 0x1904, 0x9d8f, 0x080c, 0x8026, 0x6004, 0x080c,
++      0xb284, 0x01a8, 0x080c, 0xb295, 0x01a0, 0x908e, 0x0021, 0x0904,
++      0x9d8c, 0x908e, 0x0022, 0x1130, 0x080c, 0x994c, 0x0904, 0x9d88,
++      0x0804, 0x9d89, 0x908e, 0x003d, 0x0904, 0x9d8c, 0x04d8, 0x080c,
++      0x2d3f, 0x2001, 0x0007, 0x080c, 0x5b61, 0x6010, 0x00b6, 0x2058,
++      0xb9a0, 0x00be, 0x080c, 0x9e99, 0x9186, 0x007e, 0x1148, 0x2001,
++      0x1836, 0x2014, 0xc285, 0x080c, 0x6877, 0x1108, 0xc2ad, 0x2202,
++      0x0036, 0x2019, 0x0028, 0x080c, 0x2e2f, 0x003e, 0x0016, 0x0026,
++      0x0036, 0x2110, 0x2019, 0x0028, 0x080c, 0x7d55, 0x0076, 0x903e,
++      0x080c, 0x7c4d, 0x6010, 0x00b6, 0x905d, 0x0100, 0x00be, 0x2c08,
++      0x080c, 0xc73e, 0x007e, 0x003e, 0x002e, 0x001e, 0x080c, 0xb76c,
++      0x080c, 0x5bd1, 0x080c, 0xb4de, 0x080c, 0x9554, 0x080c, 0x8125,
++      0x0005, 0x080c, 0x9e99, 0x0cb0, 0x080c, 0x9ed5, 0x0c98, 0x9186,
++      0x0014, 0x1db0, 0x080c, 0x8026, 0x6004, 0x908e, 0x0022, 0x1118,
++      0x080c, 0x994c, 0x0d68, 0x080c, 0x2d1a, 0x080c, 0xb76c, 0x080c,
++      0xb284, 0x1190, 0x080c, 0x2d3f, 0x6010, 0x00b6, 0x2058, 0xb9a0,
++      0x00be, 0x080c, 0x9e99, 0x9186, 0x007e, 0x1128, 0x2001, 0x1836,
++      0x200c, 0xc185, 0x2102, 0x0870, 0x080c, 0xb295, 0x1118, 0x080c,
++      0x9e99, 0x0840, 0x6004, 0x908e, 0x0032, 0x1160, 0x00e6, 0x00f6,
++      0x2071, 0x1893, 0x2079, 0x0000, 0x080c, 0x308f, 0x00fe, 0x00ee,
++      0x0804, 0x9d82, 0x6004, 0x908e, 0x0021, 0x0d48, 0x908e, 0x0022,
++      0x090c, 0x9e99, 0x0804, 0x9d82, 0x90b2, 0x0040, 0x1a04, 0x9e82,
++      0x2008, 0x0002, 0x9e1c, 0x9e1d, 0x9e20, 0x9e23, 0x9e26, 0x9e29,
++      0x9e1a, 0x9e1a, 0x9e1a, 0x9e1a, 0x9e1a, 0x9e1a, 0x9e1a, 0x9e1a,
++      0x9e1a, 0x9e1a, 0x9e1a, 0x9e1a, 0x9e1a, 0x9e1a, 0x9e1a, 0x9e1a,
++      0x9e1a, 0x9e1a, 0x9e1a, 0x9e1a, 0x9e1a, 0x9e1a, 0x9e1a, 0x9e1a,
++      0x9e2c, 0x9e37, 0x9e1a, 0x9e39, 0x9e37, 0x9e1a, 0x9e1a, 0x9e1a,
++      0x9e1a, 0x9e1a, 0x9e37, 0x9e37, 0x9e1a, 0x9e1a, 0x9e1a, 0x9e1a,
++      0x9e1a, 0x9e1a, 0x9e1a, 0x9e1a, 0x9e69, 0x9e37, 0x9e1a, 0x9e33,
++      0x9e1a, 0x9e1a, 0x9e1a, 0x9e34, 0x9e1a, 0x9e1a, 0x9e1a, 0x9e37,
++      0x9e60, 0x9e1a, 0x080c, 0x0d84, 0x00d0, 0x2001, 0x000b, 0x0410,
++      0x2001, 0x0003, 0x00f8, 0x2001, 0x0005, 0x00e0, 0x2001, 0x0001,
++      0x00c8, 0x2001, 0x0009, 0x00b0, 0x080c, 0x8026, 0x6003, 0x0005,
++      0x080c, 0x8125, 0x0070, 0x0018, 0x0010, 0x080c, 0x5b61, 0x0804,
++      0x9e7a, 0x080c, 0x8026, 0x080c, 0xb76f, 0x6003, 0x0004, 0x080c,
++      0x8125, 0x0005, 0x080c, 0x5b61, 0x080c, 0x8026, 0x6003, 0x0002,
++      0x0036, 0x2019, 0x185d, 0x2304, 0x9084, 0xff00, 0x1120, 0x2001,
++      0x1953, 0x201c, 0x0040, 0x8007, 0x909a, 0x0004, 0x0ec0, 0x8003,
++      0x801b, 0x831b, 0x9318, 0x631a, 0x003e, 0x080c, 0x8125, 0x0c08,
++      0x080c, 0x8026, 0x080c, 0xb4de, 0x080c, 0x9554, 0x080c, 0x8125,
++      0x08c0, 0x00e6, 0x00f6, 0x2071, 0x1893, 0x2079, 0x0000, 0x080c,
++      0x308f, 0x00fe, 0x00ee, 0x080c, 0x8026, 0x080c, 0x9554, 0x080c,
++      0x8125, 0x0838, 0x080c, 0x8026, 0x6003, 0x0002, 0x080c, 0xb76f,
++      0x0804, 0x8125, 0x2600, 0x2008, 0x0002, 0x9e97, 0x9e97, 0x9e97,
++      0x9e7a, 0x9e7a, 0x9e97, 0x9e97, 0x9e97, 0x9e97, 0x9e7a, 0x9e97,
++      0x9e7a, 0x9e97, 0x9e7a, 0x9e97, 0x9e97, 0x9e97, 0x9e97, 0x080c,
++      0x0d84, 0x00e6, 0x0096, 0x0026, 0x0016, 0x080c, 0xb0ad, 0x0568,
++      0x6014, 0x2048, 0xa864, 0x9086, 0x0139, 0x11a8, 0xa894, 0x9086,
++      0x0056, 0x1148, 0x080c, 0x4b95, 0x0130, 0x2001, 0x0000, 0x900e,
++      0x2011, 0x4000, 0x0028, 0x2001, 0x0030, 0x900e, 0x2011, 0x4005,
++      0x080c, 0xb644, 0x0090, 0xa868, 0xd0fc, 0x0178, 0xa807, 0x0000,
++      0x0016, 0x6004, 0x908e, 0x0021, 0x0168, 0x908e, 0x003d, 0x0150,
++      0x001e, 0xa867, 0x0103, 0xa833, 0x0100, 0x001e, 0x002e, 0x009e,
++      0x00ee, 0x0005, 0x001e, 0x0009, 0x0cc0, 0x0096, 0x6014, 0x2048,
++      0xa800, 0x2048, 0xa867, 0x0103, 0xa823, 0x8001, 0x009e, 0x0005,
++      0x00b6, 0x6610, 0x2658, 0xb804, 0x9084, 0x00ff, 0x90b2, 0x000c,
++      0x1a0c, 0x0d84, 0x6604, 0x96b6, 0x004d, 0x1120, 0x080c, 0xb56a,
++      0x0804, 0x9f5d, 0x6604, 0x96b6, 0x0043, 0x1120, 0x080c, 0xb5b3,
++      0x0804, 0x9f5d, 0x6604, 0x96b6, 0x004b, 0x1120, 0x080c, 0xb5df,
++      0x0804, 0x9f5d, 0x6604, 0x96b6, 0x0033, 0x1120, 0x080c, 0xb500,
++      0x0804, 0x9f5d, 0x6604, 0x96b6, 0x0028, 0x1120, 0x080c, 0xb2c4,
++      0x0804, 0x9f5d, 0x6604, 0x96b6, 0x0029, 0x1120, 0x080c, 0xb305,
++      0x0804, 0x9f5d, 0x6604, 0x96b6, 0x001f, 0x1118, 0x080c, 0x98f5,
++      0x04e0, 0x6604, 0x96b6, 0x0000, 0x1118, 0x080c, 0x9c17, 0x04a8,
++      0x6604, 0x96b6, 0x0022, 0x1118, 0x080c, 0x992d, 0x0470, 0x6604,
++      0x96b6, 0x0035, 0x1118, 0x080c, 0x9a3d, 0x0438, 0x6604, 0x96b6,
++      0x0039, 0x1118, 0x080c, 0x9baf, 0x0400, 0x6604, 0x96b6, 0x003d,
++      0x1118, 0x080c, 0x9965, 0x00c8, 0x6604, 0x96b6, 0x0044, 0x1118,
++      0x080c, 0x99a1, 0x0090, 0x6604, 0x96b6, 0x0049, 0x1118, 0x080c,
++      0x99cc, 0x0058, 0x91b6, 0x0015, 0x1110, 0x0063, 0x0030, 0x91b6,
++      0x0016, 0x1128, 0x00be, 0x0804, 0xa178, 0x00be, 0x0005, 0x080c,
++      0x95e9, 0x0cd8, 0x9f7a, 0x9f7d, 0x9f7a, 0x9fc2, 0x9f7a, 0xa0f1,
++      0xa185, 0x9f7a, 0x9f7a, 0xa152, 0x9f7a, 0xa166, 0x0096, 0x080c,
++      0x1489, 0x6014, 0x2048, 0xa800, 0x2048, 0xa867, 0x0103, 0x009e,
++      0x0804, 0x9554, 0xa001, 0xa001, 0x0005, 0x00e6, 0x2071, 0x1800,
++      0x7088, 0x9086, 0x0074, 0x1540, 0x080c, 0xc70f, 0x11b0, 0x6010,
++      0x00b6, 0x2058, 0x7030, 0xd08c, 0x0128, 0xb800, 0xd0bc, 0x0110,
++      0xc0c5, 0xb802, 0x00e9, 0x00be, 0x2001, 0x0006, 0x080c, 0x5b61,
++      0x080c, 0x2d3f, 0x080c, 0x9554, 0x0088, 0x2001, 0x000a, 0x080c,
++      0x5b61, 0x080c, 0x2d3f, 0x6003, 0x0001, 0x6007, 0x0001, 0x080c,
++      0x7c1d, 0x080c, 0x8125, 0x0010, 0x080c, 0xa0dc, 0x00ee, 0x0005,
++      0x00d6, 0xb800, 0xd084, 0x0160, 0x9006, 0x080c, 0x5b4d, 0x2069,
++      0x1852, 0x6804, 0xd0a4, 0x0120, 0x2001, 0x0006, 0x080c, 0x5b8d,
++      0x00de, 0x0005, 0x00b6, 0x0096, 0x00d6, 0x2011, 0x1822, 0x2204,
++      0x9086, 0x0074, 0x1904, 0xa0c0, 0x6010, 0x2058, 0xbaa0, 0x9286,
++      0x007e, 0x1120, 0x080c, 0xa2c7, 0x0804, 0xa025, 0x080c, 0xa2bc,
++      0x6010, 0x2058, 0xbaa0, 0x9286, 0x0080, 0x1510, 0x6014, 0x9005,
++      0x01a8, 0x2048, 0xa864, 0x9084, 0x00ff, 0x9086, 0x0039, 0x1140,
++      0x2001, 0x0000, 0x900e, 0x2011, 0x4000, 0x080c, 0xb644, 0x0030,
++      0xa807, 0x0000, 0xa867, 0x0103, 0xa833, 0x0200, 0x2001, 0x0006,
++      0x080c, 0x5b61, 0x080c, 0x2d3f, 0x080c, 0x9554, 0x0804, 0xa0c1,
++      0x080c, 0xa0c5, 0x6014, 0x9005, 0x0190, 0x2048, 0xa868, 0xd0f4,
++      0x0170, 0xa864, 0x9084, 0x00ff, 0x9086, 0x0039, 0x1d08, 0x2001,
++      0x0000, 0x900e, 0x2011, 0x4000, 0x080c, 0xb644, 0x08f8, 0x2001,
++      0x0004, 0x080c, 0x5b61, 0x6003, 0x0001, 0x6007, 0x0003, 0x080c,
++      0x7c1d, 0x080c, 0x8125, 0x0804, 0xa0c1, 0xb85c, 0xd0e4, 0x01d0,
++      0x080c, 0xb480, 0x080c, 0x6877, 0x0110, 0xd0dc, 0x1938, 0x2011,
++      0x1836, 0x2204, 0xc0ad, 0x2012, 0x2001, 0x193c, 0x2004, 0x00f6,
++      0x2079, 0x0100, 0x78e3, 0x0000, 0x080c, 0x2471, 0x78e2, 0x00fe,
++      0x0804, 0x9ff6, 0x080c, 0xb4bd, 0x2011, 0x1836, 0x2204, 0xc0a5,
++      0x2012, 0x0006, 0x080c, 0xc860, 0x000e, 0x1904, 0x9ff6, 0xc0b5,
++      0x2012, 0x2001, 0x0006, 0x080c, 0x5b61, 0x9006, 0x080c, 0x5b4d,
++      0x00c6, 0x2001, 0x180e, 0x2004, 0xd09c, 0x0520, 0x00f6, 0x2079,
++      0x0100, 0x00e6, 0x2071, 0x1800, 0x700c, 0x9084, 0x00ff, 0x78e6,
++      0x7076, 0x7010, 0x78ea, 0x707a, 0x908c, 0x00ff, 0x00ee, 0x780c,
++      0xc0b5, 0x780e, 0x00fe, 0x080c, 0x2446, 0x00f6, 0x2100, 0x900e,
++      0x080c, 0x23fd, 0x7956, 0x00fe, 0x9186, 0x0081, 0x01d8, 0x2009,
++      0x0081, 0x00c8, 0x2009, 0x00ef, 0x00f6, 0x2079, 0x0100, 0x79ea,
++      0x7932, 0x7936, 0x780c, 0xc0b5, 0x780e, 0x00fe, 0x080c, 0x2446,
++      0x00f6, 0x2079, 0x1800, 0x797a, 0x2100, 0x900e, 0x080c, 0x23fd,
++      0x7956, 0x00fe, 0x8108, 0x080c, 0x5bb0, 0x2b00, 0x00ce, 0x1904,
++      0x9ff6, 0x6012, 0x2009, 0x180e, 0x210c, 0xd19c, 0x0150, 0x2009,
++      0x027c, 0x210c, 0x918c, 0x00ff, 0xb912, 0x2009, 0x027d, 0x210c,
++      0xb916, 0x2001, 0x0002, 0x080c, 0x5b61, 0x6023, 0x0001, 0x6003,
++      0x0001, 0x6007, 0x0002, 0x080c, 0x7c1d, 0x080c, 0x8125, 0x0008,
++      0x00d9, 0x00de, 0x009e, 0x00be, 0x0005, 0x00e6, 0x080c, 0xccd1,
++      0x0188, 0x2071, 0x0260, 0x7108, 0x720c, 0x918c, 0x00ff, 0x1118,
++      0x9284, 0xff00, 0x0138, 0x6010, 0x2058, 0xb8a0, 0xd0bc, 0x1110,
++      0xb912, 0xba16, 0x00ee, 0x0005, 0x2030, 0x2001, 0x0007, 0x080c,
++      0x5b61, 0x080c, 0x4dfe, 0x1120, 0x2001, 0x0007, 0x080c, 0x5b8d,
++      0x080c, 0x2d3f, 0x6020, 0x9086, 0x000a, 0x1108, 0x0005, 0x0804,
++      0x9554, 0x00b6, 0x00e6, 0x0026, 0x0016, 0x2071, 0x1800, 0x7088,
++      0x9086, 0x0014, 0x1904, 0xa149, 0x080c, 0x4dfe, 0x1170, 0x6014,
++      0x9005, 0x1158, 0x0036, 0x0046, 0x6010, 0x2058, 0xbba0, 0x2021,
++      0x0006, 0x080c, 0x44f9, 0x004e, 0x003e, 0x00d6, 0x6010, 0x2058,
++      0x080c, 0x5ca8, 0x080c, 0x9fb0, 0x00de, 0x080c, 0xa38d, 0x1588,
++      0x6010, 0x2058, 0xb890, 0x9005, 0x0560, 0x2001, 0x0006, 0x080c,
++      0x5b61, 0x0096, 0x6014, 0x904d, 0x01d0, 0xa864, 0x9084, 0x00ff,
++      0x9086, 0x0039, 0x1140, 0x2001, 0x0000, 0x900e, 0x2011, 0x4000,
++      0x080c, 0xb644, 0x0060, 0xa864, 0x9084, 0x00ff, 0x9086, 0x0029,
++      0x0130, 0xa807, 0x0000, 0xa867, 0x0103, 0xa833, 0x0200, 0x009e,
++      0x080c, 0x2d3f, 0x6020, 0x9086, 0x000a, 0x0138, 0x080c, 0x9554,
++      0x0020, 0x080c, 0x9e99, 0x080c, 0xa0dc, 0x001e, 0x002e, 0x00ee,
++      0x00be, 0x0005, 0x2011, 0x1822, 0x2204, 0x9086, 0x0014, 0x1160,
++      0x2001, 0x0002, 0x080c, 0x5b61, 0x6003, 0x0001, 0x6007, 0x0001,
++      0x080c, 0x7c1d, 0x0804, 0x8125, 0x0804, 0xa0dc, 0x2030, 0x2011,
++      0x1822, 0x2204, 0x9086, 0x0004, 0x1148, 0x96b6, 0x000b, 0x1120,
++      0x2001, 0x0007, 0x080c, 0x5b61, 0x0804, 0x9554, 0x0804, 0xa0dc,
++      0x0002, 0x9f7a, 0xa190, 0x9f7a, 0xa1cf, 0x9f7a, 0xa278, 0xa185,
++      0x9f7a, 0x9f7a, 0xa28b, 0x9f7a, 0xa29b, 0x6604, 0x9686, 0x0003,
++      0x0904, 0xa0f1, 0x96b6, 0x001e, 0x1110, 0x080c, 0x9554, 0x0005,
++      0x00b6, 0x00d6, 0x00c6, 0x080c, 0xa2ab, 0x11a0, 0x9006, 0x080c,
++      0x5b4d, 0x080c, 0x2d1a, 0x080c, 0xb76c, 0x2001, 0x0002, 0x080c,
++      0x5b61, 0x6003, 0x0001, 0x6007, 0x0002, 0x080c, 0x7c1d, 0x080c,
++      0x8125, 0x0408, 0x2009, 0x026e, 0x2104, 0x9086, 0x0009, 0x1160,
++      0x6010, 0x2058, 0xb840, 0x9084, 0x00ff, 0x9005, 0x0170, 0x8001,
++      0xb842, 0x601b, 0x000a, 0x0078, 0x2009, 0x026f, 0x2104, 0x9084,
++      0xff00, 0x9086, 0x1900, 0x1108, 0x08a0, 0x080c, 0x2d1a, 0x080c,
++      0xb76c, 0x080c, 0xa0dc, 0x00ce, 0x00de, 0x00be, 0x0005, 0x0096,
++      0x00b6, 0x0026, 0x9016, 0x080c, 0xa2b9, 0x00d6, 0x2069, 0x194b,
++      0x2d04, 0x9005, 0x0168, 0x6010, 0x2058, 0xb8a0, 0x9086, 0x007e,
++      0x1138, 0x2069, 0x181e, 0x2d04, 0x8000, 0x206a, 0x00de, 0x0010,
++      0x00de, 0x0088, 0x9006, 0x080c, 0x5b4d, 0x2001, 0x0002, 0x080c,
++      0x5b61, 0x6003, 0x0001, 0x6007, 0x0002, 0x080c, 0x7c1d, 0x080c,
++      0x8125, 0x0804, 0xa248, 0x080c, 0xb0ad, 0x01a0, 0x6014, 0x2048,
++      0xa864, 0x2010, 0x9086, 0x0139, 0x1128, 0x2001, 0x0002, 0x080c,
++      0xb69a, 0x00b0, 0x6014, 0x2048, 0xa864, 0xd0fc, 0x0118, 0x2001,
++      0x0001, 0x0ca8, 0x2001, 0x180d, 0x2004, 0xd0dc, 0x0148, 0x6010,
++      0x2058, 0xb840, 0x9084, 0x00ff, 0x9005, 0x1110, 0x9006, 0x0c38,
++      0x080c, 0x9e99, 0x2009, 0x026e, 0x2134, 0x96b4, 0x00ff, 0x9686,
++      0x0005, 0x0510, 0x9686, 0x000b, 0x01c8, 0x2009, 0x026f, 0x2104,
++      0x9084, 0xff00, 0x1118, 0x9686, 0x0009, 0x01b0, 0x9086, 0x1900,
++      0x1168, 0x9686, 0x0009, 0x0180, 0x2001, 0x0004, 0x080c, 0x5b61,
++      0x2001, 0x0028, 0x601a, 0x6007, 0x0052, 0x0010, 0x080c, 0xa0dc,
++      0x002e, 0x00be, 0x009e, 0x0005, 0x9286, 0x0139, 0x0160, 0x6014,
++      0x2048, 0x080c, 0xb0ad, 0x0140, 0xa864, 0x9086, 0x0139, 0x0118,
++      0xa868, 0xd0fc, 0x0108, 0x0c50, 0x6010, 0x2058, 0xb840, 0x9084,
++      0x00ff, 0x9005, 0x0138, 0x8001, 0xb842, 0x601b, 0x000a, 0x6007,
++      0x0016, 0x08f0, 0xb8a0, 0x9086, 0x007e, 0x1138, 0x00e6, 0x2071,
++      0x1800, 0x080c, 0x5677, 0x00ee, 0x0010, 0x080c, 0x2d1a, 0x0870,
++      0x080c, 0xa2b9, 0x1160, 0x2001, 0x0004, 0x080c, 0x5b61, 0x6003,
++      0x0001, 0x6007, 0x0003, 0x080c, 0x7c1d, 0x0804, 0x8125, 0x080c,
++      0x9e99, 0x0804, 0xa0dc, 0x0469, 0x1160, 0x2001, 0x0008, 0x080c,
++      0x5b61, 0x6003, 0x0001, 0x6007, 0x0005, 0x080c, 0x7c1d, 0x0804,
++      0x8125, 0x0804, 0xa0dc, 0x00e9, 0x1160, 0x2001, 0x000a, 0x080c,
++      0x5b61, 0x6003, 0x0001, 0x6007, 0x0001, 0x080c, 0x7c1d, 0x0804,
++      0x8125, 0x0804, 0xa0dc, 0x2009, 0x026e, 0x2104, 0x9086, 0x0003,
++      0x1138, 0x2009, 0x026f, 0x2104, 0x9084, 0xff00, 0x9086, 0x2a00,
++      0x0005, 0x9085, 0x0001, 0x0005, 0x00b6, 0x00c6, 0x0016, 0x6110,
++      0x2158, 0x080c, 0x5c1c, 0x001e, 0x00ce, 0x00be, 0x0005, 0x00b6,
++      0x00f6, 0x00e6, 0x00d6, 0x0036, 0x0016, 0x6010, 0x2058, 0x2009,
++      0x1836, 0x2104, 0x9085, 0x0003, 0x200a, 0x080c, 0xa35f, 0x0560,
++      0x2009, 0x1836, 0x2104, 0xc0cd, 0x200a, 0x080c, 0x5f29, 0x0158,
++      0x9006, 0x2020, 0x2009, 0x002a, 0x080c, 0xc9c5, 0x2001, 0x180c,
++      0x200c, 0xc195, 0x2102, 0x2019, 0x002a, 0x2009, 0x0001, 0x080c,
++      0x2ce5, 0x00e6, 0x2071, 0x1800, 0x080c, 0x2b1e, 0x00ee, 0x00c6,
++      0x0156, 0x20a9, 0x0781, 0x2009, 0x007f, 0x080c, 0x2e11, 0x8108,
++      0x1f04, 0xa2fd, 0x015e, 0x00ce, 0x080c, 0xa2bc, 0x2071, 0x0260,
++      0x2079, 0x0200, 0x7817, 0x0001, 0x2001, 0x1836, 0x200c, 0xc1c5,
++      0x7018, 0xd0fc, 0x0110, 0xd0dc, 0x0118, 0x7038, 0xd0dc, 0x1108,
++      0xc1c4, 0x7817, 0x0000, 0x2001, 0x1836, 0x2102, 0x2079, 0x0100,
++      0x2e04, 0x9084, 0x00ff, 0x2069, 0x181d, 0x206a, 0x78e6, 0x0006,
++      0x8e70, 0x2e04, 0x2069, 0x181e, 0x206a, 0x78ea, 0x7832, 0x7836,
++      0x2010, 0x9084, 0xff00, 0x001e, 0x9105, 0x2009, 0x182a, 0x200a,
++      0x2200, 0x9084, 0x00ff, 0x2008, 0x080c, 0x2446, 0x080c, 0x6877,
++      0x0170, 0x2071, 0x0260, 0x2069, 0x194f, 0x7048, 0x206a, 0x704c,
++      0x6806, 0x7050, 0x680a, 0x7054, 0x680e, 0x080c, 0xb480, 0x0040,
++      0x2001, 0x0006, 0x080c, 0x5b61, 0x080c, 0x2d3f, 0x080c, 0x9554,
++      0x001e, 0x003e, 0x00de, 0x00ee, 0x00fe, 0x00be, 0x0005, 0x0096,
++      0x0026, 0x0036, 0x00e6, 0x0156, 0x2019, 0x182a, 0x231c, 0x83ff,
++      0x01f0, 0x2071, 0x0260, 0x7200, 0x9294, 0x00ff, 0x7004, 0x9084,
++      0xff00, 0x9205, 0x9306, 0x1198, 0x2011, 0x0276, 0x20a9, 0x0004,
++      0x2b48, 0x2019, 0x000a, 0x080c, 0xa439, 0x1148, 0x2011, 0x027a,
++      0x20a9, 0x0004, 0x2019, 0x0006, 0x080c, 0xa439, 0x1100, 0x015e,
++      0x00ee, 0x003e, 0x002e, 0x009e, 0x0005, 0x00e6, 0x2071, 0x0260,
++      0x7034, 0x9086, 0x0014, 0x11a8, 0x7038, 0x9086, 0x0800, 0x1188,
++      0x703c, 0xd0ec, 0x0160, 0x9084, 0x0f00, 0x9086, 0x0100, 0x1138,
++      0x7054, 0xd0a4, 0x1110, 0xd0ac, 0x0110, 0x9006, 0x0010, 0x9085,
++      0x0001, 0x00ee, 0x0005, 0x00e6, 0x0096, 0x00c6, 0x0076, 0x0056,
++      0x0046, 0x0026, 0x0006, 0x0126, 0x2091, 0x8000, 0x2029, 0x19bd,
++      0x252c, 0x2021, 0x19c3, 0x2424, 0x2061, 0x1cd0, 0x2071, 0x1800,
++      0x724c, 0x706c, 0x9202, 0x1a04, 0xa411, 0x080c, 0xc9f1, 0x0904,
++      0xa40a, 0x6720, 0x9786, 0x0007, 0x05e8, 0x2500, 0x9c06, 0x05d0,
++      0x2400, 0x9c06, 0x05b8, 0x3e08, 0x9186, 0x0002, 0x1148, 0x6010,
++      0x9005, 0x0130, 0x00b6, 0x2058, 0xb800, 0x00be, 0xd0bc, 0x1550,
++      0x00c6, 0x6000, 0x9086, 0x0004, 0x1110, 0x080c, 0x17b0, 0x9786,
++      0x0008, 0x1148, 0x080c, 0xb295, 0x1130, 0x00ce, 0x080c, 0x9e99,
++      0x080c, 0x9584, 0x00b8, 0x6014, 0x2048, 0x080c, 0xb0ad, 0x0178,
++      0x9786, 0x0003, 0x1500, 0x080c, 0xc810, 0x0110, 0xa867, 0x0103,
++      0xab7a, 0xa877, 0x0000, 0x080c, 0x619c, 0x080c, 0xb278, 0x080c,
++      0x9584, 0x00ce, 0x9ce0, 0x0018, 0x7060, 0x9c02, 0x1210, 0x0804,
++      0xa3c0, 0x012e, 0x000e, 0x002e, 0x004e, 0x005e, 0x007e, 0x00ce,
++      0x009e, 0x00ee, 0x0005, 0x9786, 0x0006, 0x1118, 0x080c, 0xc970,
++      0x0c30, 0x9786, 0x000a, 0x09e0, 0x08b0, 0x220c, 0x2304, 0x9106,
++      0x1130, 0x8210, 0x8318, 0x1f04, 0xa425, 0x9006, 0x0005, 0x2304,
++      0x9102, 0x0218, 0x2001, 0x0001, 0x0008, 0x9006, 0x918d, 0x0001,
++      0x0005, 0x0136, 0x01c6, 0x0016, 0x8906, 0x8006, 0x8007, 0x908c,
++      0x003f, 0x21e0, 0x9084, 0xffc0, 0x9300, 0x2098, 0x3518, 0x20a9,
++      0x0001, 0x220c, 0x4002, 0x910e, 0x1140, 0x8210, 0x8319, 0x1dc8,
++      0x9006, 0x001e, 0x01ce, 0x013e, 0x0005, 0x220c, 0x9102, 0x0218,
++      0x2001, 0x0001, 0x0010, 0x2001, 0x0000, 0x918d, 0x0001, 0x001e,
++      0x01ce, 0x013e, 0x0005, 0x6004, 0x908a, 0x0053, 0x1a0c, 0x0d84,
++      0x080c, 0xb284, 0x0120, 0x080c, 0xb295, 0x0168, 0x0028, 0x080c,
++      0x2d3f, 0x080c, 0xb295, 0x0138, 0x080c, 0x8026, 0x080c, 0x9554,
++      0x080c, 0x8125, 0x0005, 0x080c, 0x9e99, 0x0cb0, 0x9182, 0x0040,
++      0x0002, 0xa495, 0xa495, 0xa495, 0xa495, 0xa495, 0xa495, 0xa495,
++      0xa495, 0xa495, 0xa495, 0xa495, 0xa497, 0xa497, 0xa497, 0xa497,
++      0xa495, 0xa495, 0xa495, 0xa497, 0xa495, 0x080c, 0x0d84, 0x600b,
++      0xffff, 0x6003, 0x0001, 0x6106, 0x080c, 0x7bcb, 0x0126, 0x2091,
++      0x8000, 0x080c, 0x8125, 0x012e, 0x0005, 0x9186, 0x0013, 0x1128,
++      0x6004, 0x9082, 0x0040, 0x0804, 0xa536, 0x9186, 0x0027, 0x11f0,
++      0x080c, 0x8026, 0x080c, 0x2d1a, 0x080c, 0xb76c, 0x0096, 0x6114,
++      0x2148, 0x080c, 0xb0ad, 0x0168, 0xa867, 0x0103, 0xa87b, 0x0029,
++      0xa877, 0x0000, 0xa97c, 0xc1c5, 0xa97e, 0x080c, 0x61a9, 0x080c,
++      0xb278, 0x009e, 0x080c, 0x9554, 0x0804, 0x8125, 0x9186, 0x0014,
++      0x1120, 0x6004, 0x9082, 0x0040, 0x0440, 0x9186, 0x0046, 0x0150,
++      0x9186, 0x0045, 0x0138, 0x9186, 0x0053, 0x0120, 0x9186, 0x0048,
++      0x190c, 0x0d84, 0x2001, 0x0109, 0x2004, 0xd084, 0x01a8, 0x0126,
++      0x2091, 0x2800, 0x0006, 0x0016, 0x0026, 0x0036, 0x080c, 0x7ab7,
++      0x003e, 0x002e, 0x001e, 0x000e, 0x012e, 0xa001, 0x6000, 0x9086,
++      0x0002, 0x1110, 0x0804, 0xa574, 0x0005, 0x0002, 0xa514, 0xa512,
++      0xa512, 0xa512, 0xa512, 0xa512, 0xa512, 0xa512, 0xa512, 0xa512,
++      0xa512, 0xa52f, 0xa52f, 0xa52f, 0xa52f, 0xa512, 0xa52f, 0xa512,
++      0xa52f, 0xa512, 0x080c, 0x0d84, 0x080c, 0x8026, 0x0096, 0x6114,
++      0x2148, 0x080c, 0xb0ad, 0x0168, 0xa867, 0x0103, 0xa87b, 0x0006,
++      0xa877, 0x0000, 0xa880, 0xc0ec, 0xa882, 0x080c, 0x61a9, 0x080c,
++      0xb278, 0x009e, 0x080c, 0x9554, 0x080c, 0x8125, 0x0005, 0x080c,
++      0x8026, 0x080c, 0x9554, 0x080c, 0x8125, 0x0005, 0x0002, 0xa54d,
++      0xa54b, 0xa54b, 0xa54b, 0xa54b, 0xa54b, 0xa54b, 0xa54b, 0xa54b,
++      0xa54b, 0xa54b, 0xa564, 0xa564, 0xa564, 0xa564, 0xa54b, 0xa56e,
++      0xa54b, 0xa564, 0xa54b, 0x080c, 0x0d84, 0x0096, 0x080c, 0x8026,
++      0x6014, 0x2048, 0x2001, 0x1955, 0x2004, 0x6042, 0xa97c, 0xd1ac,
++      0x0140, 0x6003, 0x0004, 0xa87c, 0x9085, 0x0400, 0xa87e, 0x009e,
++      0x0005, 0x6003, 0x0002, 0x0cb8, 0x080c, 0x8026, 0x080c, 0xb76f,
++      0x080c, 0xb774, 0x6003, 0x000f, 0x0804, 0x8125, 0x080c, 0x8026,
++      0x080c, 0x9554, 0x0804, 0x8125, 0x9182, 0x0040, 0x0002, 0xa58b,
++      0xa58b, 0xa58b, 0xa58b, 0xa58b, 0xa58d, 0xa66a, 0xa58b, 0xa58b,
++      0xa58b, 0xa58b, 0xa58b, 0xa58b, 0xa58b, 0xa58b, 0xa58b, 0xa58b,
++      0xa58b, 0xa58b, 0xa69e, 0x080c, 0x0d84, 0x00b6, 0x0096, 0x6114,
++      0x2148, 0x7644, 0x96b4, 0x0fff, 0x86ff, 0x1528, 0x6010, 0x2058,
++      0xb800, 0xd0bc, 0x1904, 0xa659, 0xa87b, 0x0000, 0xa867, 0x0103,
++      0xae76, 0xa87c, 0xd0ac, 0x0128, 0xa834, 0xa938, 0x9115, 0x190c,
++      0xa82a, 0x080c, 0x5fda, 0x6210, 0x2258, 0xba3c, 0x82ff, 0x0110,
++      0x8211, 0xba3e, 0x7044, 0xd0e4, 0x1904, 0xa63d, 0x080c, 0x9554,
++      0x009e, 0x00be, 0x0005, 0x968c, 0x0c00, 0x0150, 0x6010, 0x2058,
++      0xb800, 0xd0bc, 0x1904, 0xa641, 0x7348, 0xab92, 0x734c, 0xab8e,
++      0x968c, 0x00ff, 0x9186, 0x0002, 0x0508, 0x9186, 0x0028, 0x1118,
++      0xa87b, 0x001c, 0x00e8, 0xd6dc, 0x01a0, 0xa87b, 0x0015, 0xa87c,
++      0xd0ac, 0x0170, 0xa938, 0xaa34, 0x2100, 0x9205, 0x0148, 0x7048,
++      0x9106, 0x1118, 0x704c, 0x9206, 0x0118, 0xa992, 0xaa8e, 0xc6dc,
++      0x0038, 0xd6d4, 0x0118, 0xa87b, 0x0007, 0x0010, 0xa87b, 0x0000,
++      0xa867, 0x0103, 0xae76, 0x901e, 0xd6c4, 0x01d8, 0x9686, 0x0100,
++      0x1130, 0x7064, 0x9005, 0x1118, 0xc6c4, 0x0804, 0xa594, 0x735c,
++      0xab86, 0x83ff, 0x0170, 0x938a, 0x0009, 0x0210, 0x2019, 0x0008,
++      0x0036, 0x2308, 0x2019, 0x0018, 0x2011, 0x0025, 0x080c, 0xace6,
++      0x003e, 0xd6cc, 0x0904, 0xa5a9, 0x7154, 0xa98a, 0x81ff, 0x0904,
++      0xa5a9, 0x9192, 0x0021, 0x1278, 0x8304, 0x9098, 0x0018, 0x2011,
++      0x0029, 0x080c, 0xace6, 0x2011, 0x0205, 0x2013, 0x0000, 0x080c,
++      0xb706, 0x0804, 0xa5a9, 0xa868, 0xd0fc, 0x0120, 0x2009, 0x0020,
++      0xa98a, 0x0c50, 0x00a6, 0x2950, 0x080c, 0xac85, 0x00ae, 0x080c,
++      0xb706, 0x080c, 0xacd6, 0x0804, 0xa5ab, 0x080c, 0xb37e, 0x0804,
++      0xa5b8, 0xa87c, 0xd0ac, 0x0904, 0xa5c4, 0xa880, 0xd0bc, 0x1904,
++      0xa5c4, 0x7348, 0xa838, 0x9306, 0x11c8, 0x734c, 0xa834, 0x931e,
++      0x0904, 0xa5c4, 0xd6d4, 0x0190, 0xab38, 0x9305, 0x0904, 0xa5c4,
++      0x0068, 0xa87c, 0xd0ac, 0x0904, 0xa59c, 0xa838, 0xa934, 0x9105,
++      0x0904, 0xa59c, 0xa880, 0xd0bc, 0x1904, 0xa59c, 0x080c, 0xb3ae,
++      0x0804, 0xa5b8, 0x0096, 0x00f6, 0x6003, 0x0003, 0x6007, 0x0043,
++      0x2079, 0x026c, 0x7c04, 0x7b00, 0x7e0c, 0x7d08, 0x6014, 0x2048,
++      0xa87c, 0xd0ac, 0x0140, 0x6003, 0x0002, 0x00fe, 0x009e, 0x0005,
++      0x2130, 0x2228, 0x0058, 0x2400, 0xa9ac, 0x910a, 0x2300, 0xaab0,
++      0x9213, 0x2600, 0x9102, 0x2500, 0x9203, 0x0e90, 0xac36, 0xab3a,
++      0xae46, 0xad4a, 0x00fe, 0x6043, 0x0000, 0x2c10, 0x080c, 0x18b7,
++      0x080c, 0x7c3a, 0x080c, 0x820b, 0x009e, 0x0005, 0x0005, 0x9182,
++      0x0040, 0x0002, 0xa6b6, 0xa6b6, 0xa6b6, 0xa6b6, 0xa6b6, 0xa6b8,
++      0xa74e, 0xa6b6, 0xa6b6, 0xa765, 0xa7f1, 0xa6b6, 0xa6b6, 0xa6b6,
++      0xa6b6, 0xa806, 0xa6b6, 0xa6b6, 0xa6b6, 0xa6b6, 0x080c, 0x0d84,
++      0x0076, 0x00a6, 0x00e6, 0x0096, 0x2071, 0x0260, 0x6114, 0x2150,
++      0x7644, 0xb676, 0x96b4, 0x0fff, 0xb77c, 0xc7e5, 0xb77e, 0x6210,
++      0x00b6, 0x2258, 0xba3c, 0x82ff, 0x0110, 0x8211, 0xba3e, 0x00be,
++      0x86ff, 0x0904, 0xa749, 0x9694, 0xff00, 0x9284, 0x0c00, 0x0120,
++      0x7048, 0xb092, 0x704c, 0xb08e, 0x9284, 0x0300, 0x0904, 0xa749,
++      0x080c, 0x0fae, 0x090c, 0x0d84, 0x2900, 0xb07a, 0xb77c, 0xc7cd,
++      0xb77e, 0xa867, 0x0103, 0xb068, 0xa86a, 0xb06c, 0xa86e, 0xb070,
++      0xa872, 0xae76, 0x968c, 0x0c00, 0x0120, 0x7348, 0xab92, 0x734c,
++      0xab8e, 0x968c, 0x00ff, 0x9186, 0x0002, 0x0180, 0x9186, 0x0028,
++      0x1118, 0xa87b, 0x001c, 0x0060, 0xd6dc, 0x0118, 0xa87b, 0x0015,
++      0x0038, 0xd6d4, 0x0118, 0xa87b, 0x0007, 0x0010, 0xa87b, 0x0000,
++      0xaf7e, 0xb080, 0xa882, 0xb084, 0xa886, 0x901e, 0xd6c4, 0x0190,
++      0x735c, 0xab86, 0x83ff, 0x0170, 0x938a, 0x0009, 0x0210, 0x2019,
++      0x0008, 0x0036, 0x2308, 0x2019, 0x0018, 0x2011, 0x0025, 0x080c,
++      0xace6, 0x003e, 0xd6cc, 0x01e8, 0x7154, 0xa98a, 0x81ff, 0x01c8,
++      0x9192, 0x0021, 0x1260, 0x8304, 0x9098, 0x0018, 0x2011, 0x0029,
++      0x080c, 0xace6, 0x2011, 0x0205, 0x2013, 0x0000, 0x0050, 0xb068,
++      0xd0fc, 0x0120, 0x2009, 0x0020, 0xa98a, 0x0c68, 0x2950, 0x080c,
++      0xac85, 0x009e, 0x00ee, 0x00ae, 0x007e, 0x0005, 0x00f6, 0x00a6,
++      0x6003, 0x0003, 0x2079, 0x026c, 0x7c04, 0x7b00, 0x7e0c, 0x7d08,
++      0x6014, 0x2050, 0xb436, 0xb33a, 0xb646, 0xb54a, 0x00ae, 0x00fe,
++      0x2c10, 0x080c, 0x18b7, 0x0804, 0x8b1d, 0x6003, 0x0002, 0x6004,
++      0x9086, 0x0040, 0x11c8, 0x0096, 0x6014, 0x2048, 0xa87c, 0xd0ac,
++      0x0160, 0x601c, 0xd084, 0x1130, 0x00f6, 0x2c00, 0x2078, 0x080c,
++      0x150d, 0x00fe, 0x6003, 0x0004, 0x0010, 0x6003, 0x0002, 0x009e,
++      0x080c, 0x8026, 0x080c, 0x8125, 0x0096, 0x2001, 0x1955, 0x2004,
++      0x6042, 0x080c, 0x80d6, 0x080c, 0x820b, 0x6114, 0x2148, 0xa97c,
++      0xd1e4, 0x0904, 0xa7ec, 0xd1cc, 0x05a8, 0xa978, 0xa868, 0xd0fc,
++      0x0538, 0x0016, 0xa87c, 0x0006, 0xa880, 0x0006, 0xa860, 0x20e8,
++      0xa85c, 0x9080, 0x0019, 0x20a0, 0x810e, 0x810e, 0x810f, 0x9184,
++      0x003f, 0x20e0, 0x9184, 0xffc0, 0x9080, 0x0019, 0x2098, 0x0156,
++      0x20a9, 0x0020, 0x4003, 0x015e, 0x000e, 0xa882, 0x000e, 0xa87e,
++      0x001e, 0xa874, 0x0006, 0x2148, 0x080c, 0x0f60, 0x001e, 0x0440,
++      0x0016, 0x080c, 0x0f60, 0x009e, 0xa974, 0x0016, 0x080c, 0xacd6,
++      0x001e, 0x00f0, 0xa867, 0x0103, 0xa974, 0x9184, 0x00ff, 0x90b6,
++      0x0002, 0x0180, 0x9086, 0x0028, 0x1118, 0xa87b, 0x001c, 0x0060,
++      0xd1dc, 0x0118, 0xa87b, 0x0015, 0x0038, 0xd1d4, 0x0118, 0xa87b,
++      0x0007, 0x0010, 0xa87b, 0x0000, 0x0016, 0x080c, 0x5fda, 0x001e,
++      0xd1e4, 0x1120, 0x080c, 0x9554, 0x009e, 0x0005, 0x080c, 0xb37e,
++      0x0cd8, 0x6004, 0x9086, 0x0040, 0x1120, 0x080c, 0x8026, 0x080c,
++      0x8125, 0x2019, 0x0001, 0x080c, 0x8dfe, 0x6003, 0x0002, 0x080c,
++      0xb774, 0x080c, 0x80d6, 0x080c, 0x820b, 0x0005, 0x6004, 0x9086,
++      0x0040, 0x1120, 0x080c, 0x8026, 0x080c, 0x8125, 0x080c, 0x80d6,
++      0x080c, 0x2d1a, 0x080c, 0xb76c, 0x0096, 0x6114, 0x2148, 0x080c,
++      0xb0ad, 0x0150, 0xa867, 0x0103, 0xa87b, 0x0029, 0xa877, 0x0000,
++      0x080c, 0x61a9, 0x080c, 0xb278, 0x009e, 0x080c, 0x9554, 0x080c,
++      0x820b, 0x0005, 0xa87b, 0x0015, 0xd1fc, 0x0138, 0xa87b, 0x0007,
++      0x8002, 0x8000, 0x810a, 0x9189, 0x0000, 0xa992, 0xa88e, 0x0005,
++      0x9182, 0x0040, 0x0002, 0xa84f, 0xa84f, 0xa84f, 0xa84f, 0xa84f,
++      0xa851, 0xa84f, 0xa84f, 0xa8f4, 0xa84f, 0xa84f, 0xa84f, 0xa84f,
++      0xa84f, 0xa84f, 0xa84f, 0xa84f, 0xa84f, 0xa84f, 0xaa22, 0x080c,
++      0x0d84, 0x0076, 0x00a6, 0x00e6, 0x0096, 0x2071, 0x0260, 0x6114,
++      0x2150, 0x7644, 0xb676, 0x96b4, 0x0fff, 0xb77c, 0xc7e5, 0xb77e,
++      0x6210, 0x00b6, 0x2258, 0xba3c, 0x82ff, 0x0110, 0x8211, 0xba3e,
++      0x00be, 0x86ff, 0x0904, 0xa8ed, 0x9694, 0xff00, 0x9284, 0x0c00,
++      0x0120, 0x7048, 0xb092, 0x704c, 0xb08e, 0x9284, 0x0300, 0x0904,
++      0xa8ed, 0x9686, 0x0100, 0x1130, 0x7064, 0x9005, 0x1118, 0xc6c4,
++      0xb676, 0x0c38, 0x080c, 0x0fae, 0x090c, 0x0d84, 0x2900, 0xb07a,
++      0xb77c, 0x97bd, 0x0200, 0xb77e, 0xa867, 0x0103, 0xb068, 0xa86a,
++      0xb06c, 0xa86e, 0xb070, 0xa872, 0x7044, 0x9084, 0xf000, 0x9635,
++      0xae76, 0x968c, 0x0c00, 0x0120, 0x7348, 0xab92, 0x734c, 0xab8e,
++      0x968c, 0x00ff, 0x9186, 0x0002, 0x0180, 0x9186, 0x0028, 0x1118,
++      0xa87b, 0x001c, 0x0060, 0xd6dc, 0x0118, 0xa87b, 0x0015, 0x0038,
++      0xd6d4, 0x0118, 0xa87b, 0x0007, 0x0010, 0xa87b, 0x0000, 0xaf7e,
++      0xb080, 0xa882, 0xb084, 0xa886, 0x901e, 0xd6c4, 0x0190, 0x735c,
++      0xab86, 0x83ff, 0x0170, 0x938a, 0x0009, 0x0210, 0x2019, 0x0008,
++      0x0036, 0x2308, 0x2019, 0x0018, 0x2011, 0x0025, 0x080c, 0xace6,
++      0x003e, 0xd6cc, 0x01d0, 0x7154, 0xa98a, 0x81ff, 0x01b0, 0x9192,
++      0x0021, 0x1260, 0x8304, 0x9098, 0x0018, 0x2011, 0x0029, 0x080c,
++      0xace6, 0x2011, 0x0205, 0x2013, 0x0000, 0x0038, 0xb068, 0xd0fc,
++      0x0120, 0x2009, 0x0020, 0xa98a, 0x0c68, 0x080c, 0x178e, 0x009e,
++      0x00ee, 0x00ae, 0x007e, 0x0005, 0x2001, 0x1955, 0x2004, 0x6042,
++      0x0096, 0x6114, 0x2148, 0xa83c, 0xa940, 0x9105, 0x1118, 0xa87c,
++      0xc0dc, 0xa87e, 0x6003, 0x0002, 0xa97c, 0xd1e4, 0x0904, 0xaa1d,
++      0x6043, 0x0000, 0x6010, 0x00b6, 0x2058, 0xb800, 0x00be, 0xd0bc,
++      0x11f8, 0xd1cc, 0x0904, 0xa9ec, 0xa978, 0xa868, 0xd0fc, 0x0904,
++      0xa9ad, 0x0016, 0xa87c, 0x0006, 0xa880, 0x0006, 0x00a6, 0x2150,
++      0xb174, 0x9184, 0x00ff, 0x90b6, 0x0002, 0x0904, 0xa97b, 0x9086,
++      0x0028, 0x15e8, 0xa87b, 0x001c, 0xb07b, 0x001c, 0x0804, 0xa983,
++      0x6024, 0xd0f4, 0x11d0, 0xa838, 0xaa34, 0x9205, 0x09d0, 0xa838,
++      0xaa90, 0x9206, 0x1120, 0xa88c, 0xaa34, 0x9206, 0x0990, 0x6024,
++      0xd0d4, 0x1148, 0xa9ac, 0xa834, 0x9102, 0x603a, 0xa9b0, 0xa838,
++      0x9103, 0x603e, 0x6024, 0xc0f5, 0x6026, 0x6010, 0x00b6, 0x2058,
++      0xb83c, 0x8000, 0xb83e, 0x00be, 0x9006, 0xa876, 0xa892, 0xa88e,
++      0xa87c, 0xc0e4, 0xa87e, 0xd0cc, 0x0130, 0x0096, 0xa878, 0x2048,
++      0x080c, 0x0f60, 0x009e, 0x080c, 0xb3ae, 0x0804, 0xaa1d, 0xd1dc,
++      0x0158, 0xa87b, 0x0015, 0xb07b, 0x0015, 0x080c, 0xb62d, 0x0118,
++      0xb174, 0xc1dc, 0xb176, 0x0078, 0xd1d4, 0x0128, 0xa87b, 0x0007,
++      0xb07b, 0x0007, 0x0040, 0xa87c, 0xd0ac, 0x0128, 0xa834, 0xa938,
++      0x9115, 0x190c, 0xa82a, 0xa87c, 0xb07e, 0xa890, 0xb092, 0xa88c,
++      0xb08e, 0xa860, 0x20e8, 0xa85c, 0x9080, 0x0019, 0x20a0, 0x20a9,
++      0x0020, 0x8a06, 0x8006, 0x8007, 0x9094, 0x003f, 0x22e0, 0x9084,
++      0xffc0, 0x9080, 0x0019, 0x2098, 0x4003, 0x00ae, 0x000e, 0xa882,
++      0x000e, 0xa87e, 0x080c, 0xb706, 0x001e, 0xa874, 0x0006, 0x2148,
++      0x080c, 0x0f60, 0x001e, 0x0804, 0xaa19, 0x0016, 0x00a6, 0x2150,
++      0xb174, 0x9184, 0x00ff, 0x90b6, 0x0002, 0x01e0, 0x9086, 0x0028,
++      0x1128, 0xa87b, 0x001c, 0xb07b, 0x001c, 0x00e0, 0xd1dc, 0x0158,
++      0xa87b, 0x0015, 0xb07b, 0x0015, 0x080c, 0xb62d, 0x0118, 0xb174,
++      0xc1dc, 0xb176, 0x0078, 0xd1d4, 0x0128, 0xa87b, 0x0007, 0xb07b,
++      0x0007, 0x0040, 0xa87c, 0xd0ac, 0x0128, 0xa834, 0xa938, 0x9115,
++      0x190c, 0xa82a, 0xa890, 0xb092, 0xa88c, 0xb08e, 0xa87c, 0xb07e,
++      0x00ae, 0x080c, 0x0f60, 0x009e, 0x080c, 0xb706, 0xa974, 0x0016,
++      0x080c, 0xacd6, 0x001e, 0x0468, 0xa867, 0x0103, 0xa974, 0x9184,
++      0x00ff, 0x90b6, 0x0002, 0x01b0, 0x9086, 0x0028, 0x1118, 0xa87b,
++      0x001c, 0x00d0, 0xd1dc, 0x0148, 0xa87b, 0x0015, 0x080c, 0xb62d,
++      0x0118, 0xa974, 0xc1dc, 0xa976, 0x0078, 0xd1d4, 0x0118, 0xa87b,
++      0x0007, 0x0050, 0xa87b, 0x0000, 0xa87c, 0xd0ac, 0x0128, 0xa834,
++      0xa938, 0x9115, 0x190c, 0xa82a, 0xa974, 0x0016, 0x080c, 0x5fda,
++      0x001e, 0xd1e4, 0x1120, 0x080c, 0x9554, 0x009e, 0x0005, 0x080c,
++      0xb37e, 0x0cd8, 0x6114, 0x0096, 0x2148, 0xa97c, 0xd1e4, 0x190c,
++      0x179c, 0x009e, 0x0005, 0x080c, 0x8026, 0x0010, 0x080c, 0x80d6,
++      0x080c, 0xb0ad, 0x01c0, 0x0096, 0x6114, 0x2148, 0xa867, 0x0103,
++      0x2009, 0x180c, 0x210c, 0xd18c, 0x11b8, 0xd184, 0x1190, 0x6108,
++      0xa97a, 0x918e, 0x0029, 0x1110, 0x080c, 0xcc6b, 0xa877, 0x0000,
++      0x080c, 0x61a9, 0x009e, 0x080c, 0x9554, 0x080c, 0x8125, 0x0804,
++      0x820b, 0xa87b, 0x0004, 0x0c90, 0xa87b, 0x0004, 0x0c78, 0x9182,
++      0x0040, 0x0002, 0xaa6e, 0xaa6e, 0xaa6e, 0xaa6e, 0xaa6e, 0xaa70,
++      0xaa6e, 0xaa6e, 0xaa6e, 0xaa6e, 0xaa6e, 0xaa6e, 0xaa6e, 0xaa6e,
++      0xaa6e, 0xaa6e, 0xaa6e, 0xaa6e, 0xaa6e, 0xaa6e, 0x080c, 0x0d84,
++      0x080c, 0x4df2, 0x01f8, 0x6014, 0x7144, 0x918c, 0x0fff, 0x9016,
++      0xd1c4, 0x0118, 0x7264, 0x9294, 0x00ff, 0x0096, 0x904d, 0x0188,
++      0xa87b, 0x0000, 0xa864, 0x9086, 0x0139, 0x0128, 0xa867, 0x0103,
++      0xa976, 0xaa96, 0x0030, 0xa897, 0x4000, 0xa99a, 0xaa9e, 0x080c,
++      0x61a9, 0x009e, 0x0804, 0x9554, 0x9182, 0x0085, 0x0002, 0xaaa6,
++      0xaaa4, 0xaaa4, 0xaab2, 0xaaa4, 0xaaa4, 0xaaa4, 0xaaa4, 0xaaa4,
++      0xaaa4, 0xaaa4, 0xaaa4, 0xaaa4, 0x080c, 0x0d84, 0x6003, 0x0001,
++      0x6106, 0x080c, 0x7bcb, 0x0126, 0x2091, 0x8000, 0x080c, 0x8125,
++      0x012e, 0x0005, 0x0026, 0x0056, 0x00d6, 0x00e6, 0x2071, 0x0260,
++      0x7224, 0x6216, 0x7220, 0x080c, 0xb09b, 0x01a0, 0x2268, 0x6800,
++      0x9086, 0x0000, 0x0178, 0x6010, 0x6d10, 0x952e, 0x1158, 0x00c6,
++      0x2d60, 0x080c, 0xad11, 0x00ce, 0x0128, 0x6803, 0x0002, 0x6007,
++      0x0086, 0x0010, 0x6007, 0x0087, 0x6003, 0x0001, 0x080c, 0x7bcb,
++      0x080c, 0x8125, 0x9280, 0x0004, 0x00b6, 0x2058, 0xb800, 0x00be,
++      0xd0bc, 0x0140, 0x6824, 0xd0ec, 0x0128, 0x00c6, 0x2260, 0x080c,
++      0xb3ae, 0x00ce, 0x00ee, 0x00de, 0x005e, 0x002e, 0x0005, 0x9186,
++      0x0013, 0x1160, 0x6004, 0x908a, 0x0085, 0x0a0c, 0x0d84, 0x908a,
++      0x0092, 0x1a0c, 0x0d84, 0x9082, 0x0085, 0x006a, 0x9186, 0x0027,
++      0x0120, 0x9186, 0x0014, 0x190c, 0x0d84, 0x080c, 0x8026, 0x080c,
++      0x9584, 0x0804, 0x8125, 0xab18, 0xab1a, 0xab1a, 0xab18, 0xab18,
++      0xab18, 0xab18, 0xab18, 0xab18, 0xab18, 0xab18, 0xab18, 0xab18,
++      0x080c, 0x0d84, 0x080c, 0x8026, 0x080c, 0x9584, 0x080c, 0x8125,
++      0x0005, 0x9186, 0x0013, 0x1128, 0x6004, 0x9082, 0x0085, 0x2008,
++      0x04b8, 0x9186, 0x0027, 0x11f8, 0x080c, 0x8026, 0x080c, 0x2d1a,
++      0x080c, 0xb76c, 0x0096, 0x6014, 0x2048, 0x080c, 0xb0ad, 0x0150,
++      0xa867, 0x0103, 0xa877, 0x0000, 0xa87b, 0x0029, 0x080c, 0x61a9,
++      0x080c, 0xb278, 0x009e, 0x080c, 0x9554, 0x080c, 0x8125, 0x0005,
++      0x080c, 0x95e9, 0x0ce0, 0x9186, 0x0014, 0x1dd0, 0x080c, 0x8026,
++      0x0096, 0x6014, 0x2048, 0x080c, 0xb0ad, 0x0d60, 0xa867, 0x0103,
++      0xa877, 0x0000, 0xa87b, 0x0006, 0xa880, 0xc0ec, 0xa882, 0x08f0,
++      0x0002, 0xab70, 0xab6e, 0xab6e, 0xab6e, 0xab6e, 0xab6e, 0xab88,
++      0xab6e, 0xab6e, 0xab6e, 0xab6e, 0xab6e, 0xab6e, 0x080c, 0x0d84,
++      0x080c, 0x8026, 0x6034, 0x908c, 0xff00, 0x810f, 0x9186, 0x0039,
++      0x0118, 0x9186, 0x0035, 0x1118, 0x2001, 0x1953, 0x0010, 0x2001,
++      0x1954, 0x2004, 0x601a, 0x6003, 0x000c, 0x080c, 0x8125, 0x0005,
++      0x080c, 0x8026, 0x6034, 0x908c, 0xff00, 0x810f, 0x9186, 0x0039,
++      0x0118, 0x9186, 0x0035, 0x1118, 0x2001, 0x1953, 0x0010, 0x2001,
++      0x1954, 0x2004, 0x601a, 0x6003, 0x000e, 0x080c, 0x8125, 0x0005,
++      0x9182, 0x0092, 0x1220, 0x9182, 0x0085, 0x0208, 0x0012, 0x0804,
++      0x95e9, 0xabb6, 0xabb6, 0xabb6, 0xabb6, 0xabb8, 0xac05, 0xabb6,
++      0xabb6, 0xabb6, 0xabb6, 0xabb6, 0xabb6, 0xabb6, 0x080c, 0x0d84,
++      0x0096, 0x6010, 0x00b6, 0x2058, 0xb800, 0x00be, 0xd0bc, 0x0168,
++      0x6034, 0x908c, 0xff00, 0x810f, 0x9186, 0x0039, 0x0118, 0x9186,
++      0x0035, 0x1118, 0x009e, 0x0804, 0xac19, 0x080c, 0xb0ad, 0x1118,
++      0x080c, 0xb278, 0x0068, 0x6014, 0x2048, 0xa87c, 0xd0e4, 0x1110,
++      0x080c, 0xb278, 0xa867, 0x0103, 0x080c, 0xb739, 0x080c, 0x61a9,
++      0x00d6, 0x2c68, 0x080c, 0x94fe, 0x01d0, 0x6003, 0x0001, 0x6007,
++      0x001e, 0x600b, 0xffff, 0x2009, 0x026e, 0x210c, 0x613a, 0x2009,
++      0x026f, 0x210c, 0x613e, 0x6910, 0x6112, 0x080c, 0xb4e6, 0x6954,
++      0x6156, 0x6023, 0x0001, 0x080c, 0x7bcb, 0x080c, 0x8125, 0x2d60,
++      0x00de, 0x080c, 0x9554, 0x009e, 0x0005, 0x6010, 0x00b6, 0x2058,
++      0xb800, 0x00be, 0xd0bc, 0x0598, 0x6034, 0x908c, 0xff00, 0x810f,
++      0x9186, 0x0035, 0x0130, 0x9186, 0x001e, 0x0118, 0x9186, 0x0039,
++      0x1530, 0x00d6, 0x2c68, 0x080c, 0xb6d9, 0x1904, 0xac5e, 0x080c,
++      0x94fe, 0x01d8, 0x6106, 0x6003, 0x0001, 0x6023, 0x0001, 0x6910,
++      0x6112, 0x692c, 0x612e, 0x6930, 0x6132, 0x6934, 0x918c, 0x00ff,
++      0x6136, 0x6938, 0x613a, 0x693c, 0x613e, 0x6954, 0x6156, 0x080c,
++      0xb4e6, 0x080c, 0x7bcb, 0x080c, 0x8125, 0x2d60, 0x00f8, 0x0096,
++      0x6014, 0x2048, 0x080c, 0xb0ad, 0x01c8, 0xa867, 0x0103, 0xa880,
++      0xd0b4, 0x0128, 0xc0ec, 0xa882, 0xa87b, 0x0006, 0x0048, 0xd0bc,
++      0x0118, 0xa87b, 0x0002, 0x0020, 0xa87b, 0x0005, 0x080c, 0xb37a,
++      0xa877, 0x0000, 0x080c, 0x61a9, 0x080c, 0xb278, 0x009e, 0x0804,
++      0x9554, 0x0016, 0x0096, 0x6014, 0x2048, 0x080c, 0xb0ad, 0x0140,
++      0xa867, 0x0103, 0xa87b, 0x0028, 0xa877, 0x0000, 0x080c, 0x61a9,
++      0x009e, 0x001e, 0x9186, 0x0013, 0x0148, 0x9186, 0x0014, 0x0130,
++      0x9186, 0x0027, 0x0118, 0x080c, 0x95e9, 0x0030, 0x080c, 0x8026,
++      0x080c, 0x9584, 0x080c, 0x8125, 0x0005, 0x0056, 0x0066, 0x0096,
++      0x00a6, 0x2029, 0x0001, 0x9182, 0x0101, 0x1208, 0x0010, 0x2009,
++      0x0100, 0x2130, 0x8304, 0x9098, 0x0018, 0x2009, 0x0020, 0x2011,
++      0x0029, 0x080c, 0xace6, 0x96b2, 0x0020, 0xb004, 0x904d, 0x0110,
++      0x080c, 0x0f60, 0x080c, 0x0fae, 0x0520, 0x8528, 0xa867, 0x0110,
++      0xa86b, 0x0000, 0x2920, 0xb406, 0x968a, 0x003d, 0x1228, 0x2608,
++      0x2011, 0x001b, 0x0499, 0x00a8, 0x96b2, 0x003c, 0x2009, 0x003c,
++      0x2950, 0x2011, 0x001b, 0x0451, 0x0c28, 0x2001, 0x0205, 0x2003,
++      0x0000, 0x00ae, 0x852f, 0x95ad, 0x0003, 0xb566, 0x95ac, 0x0000,
++      0x0048, 0x2001, 0x0205, 0x2003, 0x0000, 0x00ae, 0x852f, 0x95ad,
++      0x0003, 0xb566, 0x009e, 0x006e, 0x005e, 0x0005, 0x00a6, 0x89ff,
++      0x0158, 0xa804, 0x9055, 0x0130, 0xa807, 0x0000, 0x080c, 0x61a9,
++      0x2a48, 0x0cb8, 0x080c, 0x61a9, 0x00ae, 0x0005, 0x00f6, 0x2079,
++      0x0200, 0x7814, 0x9085, 0x0080, 0x7816, 0xd184, 0x0108, 0x8108,
++      0x810c, 0x20a9, 0x0001, 0xa860, 0x20e8, 0xa85c, 0x9200, 0x20a0,
++      0x20e1, 0x0000, 0x2300, 0x9e00, 0x2098, 0x4003, 0x8318, 0x9386,
++      0x0020, 0x1148, 0x2018, 0x2300, 0x9e00, 0x2098, 0x7814, 0x8000,
++      0x9085, 0x0080, 0x7816, 0x8109, 0x1d80, 0x7817, 0x0000, 0x00fe,
++      0x0005, 0x0066, 0x0126, 0x2091, 0x8000, 0x2031, 0x0001, 0x6020,
++      0x9084, 0x000f, 0x0083, 0x012e, 0x006e, 0x0005, 0x0126, 0x2091,
++      0x8000, 0x0066, 0x2031, 0x0000, 0x6020, 0x9084, 0x000f, 0x001b,
++      0x006e, 0x012e, 0x0005, 0xad4c, 0xad4c, 0xad47, 0xad6e, 0xad3a,
++      0xad47, 0xad6e, 0xad47, 0xad3a, 0xad3a, 0xad47, 0xad47, 0xad47,
++      0xad3a, 0xad3a, 0x080c, 0x0d84, 0x0036, 0x2019, 0x0010, 0x080c,
++      0xc58e, 0x6023, 0x0006, 0x6003, 0x0007, 0x003e, 0x0005, 0x9006,
++      0x0005, 0x9085, 0x0001, 0x0005, 0x0096, 0x86ff, 0x11d8, 0x6014,
++      0x2048, 0x080c, 0xb0ad, 0x01c0, 0xa864, 0x9086, 0x0139, 0x1128,
++      0xa87b, 0x0005, 0xa883, 0x0000, 0x0028, 0x900e, 0x2001, 0x0005,
++      0x080c, 0x63d1, 0x080c, 0xb37a, 0x080c, 0x61a9, 0x080c, 0x9584,
++      0x9085, 0x0001, 0x009e, 0x0005, 0x9006, 0x0ce0, 0x6000, 0x908a,
++      0x0016, 0x1a0c, 0x0d84, 0x0002, 0xad84, 0xada9, 0xad86, 0xadc7,
++      0xada4, 0xad84, 0xad47, 0xad4c, 0xad4c, 0xad47, 0xad47, 0xad47,
++      0xad47, 0xad47, 0xad47, 0xad47, 0x080c, 0x0d84, 0x86ff, 0x11c8,
++      0x6020, 0x9086, 0x0006, 0x01a8, 0x0096, 0x6014, 0x2048, 0x080c,
++      0xb0ad, 0x0110, 0x080c, 0xb37a, 0x009e, 0x080c, 0xb71b, 0x6007,
++      0x0085, 0x6003, 0x000b, 0x6023, 0x0002, 0x080c, 0x7bcb, 0x080c,
++      0x8125, 0x9085, 0x0001, 0x0005, 0x0066, 0x080c, 0x17b0, 0x006e,
++      0x08e8, 0x00e6, 0x2071, 0x19b4, 0x7024, 0x9c06, 0x1110, 0x080c,
++      0x8d59, 0x6020, 0x9084, 0x000f, 0x9086, 0x0006, 0x1150, 0x0086,
++      0x0096, 0x2049, 0x0001, 0x2c40, 0x080c, 0x8ef6, 0x009e, 0x008e,
++      0x0010, 0x080c, 0x8c6a, 0x00ee, 0x1908, 0x0804, 0xad47, 0x0036,
++      0x00e6, 0x2071, 0x19b4, 0x703c, 0x9c06, 0x1138, 0x901e, 0x080c,
++      0x8dfe, 0x00ee, 0x003e, 0x0804, 0xad86, 0x080c, 0x901f, 0x00ee,
++      0x003e, 0x1904, 0xad86, 0x0804, 0xad47, 0x00c6, 0x6020, 0x9084,
++      0x000f, 0x0013, 0x00ce, 0x0005, 0xadfa, 0xaea2, 0xaff8, 0xae04,
++      0x9584, 0xadfa, 0xc580, 0xb779, 0xaea2, 0xadf3, 0xb077, 0xadf3,
++      0xadf3, 0xadf3, 0xadf3, 0x080c, 0x0d84, 0x080c, 0xb295, 0x1110,
++      0x080c, 0x9e99, 0x0005, 0x080c, 0x8026, 0x080c, 0x8125, 0x0804,
++      0x9554, 0x601b, 0x0001, 0x0005, 0x080c, 0xb0ad, 0x0130, 0x6014,
++      0x0096, 0x2048, 0x2c00, 0xa896, 0x009e, 0x6000, 0x908a, 0x0016,
++      0x1a0c, 0x0d84, 0x0002, 0xae23, 0xae25, 0xae49, 0xae5d, 0xae81,
++      0xae23, 0xadfa, 0xadfa, 0xadfa, 0xae5d, 0xae5d, 0xae23, 0xae23,
++      0xae23, 0xae23, 0xae67, 0x080c, 0x0d84, 0x00e6, 0x6014, 0x0096,
++      0x2048, 0xa880, 0xc0b5, 0xa882, 0x009e, 0x2071, 0x19b4, 0x7024,
++      0x9c06, 0x01a0, 0x080c, 0x8c6a, 0x080c, 0xb71b, 0x6007, 0x0085,
++      0x6003, 0x000b, 0x6023, 0x0002, 0x2001, 0x1954, 0x2004, 0x601a,
++      0x080c, 0x7bcb, 0x080c, 0x8125, 0x00ee, 0x0005, 0x601b, 0x0001,
++      0x0cd8, 0x0096, 0x6014, 0x2048, 0xa880, 0xc0b5, 0xa882, 0x009e,
++      0x080c, 0xb71b, 0x6007, 0x0085, 0x6003, 0x000b, 0x6023, 0x0002,
++      0x080c, 0x7bcb, 0x080c, 0x8125, 0x0005, 0x0096, 0x601b, 0x0001,
++      0x6014, 0x2048, 0xa880, 0xc0b5, 0xa882, 0x009e, 0x0005, 0x080c,
++      0x4df2, 0x01a8, 0x6014, 0x0096, 0x904d, 0x0180, 0xa864, 0xa867,
++      0x0103, 0xa87b, 0x0006, 0x9086, 0x0139, 0x1140, 0xa867, 0x0139,
++      0xa897, 0x4005, 0xa89b, 0x0004, 0x080c, 0x61a9, 0x009e, 0x0804,
++      0x9554, 0x6014, 0x0096, 0x904d, 0x01c0, 0xa97c, 0xd1e4, 0x01a8,
++      0xa884, 0x009e, 0x8003, 0x800b, 0x810b, 0x9108, 0x611a, 0x2001,
++      0x0037, 0x2c08, 0x080c, 0x1492, 0x6000, 0x9086, 0x0004, 0x1120,
++      0x2009, 0x0048, 0x080c, 0x95ce, 0x0005, 0x009e, 0x080c, 0x17b0,
++      0x0804, 0xae49, 0x6000, 0x908a, 0x0016, 0x1a0c, 0x0d84, 0x000b,
++      0x0005, 0xaeb9, 0xae01, 0xaebb, 0xaeb9, 0xaebb, 0xaebb, 0xadfb,
++      0xaeb9, 0xadf5, 0xadf5, 0xaeb9, 0xaeb9, 0xaeb9, 0xaeb9, 0xaeb9,
++      0xaeb9, 0x080c, 0x0d84, 0x6010, 0x00b6, 0x2058, 0xb804, 0x9084,
++      0x00ff, 0x00be, 0x908a, 0x000c, 0x1a0c, 0x0d84, 0x00b6, 0x0013,
++      0x00be, 0x0005, 0xaed6, 0xaf92, 0xaed8, 0xaf13, 0xaed8, 0xaf13,
++      0xaed8, 0xaee6, 0xaed6, 0xaf13, 0xaed6, 0xaf02, 0x080c, 0x0d84,
++      0x6004, 0x908e, 0x0016, 0x0598, 0x908e, 0x0004, 0x0580, 0x908e,
++      0x0002, 0x0568, 0x908e, 0x0052, 0x0904, 0xaf8e, 0x6004, 0x080c,
++      0xb295, 0x0904, 0xafab, 0x908e, 0x0021, 0x0904, 0xafaf, 0x908e,
++      0x0022, 0x0904, 0xaff3, 0x908e, 0x003d, 0x0904, 0xafaf, 0x908e,
++      0x0039, 0x0904, 0xafb3, 0x908e, 0x0035, 0x0904, 0xafb3, 0x908e,
++      0x001e, 0x0178, 0x908e, 0x0001, 0x1140, 0x6010, 0x2058, 0xb804,
++      0x9084, 0x00ff, 0x9086, 0x0006, 0x0110, 0x080c, 0x2d1a, 0x080c,
++      0x9e99, 0x0804, 0x9584, 0x00c6, 0x00d6, 0x6104, 0x9186, 0x0016,
++      0x0904, 0xaf7f, 0x9186, 0x0002, 0x15b8, 0x2001, 0x1836, 0x2004,
++      0xd08c, 0x1178, 0x080c, 0x6877, 0x1160, 0x2001, 0x194c, 0x2003,
++      0x0001, 0x2001, 0x1800, 0x2003, 0x0001, 0x080c, 0x67be, 0x0804,
++      0xafdc, 0x6010, 0x2058, 0x2001, 0x1836, 0x2004, 0xd0ac, 0x1904,
++      0xafdc, 0xb8a0, 0xd0bc, 0x1904, 0xafdc, 0xb840, 0x9084, 0x00ff,
++      0x9005, 0x0190, 0x8001, 0xb842, 0x6017, 0x0000, 0x6023, 0x0007,
++      0x601b, 0x0398, 0x6043, 0x0000, 0x080c, 0x94fe, 0x0128, 0x2b00,
++      0x6012, 0x6023, 0x0001, 0x0458, 0x00de, 0x00ce, 0x6004, 0x908e,
++      0x0002, 0x11a0, 0x6010, 0x2058, 0xb8a0, 0x9086, 0x007e, 0x1170,
++      0x2009, 0x1836, 0x2104, 0xc085, 0x200a, 0x00e6, 0x2071, 0x1800,
++      0x080c, 0x5677, 0x00ee, 0x080c, 0x9e99, 0x0030, 0x080c, 0x9e99,
++      0x080c, 0x2d1a, 0x080c, 0xb76c, 0x00e6, 0x0126, 0x2091, 0x8000,
++      0x080c, 0x2d3f, 0x012e, 0x00ee, 0x080c, 0x9584, 0x0005, 0x2001,
++      0x0002, 0x080c, 0x5b61, 0x6003, 0x0001, 0x6007, 0x0002, 0x080c,
++      0x7c1d, 0x080c, 0x8125, 0x00de, 0x00ce, 0x0c80, 0x080c, 0x2d3f,
++      0x0804, 0xaf0f, 0x00c6, 0x00d6, 0x6104, 0x9186, 0x0016, 0x0d38,
++      0x6010, 0x2058, 0xb840, 0x9084, 0x00ff, 0x9005, 0x0904, 0xaf54,
++      0x8001, 0xb842, 0x6003, 0x0001, 0x080c, 0x7c1d, 0x080c, 0x8125,
++      0x00de, 0x00ce, 0x0898, 0x080c, 0x9e99, 0x0804, 0xaf11, 0x080c,
++      0x9ed5, 0x0804, 0xaf11, 0x00d6, 0x2c68, 0x6104, 0x080c, 0xb6d9,
++      0x00de, 0x0118, 0x080c, 0x9554, 0x00f0, 0x6004, 0x8007, 0x6134,
++      0x918c, 0x00ff, 0x9105, 0x6036, 0x6007, 0x0085, 0x6003, 0x000b,
++      0x6023, 0x0002, 0x603c, 0x600a, 0x2001, 0x1954, 0x2004, 0x601a,
++      0x602c, 0x2c08, 0x2060, 0x6024, 0xc0b5, 0x6026, 0x2160, 0x080c,
++      0x7bcb, 0x080c, 0x8125, 0x0005, 0x00de, 0x00ce, 0x080c, 0x9e99,
++      0x080c, 0x2d1a, 0x00e6, 0x0126, 0x2091, 0x8000, 0x080c, 0x2d3f,
++      0x6017, 0x0000, 0x6023, 0x0007, 0x601b, 0x0398, 0x6043, 0x0000,
++      0x012e, 0x00ee, 0x0005, 0x080c, 0x994c, 0x1904, 0xafab, 0x0005,
++      0x6000, 0x908a, 0x0016, 0x1a0c, 0x0d84, 0x0096, 0x00d6, 0x001b,
++      0x00de, 0x009e, 0x0005, 0xb013, 0xb013, 0xb013, 0xb013, 0xb013,
++      0xb013, 0xb013, 0xb013, 0xb013, 0xadfa, 0xb013, 0xae01, 0xb015,
++      0xae01, 0xb022, 0xb013, 0x080c, 0x0d84, 0x6004, 0x9086, 0x008b,
++      0x0148, 0x6007, 0x008b, 0x6003, 0x000d, 0x080c, 0x7bcb, 0x080c,
++      0x8125, 0x0005, 0x080c, 0xb74d, 0x0118, 0x080c, 0xb75e, 0x0010,
++      0x080c, 0xb76c, 0x080c, 0xb278, 0x080c, 0xb0ad, 0x0570, 0x080c,
++      0x2d1a, 0x080c, 0xb0ad, 0x0168, 0x6014, 0x2048, 0xa867, 0x0103,
++      0xa87b, 0x0006, 0xa877, 0x0000, 0xa880, 0xc0ed, 0xa882, 0x080c,
++      0x61a9, 0x2c68, 0x080c, 0x94fe, 0x0150, 0x6810, 0x6012, 0x080c,
++      0xb4e6, 0x00c6, 0x2d60, 0x080c, 0x9584, 0x00ce, 0x0008, 0x2d60,
++      0x6017, 0x0000, 0x6023, 0x0001, 0x6007, 0x0001, 0x6003, 0x0001,
++      0x080c, 0x7c1d, 0x080c, 0x8125, 0x00c8, 0x080c, 0xb74d, 0x0138,
++      0x6034, 0x9086, 0x4000, 0x1118, 0x080c, 0x2d1a, 0x08d0, 0x6034,
++      0x908c, 0xff00, 0x810f, 0x9186, 0x0039, 0x0118, 0x9186, 0x0035,
++      0x1118, 0x080c, 0x2d1a, 0x0868, 0x080c, 0x9584, 0x0005, 0x6000,
++      0x908a, 0x0016, 0x1a0c, 0x0d84, 0x0002, 0xb08d, 0xb08d, 0xb08f,
++      0xb08f, 0xb08f, 0xb08d, 0xb08d, 0xb08d, 0xb08d, 0xb08d, 0xb08d,
++      0xb08d, 0xb08d, 0xb08d, 0xb08d, 0xb08d, 0x080c, 0x0d84, 0x080c,
++      0x901f, 0x6114, 0x0096, 0x2148, 0xa87b, 0x0006, 0x080c, 0x61a9,
++      0x009e, 0x0804, 0x9554, 0x9284, 0x0007, 0x1158, 0x9282, 0x1cd0,
++      0x0240, 0x2001, 0x1818, 0x2004, 0x9202, 0x1218, 0x9085, 0x0001,
++      0x0005, 0x9006, 0x0ce8, 0x0096, 0x0018, 0x0096, 0x6014, 0x2048,
++      0x9984, 0xf000, 0x9086, 0xf000, 0x0110, 0x080c, 0x1057, 0x009e,
++      0x0005, 0x00e6, 0x00c6, 0x0036, 0x0006, 0x0126, 0x2091, 0x8000,
++      0x2061, 0x1cd0, 0x2071, 0x1800, 0x734c, 0x706c, 0x9302, 0x12a8,
++      0x6020, 0x9206, 0x1160, 0x080c, 0xb460, 0x0148, 0x080c, 0xb295,
++      0x1110, 0x080c, 0x9e99, 0x00c6, 0x080c, 0x9554, 0x00ce, 0x9ce0,
++      0x0018, 0x7060, 0x9c02, 0x1208, 0x0c38, 0x012e, 0x000e, 0x003e,
++      0x00ce, 0x00ee, 0x0005, 0x00e6, 0x00c6, 0x0016, 0x9188, 0x1000,
++      0x210c, 0x81ff, 0x0128, 0x2061, 0x1a72, 0x6112, 0x080c, 0x2d1a,
++      0x9006, 0x0010, 0x9085, 0x0001, 0x001e, 0x00ce, 0x00ee, 0x0005,
++      0x00c6, 0x0126, 0x2091, 0x8000, 0x080c, 0x94fe, 0x01d8, 0x080c,
++      0x4df2, 0x0110, 0x662e, 0x0008, 0x6616, 0x2b00, 0x6012, 0x080c,
++      0x4df2, 0x0118, 0x080c, 0xb1bc, 0x0168, 0x080c, 0xb4e6, 0x6023,
++      0x0003, 0x2009, 0x004b, 0x080c, 0x95ce, 0x9085, 0x0001, 0x012e,
++      0x00ce, 0x0005, 0x9006, 0x0cd8, 0x00c6, 0x0126, 0x2091, 0x8000,
++      0xbaa0, 0x080c, 0x95a1, 0x0590, 0x080c, 0x4df2, 0x0118, 0x602f,
++      0x0000, 0x0010, 0x6017, 0x0000, 0x2b00, 0x6012, 0x080c, 0xb4e6,
++      0x6023, 0x0003, 0x0016, 0x080c, 0x7d55, 0x0076, 0x903e, 0x080c,
++      0x7c4d, 0x2c08, 0x080c, 0xc73e, 0x007e, 0x001e, 0xd184, 0x0128,
++      0x080c, 0x9554, 0x9085, 0x0001, 0x0070, 0x080c, 0x4df2, 0x0128,
++      0xd18c, 0x1170, 0x080c, 0xb1bc, 0x0148, 0x2009, 0x004c, 0x080c,
++      0x95ce, 0x9085, 0x0001, 0x012e, 0x00ce, 0x0005, 0x9006, 0x0cd8,
++      0x2900, 0x6016, 0x0c90, 0x2009, 0x004d, 0x0010, 0x2009, 0x004e,
++      0x00f6, 0x00c6, 0x0046, 0x0016, 0x080c, 0x94fe, 0x2c78, 0x01d8,
++      0x080c, 0x4df2, 0x0110, 0x7e2e, 0x0008, 0x7e16, 0x2b00, 0x7812,
++      0x7823, 0x0003, 0x2021, 0x0005, 0x080c, 0xb1ce, 0x2f60, 0x080c,
++      0x4df2, 0x0118, 0x080c, 0xb1bc, 0x0130, 0x001e, 0x0016, 0x080c,
++      0x95ce, 0x9085, 0x0001, 0x001e, 0x004e, 0x00ce, 0x00fe, 0x0005,
++      0x00f6, 0x00c6, 0x0046, 0x080c, 0x94fe, 0x2c78, 0x0530, 0x080c,
++      0x4df2, 0x0110, 0x7e2e, 0x0008, 0x7e16, 0x2b00, 0x7812, 0x7823,
++      0x0003, 0x0096, 0x2021, 0x0004, 0x0489, 0x009e, 0x2001, 0x194d,
++      0x200c, 0xd1fc, 0x0120, 0x2f60, 0x080c, 0x9554, 0x0060, 0x2f60,
++      0x080c, 0x4df2, 0x0120, 0xd18c, 0x1160, 0x0071, 0x0130, 0x2009,
++      0x0052, 0x080c, 0x95ce, 0x9085, 0x0001, 0x004e, 0x00ce, 0x00fe,
++      0x0005, 0x2900, 0x7816, 0x0c98, 0x00c6, 0x080c, 0x441f, 0x00ce,
++      0x1120, 0x080c, 0x9554, 0x9006, 0x0005, 0xa867, 0x0000, 0xa86b,
++      0x8000, 0x2900, 0x6016, 0x9085, 0x0001, 0x0005, 0x0096, 0x0076,
++      0x0126, 0x2091, 0x8000, 0x080c, 0x5d41, 0x0158, 0x2001, 0xb1d3,
++      0x0006, 0x900e, 0x2400, 0x080c, 0x63d1, 0x080c, 0x61a9, 0x000e,
++      0x0807, 0x2418, 0x080c, 0x7fc0, 0xbaa0, 0x0086, 0x2041, 0x0001,
++      0x2039, 0x0001, 0x2608, 0x080c, 0x7d6d, 0x008e, 0x080c, 0x7c4d,
++      0x2f08, 0x2648, 0x080c, 0xc73e, 0xb93c, 0x81ff, 0x090c, 0x7e2b,
++      0x080c, 0x8125, 0x012e, 0x007e, 0x009e, 0x0005, 0x00c6, 0x0126,
++      0x2091, 0x8000, 0x080c, 0x94fe, 0x0190, 0x660a, 0x2b08, 0x6112,
++      0x080c, 0xb4e6, 0x6023, 0x0001, 0x2900, 0x6016, 0x2009, 0x001f,
++      0x080c, 0x95ce, 0x9085, 0x0001, 0x012e, 0x00ce, 0x0005, 0x9006,
++      0x0cd8, 0x00c6, 0x0126, 0x2091, 0x8000, 0x080c, 0x95a1, 0x01b8,
++      0x660a, 0x2b08, 0x6112, 0x080c, 0xb4e6, 0x6023, 0x0008, 0x2900,
++      0x6016, 0x00f6, 0x2c78, 0x080c, 0x150d, 0x00fe, 0x2009, 0x0021,
++      0x080c, 0x95ce, 0x9085, 0x0001, 0x012e, 0x00ce, 0x0005, 0x9006,
++      0x0cd8, 0x2009, 0x003d, 0x00c6, 0x0126, 0x0016, 0x2091, 0x8000,
++      0x080c, 0x94fe, 0x0198, 0x660a, 0x2b08, 0x6112, 0x080c, 0xb4e6,
++      0x6023, 0x0001, 0x2900, 0x6016, 0x001e, 0x0016, 0x080c, 0x95ce,
++      0x9085, 0x0001, 0x001e, 0x012e, 0x00ce, 0x0005, 0x9006, 0x0cd0,
++      0x00c6, 0x0126, 0x2091, 0x8000, 0x080c, 0x95a1, 0x0188, 0x2b08,
++      0x6112, 0x080c, 0xb4e6, 0x6023, 0x0001, 0x2900, 0x6016, 0x2009,
++      0x0000, 0x080c, 0x95ce, 0x9085, 0x0001, 0x012e, 0x00ce, 0x0005,
++      0x9006, 0x0cd8, 0x2009, 0x0044, 0x0830, 0x2009, 0x0049, 0x0818,
++      0x0026, 0x00b6, 0x6210, 0x2258, 0xba3c, 0x82ff, 0x0110, 0x8211,
++      0xba3e, 0x00be, 0x002e, 0x0005, 0x0006, 0x0016, 0x6004, 0x908e,
++      0x0002, 0x0140, 0x908e, 0x0003, 0x0128, 0x908e, 0x0004, 0x0110,
++      0x9085, 0x0001, 0x001e, 0x000e, 0x0005, 0x0006, 0x0096, 0x6014,
++      0x904d, 0x0148, 0xa864, 0x9086, 0x0139, 0x0138, 0xa868, 0xd0fc,
++      0x0110, 0x9006, 0x0010, 0x9085, 0x0001, 0x009e, 0x000e, 0x0005,
++      0x00c6, 0x0126, 0x2091, 0x8000, 0x080c, 0x94fe, 0x0198, 0x2b08,
++      0x6112, 0x080c, 0xb4e6, 0x6023, 0x0001, 0x2900, 0x6016, 0x080c,
++      0x2d1a, 0x2009, 0x0028, 0x080c, 0x95ce, 0x9085, 0x0001, 0x012e,
++      0x00ce, 0x0005, 0x9006, 0x0cd8, 0x9186, 0x0015, 0x11a8, 0x2011,
++      0x1822, 0x2204, 0x9086, 0x0074, 0x1178, 0x00b6, 0x080c, 0xa0c5,
++      0x00be, 0x080c, 0xa2bc, 0x6003, 0x0001, 0x6007, 0x0029, 0x080c,
++      0x7c1d, 0x080c, 0x8125, 0x0078, 0x6014, 0x0096, 0x2048, 0xa868,
++      0x009e, 0xd0fc, 0x0148, 0x2001, 0x0001, 0x080c, 0xb69a, 0x080c,
++      0x9e99, 0x080c, 0x9554, 0x0005, 0x0096, 0x6014, 0x904d, 0x090c,
++      0x0d84, 0xa87b, 0x0030, 0xa883, 0x0000, 0xa897, 0x4005, 0xa89b,
++      0x0004, 0xa867, 0x0139, 0x0126, 0x2091, 0x8000, 0x080c, 0x61a9,
++      0x012e, 0x009e, 0x080c, 0x9554, 0x0c30, 0x0096, 0x9186, 0x0016,
++      0x1128, 0x2001, 0x0004, 0x080c, 0x5b61, 0x00e8, 0x9186, 0x0015,
++      0x1510, 0x2011, 0x1822, 0x2204, 0x9086, 0x0014, 0x11e0, 0x6010,
++      0x00b6, 0x2058, 0x080c, 0x5ca8, 0x00be, 0x080c, 0xa38d, 0x1198,
++      0x6010, 0x00b6, 0x2058, 0xb890, 0x00be, 0x9005, 0x0160, 0x2001,
++      0x0006, 0x080c, 0x5b61, 0x6014, 0x2048, 0xa868, 0xd0fc, 0x0170,
++      0x080c, 0x9920, 0x0048, 0x6014, 0x2048, 0xa868, 0xd0fc, 0x0528,
++      0x080c, 0x9e99, 0x080c, 0x9554, 0x009e, 0x0005, 0x6014, 0x6310,
++      0x2358, 0x904d, 0x090c, 0x0d84, 0xa87b, 0x0000, 0xa883, 0x0000,
++      0xa897, 0x4000, 0x900e, 0x080c, 0x5e2d, 0x1108, 0xc185, 0xb800,
++      0xd0bc, 0x0108, 0xc18d, 0xa99a, 0x0126, 0x2091, 0x8000, 0x080c,
++      0x61a9, 0x012e, 0x080c, 0x9554, 0x08f8, 0x6014, 0x904d, 0x090c,
++      0x0d84, 0xa87b, 0x0030, 0xa883, 0x0000, 0xa897, 0x4005, 0xa89b,
++      0x0004, 0xa867, 0x0139, 0x0126, 0x2091, 0x8000, 0x080c, 0x61a9,
++      0x012e, 0x080c, 0x9554, 0x0840, 0xa878, 0x9086, 0x0005, 0x1108,
++      0x0009, 0x0005, 0xa880, 0xc0ad, 0xa882, 0x0005, 0x6043, 0x0000,
++      0x6017, 0x0000, 0x6003, 0x0001, 0x6007, 0x0050, 0x080c, 0x7bcb,
++      0x080c, 0x8125, 0x0005, 0x00c6, 0x6010, 0x00b6, 0x2058, 0xb800,
++      0x00be, 0xd0bc, 0x0120, 0x6020, 0x9084, 0x000f, 0x0013, 0x00ce,
++      0x0005, 0xadfa, 0xb3aa, 0xb3aa, 0xb3ad, 0xca0f, 0xca2a, 0xca2d,
++      0xadfa, 0xadfa, 0xadfa, 0xadfa, 0xadfa, 0xadfa, 0xadfa, 0xadfa,
++      0x080c, 0x0d84, 0xa001, 0xa001, 0x0005, 0x0000, 0x6010, 0x00b6,
++      0x2058, 0xb800, 0x00be, 0xd0bc, 0x0550, 0x00f6, 0x2c78, 0x080c,
++      0x94fe, 0x1128, 0x2001, 0x1955, 0x2004, 0x7842, 0x00f8, 0x7810,
++      0x6012, 0x080c, 0xb4e6, 0x7820, 0x9086, 0x0003, 0x0128, 0x7808,
++      0x603a, 0x2f00, 0x603e, 0x0020, 0x7808, 0x603e, 0x2f00, 0x603a,
++      0x602e, 0x6023, 0x0001, 0x6007, 0x0035, 0x6003, 0x0001, 0x7954,
++      0x6156, 0x080c, 0x7bcb, 0x080c, 0x8125, 0x2f60, 0x00fe, 0x0005,
++      0x0016, 0x0096, 0x6814, 0x2048, 0xa87c, 0xd0e4, 0x0170, 0xc0e4,
++      0xa87e, 0xa877, 0x0000, 0xa893, 0x0000, 0xa88f, 0x0000, 0xd0cc,
++      0x0120, 0xa878, 0x2048, 0x080c, 0x0f60, 0x6830, 0x6036, 0x908e,
++      0x0001, 0x0148, 0x6803, 0x0002, 0x9086, 0x0005, 0x0168, 0x9006,
++      0x602e, 0x6032, 0x00c8, 0x681c, 0xc085, 0x681e, 0x6803, 0x0004,
++      0x6824, 0xc0f4, 0xc0d5, 0x6826, 0x6814, 0x2048, 0xa8ac, 0x6938,
++      0x9102, 0xa8b0, 0x693c, 0x9103, 0x1e50, 0x683c, 0x602e, 0x6838,
++      0x9084, 0xfffc, 0x683a, 0x6032, 0x2d00, 0x603a, 0x6808, 0x603e,
++      0x6910, 0x6112, 0x6954, 0x6156, 0x6023, 0x0001, 0x6007, 0x0039,
++      0x6003, 0x0001, 0x080c, 0x7bcb, 0x080c, 0x8125, 0x009e, 0x001e,
++      0x0005, 0x6024, 0xd0d4, 0x0510, 0xd0f4, 0x11f8, 0x6038, 0x940a,
++      0x603c, 0x9303, 0x0230, 0x9105, 0x0120, 0x6024, 0xc0d4, 0xc0f5,
++      0x0098, 0x643a, 0x633e, 0xac3e, 0xab42, 0x0046, 0x0036, 0x2400,
++      0xacac, 0x9402, 0xa836, 0x2300, 0xabb0, 0x9303, 0xa83a, 0x003e,
++      0x004e, 0x6024, 0xc0d4, 0x0000, 0x6026, 0x0005, 0xd0f4, 0x1138,
++      0xa83c, 0x603a, 0xa840, 0x603e, 0x6024, 0xc0f5, 0x6026, 0x0005,
++      0x0006, 0x0016, 0x6004, 0x908e, 0x0034, 0x01b8, 0x908e, 0x0035,
++      0x01a0, 0x908e, 0x0036, 0x0188, 0x908e, 0x0037, 0x0170, 0x908e,
++      0x0038, 0x0158, 0x908e, 0x0039, 0x0140, 0x908e, 0x003a, 0x0128,
++      0x908e, 0x003b, 0x0110, 0x9085, 0x0001, 0x001e, 0x000e, 0x0005,
++      0x0006, 0x0016, 0x0026, 0x0036, 0x00e6, 0x2001, 0x194f, 0x200c,
++      0x8000, 0x2014, 0x2001, 0x0032, 0x080c, 0x7a4b, 0x2001, 0x1953,
++      0x82ff, 0x1110, 0x2011, 0x0014, 0x2202, 0x2001, 0x1951, 0x200c,
++      0x8000, 0x2014, 0x2071, 0x193b, 0x711a, 0x721e, 0x2001, 0x0064,
++      0x080c, 0x7a4b, 0x2001, 0x1954, 0x82ff, 0x1110, 0x2011, 0x0014,
++      0x2202, 0x2001, 0x1955, 0x9288, 0x000a, 0x2102, 0x2001, 0x1a54,
++      0x2102, 0x2001, 0x0032, 0x080c, 0x1492, 0x080c, 0x5f0e, 0x00ee,
++      0x003e, 0x002e, 0x001e, 0x000e, 0x0005, 0x0006, 0x0016, 0x00e6,
++      0x2001, 0x1953, 0x2003, 0x0028, 0x2001, 0x1954, 0x2003, 0x0014,
++      0x2071, 0x193b, 0x701b, 0x0000, 0x701f, 0x07d0, 0x2001, 0x1955,
++      0x2009, 0x001e, 0x2102, 0x2001, 0x1a54, 0x2102, 0x2001, 0x0032,
++      0x080c, 0x1492, 0x00ee, 0x001e, 0x000e, 0x0005, 0x0096, 0x6058,
++      0x904d, 0x0110, 0x080c, 0x0fe0, 0x009e, 0x0005, 0x0005, 0x00c6,
++      0x0126, 0x2091, 0x8000, 0x080c, 0x94fe, 0x0180, 0x2b08, 0x6112,
++      0x0ca9, 0x6023, 0x0001, 0x2900, 0x6016, 0x2009, 0x0033, 0x080c,
++      0x95ce, 0x9085, 0x0001, 0x012e, 0x00ce, 0x0005, 0x9006, 0x0cd8,
++      0x0096, 0x00e6, 0x00f6, 0x2071, 0x1800, 0x9186, 0x0015, 0x1500,
++      0x7088, 0x9086, 0x0018, 0x11e0, 0x6014, 0x2048, 0xaa3c, 0xd2e4,
++      0x1160, 0x2c78, 0x080c, 0x8315, 0x01d8, 0x7074, 0xaa50, 0x9206,
++      0x1160, 0x7078, 0xaa54, 0x9206, 0x1140, 0x6210, 0x00b6, 0x2258,
++      0xbaa0, 0x00be, 0x900e, 0x080c, 0x2d5f, 0x080c, 0x9920, 0x0020,
++      0x080c, 0x9e99, 0x080c, 0x9554, 0x00fe, 0x00ee, 0x009e, 0x0005,
++      0x7058, 0xaa54, 0x9206, 0x0d48, 0x0c80, 0x00c6, 0x0126, 0x2091,
++      0x8000, 0x080c, 0x94fe, 0x0188, 0x2b08, 0x6112, 0x080c, 0xb4e6,
++      0x6023, 0x0001, 0x2900, 0x6016, 0x2009, 0x004d, 0x080c, 0x95ce,
++      0x9085, 0x0001, 0x012e, 0x00ce, 0x0005, 0x9006, 0x0cd8, 0x00c6,
++      0x0126, 0x2091, 0x8000, 0x0016, 0x080c, 0x94fe, 0x0180, 0x2b08,
++      0x6112, 0x080c, 0xb4e6, 0x6023, 0x0001, 0x2900, 0x6016, 0x001e,
++      0x080c, 0x95ce, 0x9085, 0x0001, 0x012e, 0x00ce, 0x0005, 0x001e,
++      0x9006, 0x0cd0, 0x0016, 0x0026, 0x0036, 0x0046, 0x0056, 0x0066,
++      0x0096, 0x00e6, 0x00f6, 0x2071, 0x1800, 0x9186, 0x0015, 0x1568,
++      0x7188, 0x6014, 0x2048, 0xa814, 0x8003, 0x9106, 0x1530, 0x20e1,
++      0x0000, 0x2001, 0x196d, 0x2003, 0x0000, 0x6014, 0x2048, 0xa830,
++      0x20a8, 0x8906, 0x8006, 0x8007, 0x9094, 0x003f, 0x22e8, 0x9084,
++      0xffc0, 0x9080, 0x001b, 0x20a0, 0x2001, 0x196d, 0x0016, 0x200c,
++      0x080c, 0xbcf8, 0x001e, 0xa804, 0x9005, 0x0110, 0x2048, 0x0c38,
++      0x6014, 0x2048, 0xa867, 0x0103, 0x0010, 0x080c, 0x9e99, 0x080c,
++      0x9554, 0x00fe, 0x00ee, 0x009e, 0x006e, 0x005e, 0x004e, 0x003e,
++      0x002e, 0x001e, 0x0005, 0x0096, 0x00e6, 0x00f6, 0x2071, 0x1800,
++      0x9186, 0x0015, 0x11b8, 0x7088, 0x9086, 0x0004, 0x1198, 0x6014,
++      0x2048, 0x2c78, 0x080c, 0x8315, 0x01a8, 0x7074, 0xaa74, 0x9206,
++      0x1130, 0x7078, 0xaa78, 0x9206, 0x1110, 0x080c, 0x2d1a, 0x080c,
++      0x9920, 0x0020, 0x080c, 0x9e99, 0x080c, 0x9554, 0x00fe, 0x00ee,
++      0x009e, 0x0005, 0x7058, 0xaa78, 0x9206, 0x0d78, 0x0c80, 0x0096,
++      0x00e6, 0x00f6, 0x2071, 0x1800, 0x9186, 0x0015, 0x1538, 0x7088,
++      0x9086, 0x0004, 0x1518, 0x6014, 0x2048, 0x2c78, 0x080c, 0x8315,
++      0x05b8, 0x7074, 0xaacc, 0x9206, 0x1180, 0x7078, 0xaad0, 0x9206,
++      0x1160, 0x080c, 0x2d1a, 0x0016, 0xa998, 0xaab0, 0x9284, 0x1000,
++      0xc0fd, 0x080c, 0x4da2, 0x001e, 0x0010, 0x080c, 0x4b95, 0xa87b,
++      0x0000, 0xa883, 0x0000, 0xa897, 0x4000, 0x0060, 0x080c, 0x4b95,
++      0x6014, 0x2048, 0xa87b, 0x0030, 0xa883, 0x0000, 0xa897, 0x4005,
++      0xa89b, 0x0004, 0x0126, 0x2091, 0x8000, 0xa867, 0x0139, 0x080c,
++      0x61a9, 0x012e, 0x080c, 0x9554, 0x00fe, 0x00ee, 0x009e, 0x0005,
++      0x7058, 0xaad0, 0x9206, 0x0968, 0x08c0, 0x0016, 0x0026, 0xa87c,
++      0xd0ac, 0x0178, 0xa938, 0xaa34, 0x2100, 0x9205, 0x0150, 0xa890,
++      0x9106, 0x1118, 0xa88c, 0x9206, 0x0120, 0xa992, 0xaa8e, 0x9085,
++      0x0001, 0x002e, 0x001e, 0x0005, 0x00b6, 0x00d6, 0x0036, 0x0096,
++      0x6314, 0x2348, 0xa87a, 0xa982, 0x929e, 0x4000, 0x1580, 0x6310,
++      0x00c6, 0x2358, 0x2009, 0x0000, 0xa868, 0xd0f4, 0x1140, 0x080c,
++      0x5e2d, 0x1108, 0xc185, 0xb800, 0xd0bc, 0x0108, 0xc18d, 0xaa96,
++      0xa99a, 0x20a9, 0x0004, 0xa860, 0x20e8, 0xa85c, 0x9080, 0x0031,
++      0x20a0, 0xb8b4, 0x20e0, 0xb8b8, 0x9080, 0x0006, 0x2098, 0x080c,
++      0x0f2b, 0x20a9, 0x0004, 0xa85c, 0x9080, 0x0035, 0x20a0, 0xb8b8,
++      0x9080, 0x000a, 0x2098, 0x080c, 0x0f2b, 0x00ce, 0x0090, 0xaa96,
++      0x3918, 0x9398, 0x0007, 0x231c, 0x6004, 0x9086, 0x0016, 0x0110,
++      0xa89b, 0x0004, 0xaba2, 0x6310, 0x2358, 0xb804, 0x9084, 0x00ff,
++      0xa89e, 0x080c, 0x619c, 0x6017, 0x0000, 0x009e, 0x003e, 0x00de,
++      0x00be, 0x0005, 0x0026, 0x0036, 0x0046, 0x00b6, 0x0096, 0x00f6,
++      0x6214, 0x2248, 0x6210, 0x2258, 0x2079, 0x0260, 0x9096, 0x0000,
++      0x11a0, 0xb814, 0x9084, 0x00ff, 0x900e, 0x080c, 0x23fd, 0x2118,
++      0x831f, 0x939c, 0xff00, 0x7838, 0x9084, 0x00ff, 0x931d, 0x7c3c,
++      0x2011, 0x8018, 0x080c, 0x447f, 0x00a8, 0x9096, 0x0001, 0x1148,
++      0x89ff, 0x0180, 0xa89b, 0x000d, 0x7838, 0xa8a6, 0x783c, 0xa8aa,
++      0x0048, 0x9096, 0x0002, 0x1130, 0xa89b, 0x000d, 0x7838, 0xa8a6,
++      0x783c, 0xa8aa, 0x00fe, 0x009e, 0x00be, 0x004e, 0x003e, 0x002e,
++      0x0005, 0x00c6, 0x0026, 0x0016, 0x9186, 0x0035, 0x0110, 0x6a38,
++      0x0008, 0x6a2c, 0x080c, 0xb09b, 0x01f0, 0x2260, 0x6120, 0x9186,
++      0x0003, 0x0118, 0x9186, 0x0006, 0x1190, 0x6838, 0x9206, 0x0140,
++      0x683c, 0x9206, 0x1160, 0x6108, 0x6838, 0x9106, 0x1140, 0x0020,
++      0x6008, 0x693c, 0x9106, 0x1118, 0x6010, 0x6910, 0x9106, 0x001e,
++      0x002e, 0x00ce, 0x0005, 0x9085, 0x0001, 0x0cc8, 0xa974, 0xd1cc,
++      0x0188, 0x918c, 0x00ff, 0x918e, 0x0002, 0x1160, 0xa9a8, 0x918c,
++      0x0f00, 0x810f, 0x918e, 0x0001, 0x1128, 0xa834, 0xa938, 0x9115,
++      0x190c, 0xa82a, 0x0005, 0x0036, 0x2019, 0x0001, 0x0010, 0x0036,
++      0x901e, 0x0459, 0x01a0, 0x080c, 0xb0ad, 0x0188, 0x6037, 0x4000,
++      0x6014, 0x6017, 0x0000, 0x0096, 0x2048, 0xa87c, 0xa867, 0x0103,
++      0xa877, 0x0000, 0x83ff, 0x1129, 0x080c, 0x61a9, 0x009e, 0x003e,
++      0x0005, 0xa880, 0xd0b4, 0x0128, 0xa87b, 0x0006, 0xc0ec, 0xa882,
++      0x0048, 0xd0bc, 0x0118, 0xa87b, 0x0002, 0x0020, 0xa87b, 0x0005,
++      0x080c, 0xb37a, 0xa877, 0x0000, 0x0005, 0x2001, 0x180f, 0x2004,
++      0xd0ec, 0x0005, 0x0006, 0x2001, 0x180f, 0x2004, 0xd0f4, 0x000e,
++      0x0005, 0x2001, 0x180f, 0x2004, 0xd0e4, 0x0005, 0x0036, 0x0046,
++      0x6010, 0x00b6, 0x2058, 0xbba0, 0x00be, 0x2021, 0x0007, 0x080c,
++      0x44f9, 0x004e, 0x003e, 0x0005, 0x0c61, 0x1d81, 0x0005, 0x2001,
++      0x1953, 0x2004, 0x601a, 0x0005, 0x2001, 0x1955, 0x2004, 0x6042,
++      0x0005, 0x080c, 0x9554, 0x0804, 0x8125, 0x00b6, 0x0066, 0x6000,
++      0x90b2, 0x0016, 0x1a0c, 0x0d84, 0x001b, 0x006e, 0x00be, 0x0005,
++      0xb798, 0xbdf9, 0xbf54, 0xb798, 0xb798, 0xb798, 0xb798, 0xb798,
++      0xb7cf, 0xbfcf, 0xb798, 0xb798, 0xb798, 0xb798, 0xb798, 0xb798,
++      0x080c, 0x0d84, 0x0066, 0x6000, 0x90b2, 0x0016, 0x1a0c, 0x0d84,
++      0x0013, 0x006e, 0x0005, 0xb7b3, 0xc519, 0xb7b3, 0xb7b3, 0xb7b3,
++      0xb7b3, 0xb7b3, 0xb7b3, 0xc4c8, 0xc56d, 0xb7b3, 0xcb4c, 0xcb82,
++      0xcb4c, 0xcb82, 0xb7b3, 0x080c, 0x0d84, 0x6000, 0x9082, 0x0016,
++      0x1a0c, 0x0d84, 0x6000, 0x000a, 0x0005, 0xb7cd, 0xc1ad, 0xc29d,
++      0xc2bf, 0xc366, 0xb7cd, 0xc43f, 0xc3ee, 0xbfdb, 0xc49e, 0xc4b3,
++      0xb7cd, 0xb7cd, 0xb7cd, 0xb7cd, 0xb7cd, 0x080c, 0x0d84, 0x91b2,
++      0x0053, 0x1a0c, 0x0d84, 0x2100, 0x91b2, 0x0040, 0x1a04, 0xbbfa,
++      0x0002, 0xb819, 0xb9eb, 0xb819, 0xb819, 0xb819, 0xb9f4, 0xb819,
++      0xb819, 0xb819, 0xb819, 0xb819, 0xb819, 0xb819, 0xb819, 0xb819,
++      0xb819, 0xb819, 0xb819, 0xb819, 0xb819, 0xb819, 0xb819, 0xb819,
++      0xb81b, 0xb871, 0xb880, 0xb8e1, 0xb908, 0xb97f, 0xb9d6, 0xb819,
++      0xb819, 0xb9f7, 0xb819, 0xb819, 0xba0c, 0xba19, 0xb819, 0xb819,
++      0xb819, 0xb819, 0xb819, 0xba9c, 0xb819, 0xb819, 0xbab0, 0xb819,
++      0xb819, 0xba6b, 0xb819, 0xb819, 0xb819, 0xbac8, 0xb819, 0xb819,
++      0xb819, 0xbb45, 0xb819, 0xb819, 0xb819, 0xb819, 0xb819, 0xb819,
++      0xbbc2, 0x080c, 0x0d84, 0x080c, 0x5eeb, 0x1150, 0x2001, 0x1836,
++      0x2004, 0xd0cc, 0x1128, 0x9084, 0x0009, 0x9086, 0x0008, 0x1140,
++      0x6007, 0x0009, 0x602f, 0x0009, 0x6017, 0x0000, 0x0804, 0xb9e4,
++      0x080c, 0x5ed5, 0x00e6, 0x00c6, 0x0036, 0x0026, 0x0016, 0x6210,
++      0x2258, 0xbaa0, 0x0026, 0x2019, 0x0029, 0x080c, 0x7d55, 0x0076,
++      0x903e, 0x080c, 0x7c4d, 0x2c08, 0x080c, 0xc73e, 0x007e, 0x001e,
++      0x001e, 0x002e, 0x003e, 0x00ce, 0x00ee, 0x6610, 0x2658, 0x080c,
++      0x5c1c, 0xbe04, 0x9684, 0x00ff, 0x9082, 0x0006, 0x0278, 0x080c,
++      0xc675, 0x1904, 0xb8db, 0x080c, 0xc611, 0x1120, 0x6007, 0x0008,
++      0x0804, 0xb9e4, 0x6007, 0x0009, 0x0804, 0xb9e4, 0x080c, 0xc860,
++      0x0128, 0x080c, 0xc675, 0x0d78, 0x0804, 0xb8db, 0x6017, 0x1900,
++      0x0c88, 0x080c, 0x2e39, 0x1904, 0xbbf7, 0x6106, 0x080c, 0xc5c8,
++      0x6007, 0x0006, 0x0804, 0xb9e4, 0x6007, 0x0007, 0x0804, 0xb9e4,
++      0x080c, 0xcbbe, 0x1904, 0xbbf7, 0x080c, 0x2e39, 0x1904, 0xbbf7,
++      0x00d6, 0x6610, 0x2658, 0xbe04, 0x9684, 0x00ff, 0x9082, 0x0006,
++      0x1220, 0x2001, 0x0001, 0x080c, 0x5b4d, 0x96b4, 0xff00, 0x8637,
++      0x9686, 0x0006, 0x0188, 0x9686, 0x0004, 0x0170, 0xbe04, 0x96b4,
++      0x00ff, 0x9686, 0x0006, 0x0140, 0x9686, 0x0004, 0x0128, 0x9686,
++      0x0005, 0x0110, 0x00de, 0x0478, 0x00e6, 0x2071, 0x0260, 0x7034,
++      0x90b4, 0x0003, 0x1138, 0x90b2, 0x0014, 0x0220, 0x7030, 0x9084,
++      0x0003, 0x0130, 0x00ee, 0x6017, 0x0000, 0x602f, 0x0007, 0x00b0,
++      0x00ee, 0x080c, 0xc6d4, 0x1190, 0x9686, 0x0006, 0x1140, 0x0026,
++      0x6210, 0x2258, 0xbaa0, 0x900e, 0x080c, 0x2d5f, 0x002e, 0x080c,
++      0x5ca8, 0x6007, 0x000a, 0x00de, 0x0804, 0xb9e4, 0x6007, 0x000b,
++      0x00de, 0x0804, 0xb9e4, 0x080c, 0x2d1a, 0x6007, 0x0001, 0x0804,
++      0xb9e4, 0x080c, 0xcbbe, 0x1904, 0xbbf7, 0x080c, 0x2e39, 0x1904,
++      0xbbf7, 0x2071, 0x0260, 0x7034, 0x90b4, 0x0003, 0x1958, 0x90b2,
++      0x0014, 0x0a40, 0x7030, 0x9084, 0x0003, 0x1920, 0x6610, 0x2658,
++      0xbe04, 0x9686, 0x0707, 0x09f8, 0x0026, 0x6210, 0x2258, 0xbaa0,
++      0x900e, 0x080c, 0x2d5f, 0x002e, 0x6007, 0x000c, 0x0804, 0xb9e4,
++      0x080c, 0x5eeb, 0x1140, 0x2001, 0x1836, 0x2004, 0x9084, 0x0009,
++      0x9086, 0x0008, 0x1110, 0x0804, 0xb828, 0x080c, 0x5ed5, 0x6610,
++      0x2658, 0xbe04, 0x9684, 0x00ff, 0x9082, 0x0006, 0x06b8, 0x1138,
++      0x0026, 0x2001, 0x0006, 0x080c, 0x5b8d, 0x002e, 0x0050, 0x96b4,
++      0xff00, 0x8637, 0x9686, 0x0004, 0x0120, 0x9686, 0x0006, 0x1904,
++      0xb8db, 0x080c, 0xc6e1, 0x1120, 0x6007, 0x000e, 0x0804, 0xb9e4,
++      0x0046, 0x6410, 0x2458, 0xbca0, 0x0046, 0x080c, 0x2d1a, 0x004e,
++      0x0016, 0x9006, 0x2009, 0x1853, 0x210c, 0xd1a4, 0x0148, 0x2009,
++      0x0029, 0x080c, 0xc9c5, 0x6010, 0x2058, 0xb800, 0xc0e5, 0xb802,
++      0x001e, 0x004e, 0x6007, 0x0001, 0x0804, 0xb9e4, 0x2001, 0x0001,
++      0x080c, 0x5b4d, 0x0156, 0x0016, 0x0026, 0x0036, 0x20a9, 0x0004,
++      0x2019, 0x1805, 0x2011, 0x0270, 0x080c, 0xa425, 0x003e, 0x002e,
++      0x001e, 0x015e, 0x9005, 0x0168, 0x96b4, 0xff00, 0x8637, 0x9682,
++      0x0004, 0x0a04, 0xb8db, 0x9682, 0x0007, 0x0a04, 0xb931, 0x0804,
++      0xb8db, 0x6017, 0x1900, 0x6007, 0x0009, 0x0804, 0xb9e4, 0x080c,
++      0x5eeb, 0x1140, 0x2001, 0x1836, 0x2004, 0x9084, 0x0009, 0x9086,
++      0x0008, 0x1110, 0x0804, 0xb828, 0x080c, 0x5ed5, 0x6610, 0x2658,
++      0xbe04, 0x9684, 0x00ff, 0x9082, 0x0006, 0x0680, 0x96b4, 0xff00,
++      0x8637, 0x9686, 0x0004, 0x0120, 0x9686, 0x0006, 0x1904, 0xb8db,
++      0x080c, 0xc70f, 0x1130, 0x080c, 0xc611, 0x1118, 0x6007, 0x0010,
++      0x04d8, 0x0046, 0x6410, 0x2458, 0xbca0, 0x0046, 0x080c, 0x2d1a,
++      0x004e, 0x0016, 0x9006, 0x2009, 0x1853, 0x210c, 0xd1a4, 0x0148,
++      0x2009, 0x0029, 0x080c, 0xc9c5, 0x6010, 0x2058, 0xb800, 0xc0e5,
++      0xb802, 0x001e, 0x004e, 0x6007, 0x0001, 0x00f0, 0x080c, 0xc860,
++      0x0140, 0x96b4, 0xff00, 0x8637, 0x9686, 0x0006, 0x0988, 0x0804,
++      0xb8db, 0x6017, 0x1900, 0x6007, 0x0009, 0x0070, 0x080c, 0x2e39,
++      0x1904, 0xbbf7, 0x080c, 0xcbbe, 0x1904, 0xbbf7, 0x080c, 0xbd93,
++      0x1904, 0xb8db, 0x6007, 0x0012, 0x6003, 0x0001, 0x080c, 0x7c1d,
++      0x080c, 0x8125, 0x0005, 0x6007, 0x0001, 0x6003, 0x0001, 0x080c,
++      0x7c1d, 0x080c, 0x8125, 0x0cb0, 0x6007, 0x0005, 0x0c68, 0x080c,
++      0xcbbe, 0x1904, 0xbbf7, 0x080c, 0x2e39, 0x1904, 0xbbf7, 0x080c,
++      0xbd93, 0x1904, 0xb8db, 0x6007, 0x0020, 0x6003, 0x0001, 0x080c,
++      0x7c1d, 0x080c, 0x8125, 0x0005, 0x080c, 0x2e39, 0x1904, 0xbbf7,
++      0x6007, 0x0023, 0x6003, 0x0001, 0x080c, 0x7c1d, 0x080c, 0x8125,
++      0x0005, 0x080c, 0xcbbe, 0x1904, 0xbbf7, 0x080c, 0x2e39, 0x1904,
++      0xbbf7, 0x080c, 0xbd93, 0x1904, 0xb8db, 0x0016, 0x0026, 0x00e6,
++      0x2071, 0x0260, 0x7244, 0x9286, 0xffff, 0x0180, 0x2c08, 0x080c,
++      0xb09b, 0x01b0, 0x2260, 0x7240, 0x6008, 0x9206, 0x1188, 0x6010,
++      0x9190, 0x0004, 0x2214, 0x9206, 0x01b8, 0x0050, 0x7240, 0x2c08,
++      0x9006, 0x080c, 0xc997, 0x1180, 0x7244, 0x9286, 0xffff, 0x01b0,
++      0x2160, 0x6007, 0x0026, 0x6017, 0x1700, 0x7214, 0x9296, 0xffff,
++      0x1180, 0x6007, 0x0025, 0x0068, 0x6020, 0x9086, 0x0007, 0x1d80,
++      0x6004, 0x9086, 0x0024, 0x1110, 0x080c, 0x9554, 0x2160, 0x6007,
++      0x0025, 0x6003, 0x0001, 0x080c, 0x7c1d, 0x080c, 0x8125, 0x00ee,
++      0x002e, 0x001e, 0x0005, 0x2001, 0x0001, 0x080c, 0x5b4d, 0x0156,
++      0x0016, 0x0026, 0x0036, 0x20a9, 0x0004, 0x2019, 0x1805, 0x2011,
++      0x0276, 0x080c, 0xa425, 0x003e, 0x002e, 0x001e, 0x015e, 0x0120,
++      0x6007, 0x0031, 0x0804, 0xb9e4, 0x080c, 0xa0dc, 0x080c, 0x6877,
++      0x1190, 0x0006, 0x0026, 0x0036, 0x080c, 0x6891, 0x1138, 0x080c,
++      0x6b40, 0x080c, 0x56d9, 0x080c, 0x67be, 0x0010, 0x080c, 0x6853,
++      0x003e, 0x002e, 0x000e, 0x0005, 0x080c, 0x2e39, 0x1904, 0xbbf7,
++      0x080c, 0xbd93, 0x1904, 0xb8db, 0x6106, 0x080c, 0xbdaf, 0x1120,
++      0x6007, 0x002b, 0x0804, 0xb9e4, 0x6007, 0x002c, 0x0804, 0xb9e4,
++      0x080c, 0xcbbe, 0x1904, 0xbbf7, 0x080c, 0x2e39, 0x1904, 0xbbf7,
++      0x080c, 0xbd93, 0x1904, 0xb8db, 0x6106, 0x080c, 0xbdb3, 0x1120,
++      0x6007, 0x002e, 0x0804, 0xb9e4, 0x6007, 0x002f, 0x0804, 0xb9e4,
++      0x080c, 0x2e39, 0x1904, 0xbbf7, 0x00e6, 0x00d6, 0x00c6, 0x6010,
++      0x2058, 0xb804, 0x9184, 0x00ff, 0x9086, 0x0006, 0x0158, 0x9184,
++      0xff00, 0x8007, 0x9086, 0x0006, 0x0128, 0x00ce, 0x00de, 0x00ee,
++      0x0804, 0xb9eb, 0x080c, 0x4dee, 0xd0e4, 0x0904, 0xbb42, 0x2071,
++      0x026c, 0x7010, 0x603a, 0x7014, 0x603e, 0x7108, 0x720c, 0x080c,
++      0x5f29, 0x0140, 0x6010, 0x2058, 0xb810, 0x9106, 0x1118, 0xb814,
++      0x9206, 0x0510, 0x080c, 0x5f25, 0x15b8, 0x2069, 0x1800, 0x6878,
++      0x9206, 0x1590, 0x6874, 0x9106, 0x1578, 0x7210, 0x080c, 0xb09b,
++      0x0590, 0x080c, 0xbc80, 0x0578, 0x080c, 0xca3c, 0x0560, 0x622e,
++      0x6007, 0x0036, 0x6003, 0x0001, 0x080c, 0x7bcb, 0x080c, 0x8125,
++      0x00ce, 0x00de, 0x00ee, 0x0005, 0x7214, 0x9286, 0xffff, 0x0150,
++      0x080c, 0xb09b, 0x01c0, 0x9280, 0x0002, 0x2004, 0x7110, 0x9106,
++      0x1190, 0x08e0, 0x7210, 0x2c08, 0x9085, 0x0001, 0x080c, 0xc997,
++      0x2c10, 0x2160, 0x0140, 0x0890, 0x6007, 0x0037, 0x602f, 0x0009,
++      0x6017, 0x1500, 0x08b8, 0x6007, 0x0037, 0x602f, 0x0003, 0x6017,
++      0x1700, 0x0880, 0x6007, 0x0012, 0x0868, 0x080c, 0x2e39, 0x1904,
++      0xbbf7, 0x6010, 0x2058, 0xb804, 0x9084, 0xff00, 0x8007, 0x9086,
++      0x0006, 0x1904, 0xb9eb, 0x00e6, 0x00d6, 0x00c6, 0x080c, 0x4dee,
++      0xd0e4, 0x0904, 0xbbba, 0x2069, 0x1800, 0x2071, 0x026c, 0x7008,
++      0x603a, 0x720c, 0x623e, 0x9286, 0xffff, 0x1150, 0x7208, 0x00c6,
++      0x2c08, 0x9085, 0x0001, 0x080c, 0xc997, 0x2c10, 0x00ce, 0x05e8,
++      0x080c, 0xb09b, 0x05d0, 0x7108, 0x9280, 0x0002, 0x2004, 0x9106,
++      0x15a0, 0x00c6, 0x0026, 0x2260, 0x080c, 0xad11, 0x002e, 0x00ce,
++      0x7118, 0x918c, 0xff00, 0x810f, 0x9186, 0x0001, 0x0178, 0x9186,
++      0x0005, 0x0118, 0x9186, 0x0007, 0x1198, 0x9280, 0x0005, 0x2004,
++      0x9005, 0x0170, 0x080c, 0xbc80, 0x0904, 0xbb3b, 0x0056, 0x7510,
++      0x7614, 0x080c, 0xca55, 0x005e, 0x00ce, 0x00de, 0x00ee, 0x0005,
++      0x6007, 0x003b, 0x602f, 0x0009, 0x6017, 0x2a00, 0x6003, 0x0001,
++      0x080c, 0x7bcb, 0x080c, 0x8125, 0x0c78, 0x6007, 0x003b, 0x602f,
++      0x0003, 0x6017, 0x0300, 0x6003, 0x0001, 0x080c, 0x7bcb, 0x080c,
++      0x8125, 0x0c10, 0x6007, 0x003b, 0x602f, 0x000b, 0x6017, 0x0000,
++      0x0804, 0xbb12, 0x00e6, 0x0026, 0x080c, 0x5eeb, 0x0550, 0x080c,
++      0x5ed5, 0x080c, 0xcc30, 0x1518, 0x2071, 0x1800, 0x70d8, 0x9085,
++      0x0003, 0x70da, 0x00f6, 0x2079, 0x0100, 0x72a8, 0x9284, 0x00ff,
++      0x7076, 0x78e6, 0x9284, 0xff00, 0x7278, 0x9205, 0x707a, 0x78ea,
++      0x00fe, 0x70e3, 0x0000, 0x080c, 0x5f29, 0x0120, 0x2011, 0x19cd,
++      0x2013, 0x07d0, 0xd0ac, 0x1128, 0x080c, 0x2b1e, 0x0010, 0x080c,
++      0xcc62, 0x002e, 0x00ee, 0x080c, 0x9554, 0x0804, 0xb9ea, 0x080c,
++      0x9554, 0x0005, 0x2600, 0x0002, 0xbc0e, 0xbc0e, 0xbc0e, 0xbc0e,
++      0xbc0e, 0xbc10, 0xbc0e, 0xbc0e, 0xbc0e, 0xbc0e, 0xbc2b, 0xbc0e,
++      0xbc0e, 0xbc0e, 0xbc3d, 0xbc4a, 0xbc7b, 0xbc0e, 0x080c, 0x0d84,
++      0x080c, 0xcbbe, 0x1d20, 0x080c, 0x2e39, 0x1d08, 0x080c, 0xbd93,
++      0x1148, 0x7038, 0x6016, 0x6007, 0x0045, 0x6003, 0x0001, 0x080c,
++      0x7c1d, 0x0005, 0x080c, 0x2d1a, 0x6007, 0x0001, 0x6003, 0x0001,
++      0x080c, 0x7c1d, 0x0005, 0x080c, 0xcbbe, 0x1948, 0x080c, 0x2e39,
++      0x1930, 0x080c, 0xbd93, 0x1d70, 0x703c, 0x6016, 0x6007, 0x004a,
++      0x6003, 0x0001, 0x080c, 0x7c1d, 0x0005, 0x080c, 0xbc9b, 0x0904,
++      0xbbf7, 0x6007, 0x004e, 0x6003, 0x0001, 0x080c, 0x7c1d, 0x080c,
++      0x8125, 0x0005, 0x6007, 0x004f, 0x6017, 0x0000, 0x7134, 0x918c,
++      0x00ff, 0x81ff, 0x0508, 0x9186, 0x0001, 0x1160, 0x7140, 0x2001,
++      0x198a, 0x2004, 0x9106, 0x11b0, 0x7144, 0x2001, 0x198b, 0x2004,
++      0x9106, 0x0190, 0x9186, 0x0002, 0x1168, 0x2011, 0x0276, 0x20a9,
++      0x0004, 0x6010, 0x0096, 0x2048, 0x2019, 0x000a, 0x080c, 0xa439,
++      0x009e, 0x0110, 0x6017, 0x0001, 0x6003, 0x0001, 0x080c, 0x7c1d,
++      0x080c, 0x8125, 0x0005, 0x6007, 0x0050, 0x703c, 0x6016, 0x0ca0,
++      0x00e6, 0x2071, 0x0260, 0x00b6, 0x00c6, 0x2260, 0x6010, 0x2058,
++      0xb8bc, 0xd084, 0x0150, 0x7128, 0x6048, 0x9106, 0x1120, 0x712c,
++      0x6044, 0x9106, 0x0110, 0x9006, 0x0010, 0x9085, 0x0001, 0x00ce,
++      0x00be, 0x00ee, 0x0005, 0x0016, 0x0096, 0x0086, 0x00e6, 0x01c6,
++      0x01d6, 0x0126, 0x2091, 0x8000, 0x2071, 0x1800, 0x7088, 0x908a,
++      0x00f9, 0x16e8, 0x20e1, 0x0000, 0x2001, 0x196d, 0x2003, 0x0000,
++      0x080c, 0x0fc7, 0x05a0, 0x2900, 0x6016, 0x7088, 0x8004, 0xa816,
++      0x908a, 0x001e, 0x02d0, 0xa833, 0x001e, 0x20a9, 0x001e, 0xa860,
++      0x20e8, 0xa85c, 0x9080, 0x001b, 0x20a0, 0x2001, 0x196d, 0x0016,
++      0x200c, 0x0471, 0x001e, 0x2940, 0x080c, 0x0fc7, 0x01c0, 0x2900,
++      0xa006, 0x2100, 0x81ff, 0x0180, 0x0c18, 0xa832, 0x20a8, 0xa860,
++      0x20e8, 0xa85c, 0x9080, 0x001b, 0x20a0, 0x2001, 0x196d, 0x0016,
++      0x200c, 0x00b1, 0x001e, 0x0000, 0x9085, 0x0001, 0x0048, 0x2071,
++      0x1800, 0x708b, 0x0000, 0x6014, 0x2048, 0x080c, 0x0f60, 0x9006,
++      0x012e, 0x01de, 0x01ce, 0x00ee, 0x008e, 0x009e, 0x001e, 0x0005,
++      0x0006, 0x0016, 0x0026, 0x0036, 0x00c6, 0x918c, 0xffff, 0x11a8,
++      0x080c, 0x1fed, 0x2099, 0x026c, 0x2001, 0x0014, 0x3518, 0x9312,
++      0x1218, 0x23a8, 0x4003, 0x00f8, 0x20a8, 0x4003, 0x22a8, 0x8108,
++      0x080c, 0x1fed, 0x2099, 0x0260, 0x0ca8, 0x080c, 0x1fed, 0x2061,
++      0x196d, 0x6004, 0x2098, 0x6008, 0x3518, 0x9312, 0x1218, 0x23a8,
++      0x4003, 0x0048, 0x20a8, 0x4003, 0x22a8, 0x8108, 0x080c, 0x1fed,
++      0x2099, 0x0260, 0x0ca8, 0x2061, 0x196d, 0x2019, 0x0280, 0x3300,
++      0x931e, 0x0110, 0x6006, 0x0020, 0x2001, 0x0260, 0x6006, 0x8108,
++      0x2162, 0x9292, 0x0021, 0x9296, 0xffff, 0x620a, 0x00ce, 0x003e,
++      0x002e, 0x001e, 0x000e, 0x0005, 0x0006, 0x0016, 0x0026, 0x0036,
++      0x00c6, 0x81ff, 0x11b8, 0x080c, 0x2005, 0x20a1, 0x024c, 0x2001,
++      0x0014, 0x3518, 0x9312, 0x1218, 0x23a8, 0x4003, 0x0418, 0x20a8,
++      0x4003, 0x82ff, 0x01f8, 0x22a8, 0x8108, 0x080c, 0x2005, 0x20a1,
++      0x0240, 0x0c98, 0x080c, 0x2005, 0x2061, 0x1970, 0x6004, 0x20a0,
++      0x6008, 0x3518, 0x9312, 0x1218, 0x23a8, 0x4003, 0x0058, 0x20a8,
++      0x4003, 0x82ff, 0x0138, 0x22a8, 0x8108, 0x080c, 0x2005, 0x20a1,
++      0x0240, 0x0c98, 0x2061, 0x1970, 0x2019, 0x0260, 0x3400, 0x931e,
++      0x0110, 0x6006, 0x0020, 0x2001, 0x0240, 0x6006, 0x8108, 0x2162,
++      0x9292, 0x0021, 0x9296, 0xffff, 0x620a, 0x00ce, 0x003e, 0x002e,
++      0x001e, 0x000e, 0x0005, 0x00b6, 0x0066, 0x6610, 0x2658, 0xbe04,
++      0x96b4, 0xff00, 0x8637, 0x9686, 0x0006, 0x0170, 0x9686, 0x0004,
++      0x0158, 0xbe04, 0x96b4, 0x00ff, 0x9686, 0x0006, 0x0128, 0x9686,
++      0x0004, 0x0110, 0x9085, 0x0001, 0x006e, 0x00be, 0x0005, 0x00d6,
++      0x0441, 0x00de, 0x0005, 0x00d6, 0x0489, 0x11e8, 0x680c, 0x908c,
++      0xff00, 0x6820, 0x9084, 0x00ff, 0x9115, 0x6216, 0x6824, 0x602e,
++      0xd1e4, 0x0118, 0x2009, 0x0001, 0x0058, 0xd1ec, 0x0160, 0x6920,
++      0x918c, 0x00ff, 0x6824, 0x080c, 0x23fd, 0x1128, 0x2110, 0x900e,
++      0x080c, 0x2d5f, 0x0018, 0x9085, 0x0001, 0x0008, 0x9006, 0x00de,
++      0x0005, 0x2069, 0x026d, 0x6800, 0x9082, 0x0010, 0x1228, 0x6017,
++      0x0000, 0x9085, 0x0001, 0x0008, 0x9006, 0x0005, 0x6017, 0x0000,
++      0x2069, 0x026c, 0x6808, 0x9084, 0xff00, 0x9086, 0x0800, 0x1140,
++      0x6800, 0x9084, 0x00ff, 0x908e, 0x0014, 0x0110, 0x908e, 0x0010,
++      0x0005, 0x6004, 0x90b2, 0x0053, 0x1a0c, 0x0d84, 0x91b6, 0x0013,
++      0x1130, 0x2008, 0x91b2, 0x0040, 0x1a04, 0xbf24, 0x0092, 0x91b6,
++      0x0027, 0x0120, 0x91b6, 0x0014, 0x190c, 0x0d84, 0x2001, 0x0007,
++      0x080c, 0x5b8d, 0x080c, 0x8026, 0x080c, 0x9584, 0x080c, 0x8125,
++      0x0005, 0xbe59, 0xbe5b, 0xbe59, 0xbe59, 0xbe59, 0xbe5b, 0xbe6a,
++      0xbf1d, 0xbebc, 0xbf1d, 0xbece, 0xbf1d, 0xbe6a, 0xbf1d, 0xbf15,
++      0xbf1d, 0xbf15, 0xbf1d, 0xbf1d, 0xbe59, 0xbe59, 0xbe59, 0xbe59,
++      0xbe59, 0xbe59, 0xbe59, 0xbe59, 0xbe59, 0xbe59, 0xbe59, 0xbe5b,
++      0xbe59, 0xbf1d, 0xbe59, 0xbe59, 0xbf1d, 0xbe59, 0xbf1a, 0xbf1d,
++      0xbe59, 0xbe59, 0xbe59, 0xbe59, 0xbf1d, 0xbf1d, 0xbe59, 0xbf1d,
++      0xbf1d, 0xbe59, 0xbe65, 0xbe59, 0xbe59, 0xbe59, 0xbe59, 0xbf19,
++      0xbf1d, 0xbe59, 0xbe59, 0xbf1d, 0xbf1d, 0xbe59, 0xbe59, 0xbe59,
++      0xbe59, 0x080c, 0x0d84, 0x080c, 0x8026, 0x080c, 0xb76f, 0x6003,
++      0x0002, 0x080c, 0x8125, 0x0804, 0xbf23, 0x9006, 0x080c, 0x5b4d,
++      0x0804, 0xbf1d, 0x080c, 0x5f25, 0x1904, 0xbf1d, 0x9006, 0x080c,
++      0x5b4d, 0x6010, 0x2058, 0xb810, 0x9086, 0x00ff, 0x1140, 0x00f6,
++      0x2079, 0x1800, 0x78a0, 0x8000, 0x78a2, 0x00fe, 0x0428, 0x6010,
++      0x2058, 0xb8b0, 0x9005, 0x1178, 0x080c, 0xb759, 0x1904, 0xbf1d,
++      0x0036, 0x0046, 0xbba0, 0x2021, 0x0007, 0x080c, 0x44f9, 0x004e,
++      0x003e, 0x0804, 0xbf1d, 0x080c, 0x2e64, 0x1904, 0xbf1d, 0x2001,
++      0x1800, 0x2004, 0x9086, 0x0002, 0x1138, 0x00f6, 0x2079, 0x1800,
++      0x78a0, 0x8000, 0x78a2, 0x00fe, 0x2001, 0x0002, 0x080c, 0x5b61,
++      0x080c, 0x8026, 0x6023, 0x0001, 0x6003, 0x0001, 0x6007, 0x0002,
++      0x080c, 0x7c1d, 0x080c, 0x8125, 0x6110, 0x2158, 0x2009, 0x0001,
++      0x080c, 0x7826, 0x0804, 0xbf23, 0x6610, 0x2658, 0xbe04, 0x96b4,
++      0xff00, 0x8637, 0x9686, 0x0006, 0x0904, 0xbf1d, 0x9686, 0x0004,
++      0x0904, 0xbf1d, 0x2001, 0x0004, 0x0804, 0xbf1b, 0x2001, 0x1800,
++      0x2004, 0x9086, 0x0003, 0x1158, 0x0036, 0x0046, 0x6010, 0x2058,
++      0xbba0, 0x2021, 0x0006, 0x080c, 0x44f9, 0x004e, 0x003e, 0x2001,
++      0x0006, 0x080c, 0xbf41, 0x6610, 0x2658, 0xbe04, 0x0066, 0x96b4,
++      0xff00, 0x8637, 0x9686, 0x0006, 0x006e, 0x0168, 0x2001, 0x0006,
++      0x080c, 0x5b8d, 0x9284, 0x00ff, 0x908e, 0x0007, 0x1120, 0x2001,
++      0x0006, 0x080c, 0x5b61, 0x080c, 0x5f25, 0x11f8, 0x2001, 0x1836,
++      0x2004, 0xd0a4, 0x01d0, 0xbe04, 0x96b4, 0x00ff, 0x9686, 0x0006,
++      0x01a0, 0x00f6, 0x2079, 0x1800, 0x78a0, 0x8000, 0x78a2, 0x00fe,
++      0x0804, 0xbea4, 0x2001, 0x0004, 0x0030, 0x2001, 0x0006, 0x0449,
++      0x0020, 0x0018, 0x0010, 0x080c, 0x5b8d, 0x080c, 0x8026, 0x080c,
++      0x9554, 0x080c, 0x8125, 0x0005, 0x2600, 0x0002, 0xbf38, 0xbf38,
++      0xbf38, 0xbf38, 0xbf38, 0xbf3a, 0xbf38, 0xbf38, 0xbf38, 0xbf38,
++      0xbf3a, 0xbf38, 0xbf38, 0xbf38, 0xbf3a, 0xbf3a, 0xbf3a, 0xbf3a,
++      0x080c, 0x0d84, 0x080c, 0x8026, 0x080c, 0x9554, 0x080c, 0x8125,
++      0x0005, 0x0016, 0x00b6, 0x00d6, 0x6110, 0x2158, 0xb900, 0xd184,
++      0x0138, 0x080c, 0x5b61, 0x9006, 0x080c, 0x5b4d, 0x080c, 0x2d3f,
++      0x00de, 0x00be, 0x001e, 0x0005, 0x6610, 0x2658, 0xb804, 0x9084,
++      0xff00, 0x8007, 0x90b2, 0x000c, 0x1a0c, 0x0d84, 0x91b6, 0x0015,
++      0x1110, 0x003b, 0x0028, 0x91b6, 0x0016, 0x190c, 0x0d84, 0x006b,
++      0x0005, 0x9f7a, 0x9f7a, 0x9f7a, 0x9f7a, 0x9f7a, 0x9f7a, 0xbfb9,
++      0xbf81, 0x9f7a, 0x9f7a, 0x9f7a, 0x9f7a, 0x9f7a, 0x9f7a, 0x9f7a,
++      0x9f7a, 0x9f7a, 0x9f7a, 0xbfb9, 0xbfc0, 0x9f7a, 0x9f7a, 0x9f7a,
++      0x9f7a, 0x00f6, 0x080c, 0x5f25, 0x11c0, 0x6010, 0x905d, 0x01a8,
++      0xb8b0, 0x9005, 0x0190, 0x9006, 0x080c, 0x5b4d, 0x2001, 0x0002,
++      0x080c, 0x5b61, 0x6023, 0x0001, 0x6003, 0x0001, 0x6007, 0x0002,
++      0x080c, 0x7c1d, 0x080c, 0x8125, 0x00d0, 0x2011, 0x0263, 0x2204,
++      0x8211, 0x220c, 0x080c, 0x23fd, 0x1190, 0x080c, 0x5c0d, 0x0118,
++      0x080c, 0x9554, 0x0060, 0xb810, 0x0006, 0xb814, 0x0006, 0x080c,
++      0x56f3, 0x000e, 0xb816, 0x000e, 0xb812, 0x080c, 0x9554, 0x00fe,
++      0x0005, 0x6604, 0x96b6, 0x001e, 0x1110, 0x080c, 0x9554, 0x0005,
++      0x080c, 0xa2b9, 0x1148, 0x6003, 0x0001, 0x6007, 0x0001, 0x080c,
++      0x7c1d, 0x080c, 0x8125, 0x0010, 0x080c, 0x9554, 0x0005, 0x6004,
++      0x908a, 0x0053, 0x1a0c, 0x0d84, 0x080c, 0x8026, 0x080c, 0x9584,
++      0x080c, 0x8125, 0x0005, 0x9182, 0x0040, 0x0002, 0xbff1, 0xbff1,
++      0xbff1, 0xbff1, 0xbff3, 0xbff1, 0xbff1, 0xbff1, 0xbff1, 0xbff1,
++      0xbff1, 0xbff1, 0xbff1, 0xbff1, 0xbff1, 0xbff1, 0xbff1, 0xbff1,
++      0xbff1, 0x080c, 0x0d84, 0x0096, 0x00b6, 0x00d6, 0x00e6, 0x00f6,
++      0x0046, 0x0026, 0x6210, 0x2258, 0xb8ac, 0x9005, 0x11a8, 0x6106,
++      0x2071, 0x0260, 0x7444, 0x94a4, 0xff00, 0x0904, 0xc05a, 0x080c,
++      0xcccc, 0x1170, 0x9486, 0x2000, 0x1158, 0x2009, 0x0001, 0x2011,
++      0x0200, 0x080c, 0x7a0a, 0x0020, 0x9026, 0x080c, 0xcc03, 0x0c38,
++      0x080c, 0x0fae, 0x090c, 0x0d84, 0x6003, 0x0007, 0xa867, 0x010d,
++      0x9006, 0xa802, 0xa86a, 0xac8a, 0x2c00, 0xa88e, 0x6008, 0xa8e2,
++      0x6010, 0x2058, 0xb8a0, 0x7130, 0xa97a, 0x0016, 0xa876, 0xa87f,
++      0x0000, 0xa883, 0x0000, 0xa887, 0x0036, 0x080c, 0x61a9, 0x001e,
++      0x080c, 0xcccc, 0x1904, 0xc0ba, 0x9486, 0x2000, 0x1130, 0x2019,
++      0x0017, 0x080c, 0xc941, 0x0804, 0xc0ba, 0x9486, 0x0400, 0x1130,
++      0x2019, 0x0002, 0x080c, 0xc8f8, 0x0804, 0xc0ba, 0x9486, 0x0200,
++      0x1110, 0x080c, 0xc8dd, 0x9486, 0x1000, 0x1110, 0x080c, 0xc926,
++      0x0804, 0xc0ba, 0x2069, 0x1a3d, 0x6a00, 0xd284, 0x0904, 0xc124,
++      0x9284, 0x0300, 0x1904, 0xc11d, 0x6804, 0x9005, 0x0904, 0xc105,
++      0x2d78, 0x6003, 0x0007, 0x080c, 0x0fc7, 0x0904, 0xc0c6, 0x7800,
++      0xd08c, 0x1118, 0x7804, 0x8001, 0x7806, 0x6017, 0x0000, 0x2001,
++      0x180e, 0x2004, 0xd084, 0x1904, 0xc128, 0x9006, 0xa802, 0xa867,
++      0x0116, 0xa86a, 0x6008, 0xa8e2, 0x2c00, 0xa87a, 0x6010, 0x2058,
++      0xb8a0, 0x7130, 0xa9b6, 0xa876, 0xb928, 0xa9ba, 0xb92c, 0xa9be,
++      0xb930, 0xa9c2, 0xb934, 0xa9c6, 0xa883, 0x003d, 0x7044, 0x9084,
++      0x0003, 0x9080, 0xc0c2, 0x2005, 0xa87e, 0x20a9, 0x000a, 0x2001,
++      0x0270, 0xaa5c, 0x9290, 0x0021, 0x2009, 0x0205, 0x200b, 0x0080,
++      0x20e1, 0x0000, 0xab60, 0x23e8, 0x2098, 0x22a0, 0x4003, 0x200b,
++      0x0000, 0x2001, 0x027a, 0x200c, 0xa9b2, 0x8000, 0x200c, 0xa9ae,
++      0x080c, 0x61a9, 0x002e, 0x004e, 0x00fe, 0x00ee, 0x00de, 0x00be,
++      0x009e, 0x0005, 0x0000, 0x0080, 0x0040, 0x0000, 0x2001, 0x180f,
++      0x2004, 0xd084, 0x0120, 0x080c, 0x0fae, 0x1904, 0xc06f, 0x6017,
++      0xf100, 0x6003, 0x0001, 0x6007, 0x0041, 0x080c, 0x7bcb, 0x080c,
++      0x8125, 0x0c00, 0x2069, 0x0260, 0x6848, 0x9084, 0xff00, 0x9086,
++      0x1200, 0x1198, 0x686c, 0x9084, 0x00ff, 0x0016, 0x6114, 0x918c,
++      0xf700, 0x910d, 0x6116, 0x001e, 0x6003, 0x0001, 0x6007, 0x0043,
++      0x080c, 0x7bcb, 0x080c, 0x8125, 0x0828, 0x6868, 0x602e, 0x686c,
++      0x6032, 0x6017, 0xf200, 0x6003, 0x0001, 0x6007, 0x0041, 0x080c,
++      0x7bcb, 0x080c, 0x8125, 0x0804, 0xc0ba, 0x2001, 0x180d, 0x2004,
++      0xd0ec, 0x0120, 0x2011, 0x8049, 0x080c, 0x447f, 0x6017, 0xf300,
++      0x0010, 0x6017, 0xf100, 0x6003, 0x0001, 0x6007, 0x0041, 0x080c,
++      0x7bcb, 0x080c, 0x8125, 0x0804, 0xc0ba, 0x6017, 0xf500, 0x0c98,
++      0x6017, 0xf600, 0x0804, 0xc0da, 0x6017, 0xf200, 0x0804, 0xc0da,
++      0xa867, 0x0146, 0xa86b, 0x0000, 0x6008, 0xa886, 0x2c00, 0xa87a,
++      0x7044, 0x9084, 0x0003, 0x9080, 0xc0c2, 0x2005, 0xa87e, 0x2928,
++      0x6010, 0x2058, 0xb8a0, 0xa876, 0xb828, 0xa88a, 0xb82c, 0xa88e,
++      0xb830, 0xa892, 0xb834, 0xa896, 0xa883, 0x003d, 0x2009, 0x0205,
++      0x2104, 0x9085, 0x0080, 0x200a, 0x20e1, 0x0000, 0x2011, 0x0210,
++      0x2214, 0x9294, 0x0fff, 0xaaa2, 0x9282, 0x0111, 0x1a0c, 0x0d84,
++      0x8210, 0x821c, 0x2001, 0x026c, 0x2098, 0xa860, 0x20e8, 0xa85c,
++      0x9080, 0x0029, 0x20a0, 0x2011, 0xc1a4, 0x2041, 0x0001, 0x223d,
++      0x9784, 0x00ff, 0x9322, 0x1208, 0x2300, 0x20a8, 0x4003, 0x931a,
++      0x0530, 0x8210, 0xd7fc, 0x1130, 0x8d68, 0x2d0a, 0x2001, 0x0260,
++      0x2098, 0x0c68, 0x2950, 0x080c, 0x0fc7, 0x0170, 0x2900, 0xb002,
++      0xa867, 0x0147, 0xa86b, 0x0000, 0xa860, 0x20e8, 0xa85c, 0x9080,
++      0x001b, 0x20a0, 0x8840, 0x08d8, 0x2548, 0xa800, 0x902d, 0x0118,
++      0x080c, 0x0fe0, 0x0cc8, 0x080c, 0x0fe0, 0x0804, 0xc0c6, 0x2548,
++      0x8847, 0x9885, 0x0046, 0xa866, 0x2009, 0x0205, 0x200b, 0x0000,
++      0x080c, 0xc970, 0x0804, 0xc0ba, 0x8010, 0x0004, 0x801a, 0x0006,
++      0x8018, 0x0008, 0x8016, 0x000a, 0x8014, 0x9186, 0x0013, 0x1160,
++      0x6004, 0x908a, 0x0054, 0x1a0c, 0x0d84, 0x9082, 0x0040, 0x0a0c,
++      0x0d84, 0x2008, 0x0804, 0xc255, 0x9186, 0x0051, 0x0108, 0x00c0,
++      0x2001, 0x0109, 0x2004, 0xd084, 0x0904, 0xc206, 0x0126, 0x2091,
++      0x2800, 0x0006, 0x0016, 0x0026, 0x080c, 0x7ab7, 0x002e, 0x001e,
++      0x000e, 0x012e, 0x6000, 0x9086, 0x0002, 0x1580, 0x0804, 0xc29d,
++      0x9186, 0x0027, 0x0530, 0x9186, 0x0048, 0x0128, 0x9186, 0x0014,
++      0x0500, 0x190c, 0x0d84, 0x2001, 0x0109, 0x2004, 0xd084, 0x01f0,
++      0x00c6, 0x0126, 0x2091, 0x2800, 0x00c6, 0x2061, 0x0100, 0x0006,
++      0x0016, 0x0026, 0x080c, 0x7ab7, 0x002e, 0x001e, 0x000e, 0x00ce,
++      0x012e, 0x00ce, 0x6000, 0x9086, 0x0004, 0x190c, 0x0d84, 0x0804,
++      0xc366, 0x6004, 0x9082, 0x0040, 0x2008, 0x001a, 0x080c, 0x95e9,
++      0x0005, 0xc21c, 0xc21e, 0xc21e, 0xc245, 0xc21c, 0xc21c, 0xc21c,
++      0xc21c, 0xc21c, 0xc21c, 0xc21c, 0xc21c, 0xc21c, 0xc21c, 0xc21c,
++      0xc21c, 0xc21c, 0xc21c, 0xc21c, 0x080c, 0x0d84, 0x080c, 0x8026,
++      0x080c, 0x8125, 0x0036, 0x0096, 0x6014, 0x904d, 0x01d8, 0x080c,
++      0xb0ad, 0x01c0, 0x6003, 0x0002, 0x6010, 0x00b6, 0x2058, 0xb800,
++      0x00be, 0xd0bc, 0x1178, 0x2019, 0x0004, 0x080c, 0xc970, 0x6017,
++      0x0000, 0x6018, 0x9005, 0x1120, 0x2001, 0x1954, 0x2004, 0x601a,
++      0x6003, 0x0007, 0x009e, 0x003e, 0x0005, 0x0096, 0x080c, 0x8026,
++      0x080c, 0x8125, 0x080c, 0xb0ad, 0x0120, 0x6014, 0x2048, 0x080c,
++      0x0fe0, 0x080c, 0x9584, 0x009e, 0x0005, 0x0002, 0xc269, 0xc280,
++      0xc26b, 0xc297, 0xc269, 0xc269, 0xc269, 0xc269, 0xc269, 0xc269,
++      0xc269, 0xc269, 0xc269, 0xc269, 0xc269, 0xc269, 0xc269, 0xc269,
++      0xc269, 0x080c, 0x0d84, 0x0096, 0x080c, 0x8026, 0x6014, 0x2048,
++      0xa87c, 0xd0b4, 0x0138, 0x6003, 0x0007, 0x2009, 0x0043, 0x080c,
++      0x95ce, 0x0010, 0x6003, 0x0004, 0x080c, 0x8125, 0x009e, 0x0005,
++      0x080c, 0x8026, 0x080c, 0xb0ad, 0x0138, 0x6114, 0x0096, 0x2148,
++      0xa97c, 0x009e, 0xd1ec, 0x1138, 0x080c, 0x79df, 0x080c, 0x9554,
++      0x080c, 0x8125, 0x0005, 0x080c, 0xcbc7, 0x0db0, 0x0cc8, 0x080c,
++      0x8026, 0x2009, 0x0041, 0x0804, 0xc3ee, 0x9182, 0x0040, 0x0002,
++      0xc2b3, 0xc2b5, 0xc2b3, 0xc2b3, 0xc2b3, 0xc2b3, 0xc2b3, 0xc2b3,
++      0xc2b3, 0xc2b3, 0xc2b3, 0xc2b3, 0xc2b3, 0xc2b3, 0xc2b3, 0xc2b3,
++      0xc2b3, 0xc2b6, 0xc2b3, 0x080c, 0x0d84, 0x0005, 0x00d6, 0x080c,
++      0x79df, 0x00de, 0x080c, 0xcc1f, 0x080c, 0x9554, 0x0005, 0x9182,
++      0x0040, 0x0002, 0xc2d5, 0xc2d5, 0xc2d5, 0xc2d5, 0xc2d5, 0xc2d5,
++      0xc2d5, 0xc2d5, 0xc2d5, 0xc2d7, 0xc32e, 0xc2d5, 0xc2d5, 0xc2d5,
++      0xc2d5, 0xc32e, 0xc2d5, 0xc2d5, 0xc2d5, 0x080c, 0x0d84, 0x2001,
++      0x0105, 0x2004, 0x9084, 0x1800, 0x1904, 0xc32e, 0x2001, 0x1872,
++      0x2004, 0xd0e4, 0x1528, 0x603b, 0x0000, 0x080c, 0x80d6, 0x6014,
++      0x0096, 0x2048, 0xa87c, 0xd0fc, 0x0188, 0x908c, 0x0003, 0x918e,
++      0x0002, 0x0508, 0x2001, 0x180c, 0x2004, 0xd0d4, 0x11e0, 0x080c,
++      0x8202, 0x2009, 0x0041, 0x009e, 0x0804, 0xc3ee, 0x080c, 0x8202,
++      0x6003, 0x0007, 0x601b, 0x0000, 0x080c, 0x79df, 0x009e, 0x0005,
++      0x2001, 0x0100, 0x2004, 0x9082, 0x0005, 0x0aa8, 0x2001, 0x011f,
++      0x2004, 0x603a, 0x0890, 0x2001, 0x180c, 0x200c, 0xc1d4, 0x2102,
++      0xd1cc, 0x0110, 0x080c, 0x2809, 0x080c, 0x8202, 0x6014, 0x2048,
++      0xa97c, 0xd1ec, 0x1130, 0x080c, 0x79df, 0x080c, 0x9554, 0x009e,
++      0x0005, 0x080c, 0xcbc7, 0x0db8, 0x009e, 0x0005, 0x2001, 0x180c,
++      0x200c, 0xc1d4, 0x2102, 0x0036, 0x080c, 0x80d6, 0x080c, 0x8202,
++      0x6014, 0x0096, 0x2048, 0x6010, 0x00b6, 0x2058, 0xb800, 0x00be,
++      0xd0bc, 0x0188, 0xa87c, 0x9084, 0x0003, 0x9086, 0x0002, 0x0140,
++      0xa8ac, 0x6330, 0x931a, 0x6332, 0xa8b0, 0x632c, 0x931b, 0x632e,
++      0x6003, 0x0002, 0x0080, 0x2019, 0x0004, 0x080c, 0xc970, 0x6018,
++      0x9005, 0x1128, 0x2001, 0x1954, 0x2004, 0x8003, 0x601a, 0x6017,
++      0x0000, 0x6003, 0x0007, 0x009e, 0x003e, 0x0005, 0x9182, 0x0040,
++      0x0002, 0xc37d, 0xc37d, 0xc37d, 0xc37d, 0xc37d, 0xc37d, 0xc37d,
++      0xc37d, 0xc37f, 0xc37d, 0xc37d, 0xc37d, 0xc37d, 0xc37d, 0xc37d,
++      0xc37d, 0xc37d, 0xc37d, 0xc37d, 0xc3ca, 0x080c, 0x0d84, 0x6014,
++      0x0096, 0x2048, 0xa834, 0xaa38, 0x6110, 0x00b6, 0x2058, 0xb900,
++      0x00be, 0xd1bc, 0x1190, 0x920d, 0x1518, 0xa87c, 0xd0fc, 0x0128,
++      0x2009, 0x0041, 0x00de, 0x0804, 0xc3ee, 0x6003, 0x0007, 0x601b,
++      0x0000, 0x080c, 0x79df, 0x009e, 0x0005, 0x6124, 0xd1f4, 0x1d58,
++      0x0006, 0x0046, 0xacac, 0x9422, 0xa9b0, 0x2200, 0x910b, 0x6030,
++      0x9420, 0x6432, 0x602c, 0x9109, 0x612e, 0x004e, 0x000e, 0x08d8,
++      0x6110, 0x00b6, 0x2158, 0xb900, 0x00be, 0xd1bc, 0x1178, 0x2009,
++      0x180d, 0x210c, 0xd19c, 0x0118, 0x6003, 0x0007, 0x0010, 0x6003,
++      0x0006, 0x00e9, 0x080c, 0x79e1, 0x009e, 0x0005, 0x6003, 0x0002,
++      0x009e, 0x0005, 0x6024, 0xd0f4, 0x0128, 0x080c, 0x1489, 0x1904,
++      0xc37f, 0x0005, 0x6014, 0x0096, 0x2048, 0xa834, 0xa938, 0x009e,
++      0x9105, 0x1120, 0x080c, 0x1489, 0x1904, 0xc37f, 0x0005, 0xd2fc,
++      0x0140, 0x8002, 0x8000, 0x8212, 0x9291, 0x0000, 0x2009, 0x0009,
++      0x0010, 0x2009, 0x0015, 0xaa9a, 0xa896, 0x0005, 0x9182, 0x0040,
++      0x0208, 0x0062, 0x9186, 0x0013, 0x0120, 0x9186, 0x0014, 0x190c,
++      0x0d84, 0x6024, 0xd0dc, 0x090c, 0x0d84, 0x0005, 0xc411, 0xc418,
++      0xc424, 0xc430, 0xc411, 0xc411, 0xc411, 0xc411, 0xc411, 0xc413,
++      0xc413, 0xc411, 0xc411, 0xc411, 0xc411, 0xc413, 0xc411, 0xc413,
++      0xc411, 0x080c, 0x0d84, 0x6024, 0xd0dc, 0x090c, 0x0d84, 0x0005,
++      0x6003, 0x0001, 0x6106, 0x080c, 0x7bcb, 0x0126, 0x2091, 0x8000,
++      0x080c, 0x8125, 0x012e, 0x0005, 0x6003, 0x0001, 0x6106, 0x080c,
++      0x7bcb, 0x0126, 0x2091, 0x8000, 0x080c, 0x8125, 0x012e, 0x0005,
++      0x6003, 0x0003, 0x6106, 0x2c10, 0x080c, 0x18b7, 0x0126, 0x2091,
++      0x8000, 0x080c, 0x7c3a, 0x080c, 0x820b, 0x012e, 0x0005, 0x0126,
++      0x2091, 0x8000, 0x0036, 0x0096, 0x9182, 0x0040, 0x0023, 0x009e,
++      0x003e, 0x012e, 0x0005, 0xc45b, 0xc45d, 0xc46f, 0xc489, 0xc45b,
++      0xc45b, 0xc45b, 0xc45b, 0xc45b, 0xc45b, 0xc45b, 0xc45b, 0xc45b,
++      0xc45b, 0xc45b, 0xc45b, 0x080c, 0x0d84, 0x6014, 0x2048, 0xa87c,
++      0xd0fc, 0x01f8, 0x909c, 0x0003, 0x939e, 0x0003, 0x01d0, 0x6003,
++      0x0001, 0x6106, 0x080c, 0x7bcb, 0x080c, 0x8125, 0x0470, 0x6014,
++      0x2048, 0xa87c, 0xd0fc, 0x0168, 0x909c, 0x0003, 0x939e, 0x0003,
++      0x0140, 0x6003, 0x0001, 0x6106, 0x080c, 0x7bcb, 0x080c, 0x8125,
++      0x00e0, 0x901e, 0x6316, 0x631a, 0x2019, 0x0004, 0x080c, 0xc970,
++      0x00a0, 0x6014, 0x2048, 0xa87c, 0xd0fc, 0x0d98, 0x909c, 0x0003,
++      0x939e, 0x0003, 0x0d70, 0x6003, 0x0003, 0x6106, 0x2c10, 0x080c,
++      0x18b7, 0x080c, 0x7c3a, 0x080c, 0x820b, 0x0005, 0x080c, 0x8026,
++      0x6114, 0x81ff, 0x0158, 0x0096, 0x2148, 0x080c, 0xcc6b, 0x0036,
++      0x2019, 0x0029, 0x080c, 0xc970, 0x003e, 0x009e, 0x080c, 0x9584,
++      0x080c, 0x8125, 0x0005, 0x080c, 0x80d6, 0x6114, 0x81ff, 0x0158,
++      0x0096, 0x2148, 0x080c, 0xcc6b, 0x0036, 0x2019, 0x0029, 0x080c,
++      0xc970, 0x003e, 0x009e, 0x080c, 0x9584, 0x080c, 0x820b, 0x0005,
++      0x9182, 0x0085, 0x0002, 0xc4da, 0xc4d8, 0xc4d8, 0xc4e6, 0xc4d8,
++      0xc4d8, 0xc4d8, 0xc4d8, 0xc4d8, 0xc4d8, 0xc4d8, 0xc4d8, 0xc4d8,
++      0x080c, 0x0d84, 0x6003, 0x000b, 0x6106, 0x080c, 0x7bcb, 0x0126,
++      0x2091, 0x8000, 0x080c, 0x8125, 0x012e, 0x0005, 0x0026, 0x00e6,
++      0x080c, 0xcbbe, 0x0118, 0x080c, 0x9554, 0x0440, 0x2071, 0x0260,
++      0x7224, 0x6216, 0x2001, 0x180d, 0x2004, 0xd0e4, 0x0150, 0x6010,
++      0x00b6, 0x2058, 0xbca0, 0x00be, 0x2c00, 0x2011, 0x014e, 0x080c,
++      0x9844, 0x7220, 0x080c, 0xc816, 0x0118, 0x6007, 0x0086, 0x0040,
++      0x6007, 0x0087, 0x7224, 0x9296, 0xffff, 0x1110, 0x6007, 0x0086,
++      0x6003, 0x0001, 0x080c, 0x7bcb, 0x080c, 0x8125, 0x00ee, 0x002e,
++      0x0005, 0x9186, 0x0013, 0x1160, 0x6004, 0x908a, 0x0085, 0x0a0c,
++      0x0d84, 0x908a, 0x0092, 0x1a0c, 0x0d84, 0x9082, 0x0085, 0x00a2,
++      0x9186, 0x0027, 0x0130, 0x9186, 0x0014, 0x0118, 0x080c, 0x95e9,
++      0x0050, 0x2001, 0x0007, 0x080c, 0x5b8d, 0x080c, 0x8026, 0x080c,
++      0x9584, 0x080c, 0x8125, 0x0005, 0xc549, 0xc54b, 0xc54b, 0xc549,
++      0xc549, 0xc549, 0xc549, 0xc549, 0xc549, 0xc549, 0xc549, 0xc549,
++      0xc549, 0x080c, 0x0d84, 0x080c, 0x8026, 0x080c, 0x9584, 0x080c,
++      0x8125, 0x0005, 0x9182, 0x0085, 0x0a0c, 0x0d84, 0x9182, 0x0092,
++      0x1a0c, 0x0d84, 0x9182, 0x0085, 0x0002, 0xc56a, 0xc56a, 0xc56a,
++      0xc56c, 0xc56a, 0xc56a, 0xc56a, 0xc56a, 0xc56a, 0xc56a, 0xc56a,
++      0xc56a, 0xc56a, 0x080c, 0x0d84, 0x0005, 0x9186, 0x0013, 0x0148,
++      0x9186, 0x0014, 0x0130, 0x9186, 0x0027, 0x0118, 0x080c, 0x95e9,
++      0x0030, 0x080c, 0x8026, 0x080c, 0x9584, 0x080c, 0x8125, 0x0005,
++      0x0036, 0x080c, 0xcc1f, 0x6043, 0x0000, 0x2019, 0x000b, 0x0031,
++      0x6023, 0x0006, 0x6003, 0x0007, 0x003e, 0x0005, 0x0126, 0x0036,
++      0x2091, 0x8000, 0x0086, 0x2c40, 0x0096, 0x904e, 0x080c, 0x8ef6,
++      0x009e, 0x008e, 0x1550, 0x0076, 0x2c38, 0x080c, 0x8f9a, 0x007e,
++      0x1520, 0x6000, 0x9086, 0x0000, 0x0500, 0x6020, 0x9086, 0x0007,
++      0x01e0, 0x0096, 0x601c, 0xd084, 0x0140, 0x080c, 0xcc1f, 0x080c,
++      0xb76f, 0x080c, 0x17b0, 0x6023, 0x0007, 0x6014, 0x2048, 0x080c,
++      0xb0ad, 0x0110, 0x080c, 0xc970, 0x009e, 0x6017, 0x0000, 0x080c,
++      0xcc1f, 0x6023, 0x0007, 0x080c, 0xb76f, 0x003e, 0x012e, 0x0005,
++      0x00f6, 0x00c6, 0x00b6, 0x0036, 0x0156, 0x2079, 0x0260, 0x7938,
++      0x783c, 0x080c, 0x23fd, 0x15b8, 0x0016, 0x00c6, 0x080c, 0x5c0d,
++      0x1580, 0x001e, 0x00c6, 0x2160, 0x080c, 0xb76c, 0x00ce, 0x002e,
++      0x0026, 0x0016, 0x2019, 0x0029, 0x080c, 0x905b, 0x080c, 0x7d55,
++      0x0076, 0x903e, 0x080c, 0x7c4d, 0x007e, 0x001e, 0x0076, 0x903e,
++      0x080c, 0xc73e, 0x007e, 0x0026, 0xba04, 0x9294, 0xff00, 0x8217,
++      0x9286, 0x0006, 0x0118, 0x9286, 0x0004, 0x1118, 0xbaa0, 0x080c,
++      0x2dd3, 0x002e, 0x001e, 0x080c, 0x56f3, 0xbe12, 0xbd16, 0x9006,
++      0x0010, 0x00ce, 0x001e, 0x015e, 0x003e, 0x00be, 0x00ce, 0x00fe,
++      0x0005, 0x00c6, 0x00d6, 0x00b6, 0x0016, 0x2009, 0x1822, 0x2104,
++      0x9086, 0x0074, 0x1904, 0xc66a, 0x2069, 0x0260, 0x6944, 0x9182,
++      0x0100, 0x06e0, 0x6940, 0x9184, 0x8000, 0x0904, 0xc667, 0x2001,
++      0x194b, 0x2004, 0x9005, 0x1140, 0x6010, 0x2058, 0xb8b0, 0x9005,
++      0x0118, 0x9184, 0x0800, 0x0598, 0x6948, 0x918a, 0x0001, 0x0648,
++      0x080c, 0xccd1, 0x0118, 0x6978, 0xd1fc, 0x11b8, 0x2009, 0x0205,
++      0x200b, 0x0001, 0x693c, 0x81ff, 0x1198, 0x6944, 0x9182, 0x0100,
++      0x02a8, 0x6940, 0x81ff, 0x1178, 0x6948, 0x918a, 0x0001, 0x0288,
++      0x6950, 0x918a, 0x0001, 0x0298, 0x00d0, 0x6017, 0x0100, 0x00a0,
++      0x6017, 0x0300, 0x0088, 0x6017, 0x0500, 0x0070, 0x6017, 0x0700,
++      0x0058, 0x6017, 0x0900, 0x0040, 0x6017, 0x0b00, 0x0028, 0x6017,
++      0x0f00, 0x0010, 0x6017, 0x2d00, 0x9085, 0x0001, 0x0008, 0x9006,
++      0x001e, 0x00be, 0x00de, 0x00ce, 0x0005, 0x00c6, 0x00b6, 0x0026,
++      0x0036, 0x0156, 0x6210, 0x2258, 0xbb04, 0x9394, 0x00ff, 0x9286,
++      0x0006, 0x0178, 0x9286, 0x0004, 0x0160, 0x9394, 0xff00, 0x8217,
++      0x9286, 0x0006, 0x0130, 0x9286, 0x0004, 0x0118, 0x080c, 0x5c1c,
++      0x04e0, 0x2011, 0x0276, 0x20a9, 0x0004, 0x0096, 0x2b48, 0x2019,
++      0x000a, 0x080c, 0xa439, 0x009e, 0x1588, 0x2011, 0x027a, 0x20a9,
++      0x0004, 0x0096, 0x2b48, 0x2019, 0x0006, 0x080c, 0xa439, 0x009e,
++      0x1528, 0x0046, 0x0016, 0xbaa0, 0x2220, 0x9006, 0x2009, 0x1853,
++      0x210c, 0xd1a4, 0x0138, 0x2009, 0x0029, 0x080c, 0xc9c5, 0xb800,
++      0xc0e5, 0xb802, 0x2019, 0x0029, 0x080c, 0x7d55, 0x0076, 0x2039,
++      0x0000, 0x080c, 0x7c4d, 0x2c08, 0x080c, 0xc73e, 0x007e, 0x2001,
++      0x0007, 0x080c, 0x5b8d, 0x001e, 0x004e, 0x9006, 0x015e, 0x003e,
++      0x002e, 0x00be, 0x00ce, 0x0005, 0x00d6, 0x2069, 0x026e, 0x6800,
++      0x9086, 0x0800, 0x0118, 0x6017, 0x0000, 0x0008, 0x9006, 0x00de,
++      0x0005, 0x00b6, 0x00f6, 0x0016, 0x0026, 0x0036, 0x0156, 0x2079,
++      0x026c, 0x7930, 0x7834, 0x080c, 0x23fd, 0x11d0, 0x080c, 0x5c0d,
++      0x11b8, 0x2011, 0x0270, 0x20a9, 0x0004, 0x0096, 0x2b48, 0x2019,
++      0x000a, 0x080c, 0xa439, 0x009e, 0x1158, 0x2011, 0x0274, 0x20a9,
++      0x0004, 0x0096, 0x2b48, 0x2019, 0x0006, 0x080c, 0xa439, 0x009e,
++      0x015e, 0x003e, 0x002e, 0x001e, 0x00fe, 0x00be, 0x0005, 0x00b6,
++      0x0006, 0x0016, 0x0026, 0x0036, 0x0156, 0x2011, 0x0263, 0x2204,
++      0x8211, 0x220c, 0x080c, 0x23fd, 0x11d0, 0x080c, 0x5c0d, 0x11b8,
++      0x2011, 0x0276, 0x20a9, 0x0004, 0x0096, 0x2b48, 0x2019, 0x000a,
++      0x080c, 0xa439, 0x009e, 0x1158, 0x2011, 0x027a, 0x20a9, 0x0004,
++      0x0096, 0x2b48, 0x2019, 0x0006, 0x080c, 0xa439, 0x009e, 0x015e,
++      0x003e, 0x002e, 0x001e, 0x000e, 0x00be, 0x0005, 0x00e6, 0x00c6,
++      0x0086, 0x0076, 0x0066, 0x0056, 0x0046, 0x0026, 0x0126, 0x2091,
++      0x8000, 0x2740, 0x2029, 0x19bd, 0x252c, 0x2021, 0x19c3, 0x2424,
++      0x2061, 0x1cd0, 0x2071, 0x1800, 0x764c, 0x706c, 0x81ff, 0x0150,
++      0x0006, 0x9186, 0x1a72, 0x000e, 0x0128, 0x8001, 0x9602, 0x1a04,
++      0xc7cf, 0x0018, 0x9606, 0x0904, 0xc7cf, 0x2100, 0x9c06, 0x0904,
++      0xc7c6, 0x080c, 0xca01, 0x1904, 0xc7c6, 0x080c, 0xccd8, 0x0904,
++      0xc7c6, 0x080c, 0xc9f1, 0x0904, 0xc7c6, 0x6720, 0x9786, 0x0001,
++      0x1148, 0x080c, 0x2e64, 0x0904, 0xc7ea, 0x6004, 0x9086, 0x0000,
++      0x1904, 0xc7ea, 0x9786, 0x0004, 0x0904, 0xc7ea, 0x9786, 0x0007,
++      0x05e8, 0x2500, 0x9c06, 0x05d0, 0x2400, 0x9c06, 0x05b8, 0x88ff,
++      0x0118, 0x6054, 0x9906, 0x1590, 0x0096, 0x6000, 0x9086, 0x0004,
++      0x1120, 0x0016, 0x080c, 0x17b0, 0x001e, 0x9786, 0x0008, 0x1148,
++      0x080c, 0xb295, 0x1130, 0x080c, 0x9e99, 0x009e, 0x080c, 0x9584,
++      0x00e8, 0x6014, 0x2048, 0x080c, 0xb0ad, 0x01a8, 0x9786, 0x0003,
++      0x1540, 0x080c, 0xc810, 0x0110, 0xa867, 0x0103, 0xab7a, 0xa877,
++      0x0000, 0x080c, 0xcc6b, 0x0016, 0x080c, 0xb374, 0x080c, 0x619c,
++      0x001e, 0x080c, 0xb278, 0x009e, 0x080c, 0x9584, 0x9ce0, 0x0018,
++      0x2001, 0x1818, 0x2004, 0x9c02, 0x1210, 0x0804, 0xc752, 0x012e,
++      0x002e, 0x004e, 0x005e, 0x006e, 0x007e, 0x008e, 0x00ce, 0x00ee,
++      0x0005, 0x9786, 0x0006, 0x1150, 0x9386, 0x0005, 0x0128, 0x080c,
++      0xcc6b, 0x080c, 0xc970, 0x08f8, 0x009e, 0x0c00, 0x9786, 0x000a,
++      0x0968, 0x0838, 0x81ff, 0x09d0, 0x9180, 0x0001, 0x2004, 0x9086,
++      0x0018, 0x0130, 0x9180, 0x0001, 0x2004, 0x9086, 0x002d, 0x1970,
++      0x6000, 0x9086, 0x0002, 0x1950, 0x080c, 0xb284, 0x0130, 0x080c,
++      0xb295, 0x1920, 0x080c, 0x9e99, 0x0038, 0x080c, 0x2d3f, 0x080c,
++      0xb295, 0x1110, 0x080c, 0x9e99, 0x080c, 0x9584, 0x0804, 0xc7c6,
++      0xa864, 0x9084, 0x00ff, 0x9086, 0x0039, 0x0005, 0x00c6, 0x00e6,
++      0x0016, 0x2c08, 0x2170, 0x9006, 0x080c, 0xc997, 0x001e, 0x0120,
++      0x6020, 0x9084, 0x000f, 0x001b, 0x00ee, 0x00ce, 0x0005, 0xc835,
++      0xc835, 0xc835, 0xc835, 0xc835, 0xc835, 0xc837, 0xc835, 0xc835,
++      0xc835, 0xc835, 0x9584, 0x9584, 0xc835, 0x9006, 0x0005, 0x0036,
++      0x0046, 0x0016, 0x7010, 0x00b6, 0x2058, 0xbca0, 0x00be, 0x2c00,
++      0x2009, 0x0020, 0x080c, 0xc9c5, 0x001e, 0x004e, 0x2019, 0x0002,
++      0x080c, 0xc58e, 0x003e, 0x9085, 0x0001, 0x0005, 0x0096, 0x080c,
++      0xb0ad, 0x0140, 0x6014, 0x904d, 0x080c, 0xad1e, 0x687b, 0x0005,
++      0x080c, 0x61a9, 0x009e, 0x080c, 0x9584, 0x9085, 0x0001, 0x0005,
++      0x2001, 0x0001, 0x080c, 0x5b4d, 0x0156, 0x0016, 0x0026, 0x0036,
++      0x20a9, 0x0004, 0x2019, 0x1805, 0x2011, 0x0276, 0x080c, 0xa425,
++      0x003e, 0x002e, 0x001e, 0x015e, 0x9005, 0x0005, 0x00f6, 0x00e6,
++      0x00c6, 0x0086, 0x0076, 0x0066, 0x00b6, 0x0126, 0x2091, 0x8000,
++      0x2740, 0x2061, 0x1cd0, 0x2079, 0x0001, 0x8fff, 0x0904, 0xc8d0,
++      0x2071, 0x1800, 0x764c, 0x706c, 0x8001, 0x9602, 0x1a04, 0xc8d0,
++      0x88ff, 0x0120, 0x2800, 0x9c06, 0x1590, 0x2078, 0x080c, 0xc9f1,
++      0x0570, 0x2400, 0x9c06, 0x0558, 0x6720, 0x9786, 0x0006, 0x1538,
++      0x9786, 0x0007, 0x0520, 0x88ff, 0x1140, 0x6010, 0x9b06, 0x11f8,
++      0x85ff, 0x0118, 0x6054, 0x9106, 0x11d0, 0x0096, 0x601c, 0xd084,
++      0x0140, 0x080c, 0xcc1f, 0x080c, 0xb76f, 0x080c, 0x17b0, 0x6023,
++      0x0007, 0x6014, 0x2048, 0x080c, 0xb0ad, 0x0120, 0x0046, 0x080c,
++      0xc970, 0x004e, 0x009e, 0x080c, 0x9584, 0x88ff, 0x1198, 0x9ce0,
++      0x0018, 0x2001, 0x1818, 0x2004, 0x9c02, 0x1210, 0x0804, 0xc885,
++      0x9006, 0x012e, 0x00be, 0x006e, 0x007e, 0x008e, 0x00ce, 0x00ee,
++      0x00fe, 0x0005, 0x98c5, 0x0001, 0x0ca0, 0x00b6, 0x0076, 0x0056,
++      0x0086, 0x9046, 0x2029, 0x0001, 0x2c20, 0x2019, 0x0002, 0x6210,
++      0x2258, 0x0096, 0x904e, 0x080c, 0x8ef6, 0x009e, 0x008e, 0x903e,
++      0x080c, 0x8f9a, 0x080c, 0xc876, 0x005e, 0x007e, 0x00be, 0x0005,
++      0x00b6, 0x0046, 0x0056, 0x0076, 0x00c6, 0x0156, 0x2c20, 0x2128,
++      0x20a9, 0x007f, 0x900e, 0x0016, 0x0036, 0x080c, 0x5c0d, 0x1190,
++      0x0056, 0x0086, 0x9046, 0x2508, 0x2029, 0x0001, 0x0096, 0x904e,
++      0x080c, 0x8ef6, 0x009e, 0x008e, 0x903e, 0x080c, 0x8f9a, 0x080c,
++      0xc876, 0x005e, 0x003e, 0x001e, 0x8108, 0x1f04, 0xc903, 0x015e,
++      0x00ce, 0x007e, 0x005e, 0x004e, 0x00be, 0x0005, 0x00b6, 0x0076,
++      0x0056, 0x6210, 0x2258, 0x0086, 0x9046, 0x2029, 0x0001, 0x2019,
++      0x0048, 0x0096, 0x904e, 0x080c, 0x8ef6, 0x009e, 0x008e, 0x903e,
++      0x080c, 0x8f9a, 0x2c20, 0x080c, 0xc876, 0x005e, 0x007e, 0x00be,
++      0x0005, 0x00b6, 0x0046, 0x0056, 0x0076, 0x00c6, 0x0156, 0x2c20,
++      0x20a9, 0x007f, 0x900e, 0x0016, 0x0036, 0x080c, 0x5c0d, 0x11a0,
++      0x0086, 0x9046, 0x2828, 0x0046, 0x2021, 0x0001, 0x080c, 0xcc03,
++      0x004e, 0x0096, 0x904e, 0x080c, 0x8ef6, 0x009e, 0x008e, 0x903e,
++      0x080c, 0x8f9a, 0x080c, 0xc876, 0x003e, 0x001e, 0x8108, 0x1f04,
++      0xc94b, 0x015e, 0x00ce, 0x007e, 0x005e, 0x004e, 0x00be, 0x0005,
++      0x0016, 0x00f6, 0x080c, 0xb0ab, 0x0198, 0xa864, 0x9084, 0x00ff,
++      0x9086, 0x0046, 0x0180, 0xa800, 0x907d, 0x0138, 0xa803, 0x0000,
++      0xab82, 0x080c, 0x61a9, 0x2f48, 0x0cb0, 0xab82, 0x080c, 0x61a9,
++      0x00fe, 0x001e, 0x0005, 0xa800, 0x907d, 0x0130, 0xa803, 0x0000,
++      0x080c, 0x61a9, 0x2f48, 0x0cb8, 0x080c, 0x61a9, 0x0c88, 0x00e6,
++      0x0046, 0x0036, 0x2061, 0x1cd0, 0x9005, 0x1138, 0x2071, 0x1800,
++      0x744c, 0x706c, 0x8001, 0x9402, 0x12d8, 0x2100, 0x9c06, 0x0168,
++      0x6000, 0x9086, 0x0000, 0x0148, 0x6008, 0x9206, 0x1130, 0x6010,
++      0x91a0, 0x0004, 0x2424, 0x9406, 0x0140, 0x9ce0, 0x0018, 0x2001,
++      0x1818, 0x2004, 0x9c02, 0x1220, 0x0c40, 0x9085, 0x0001, 0x0008,
++      0x9006, 0x003e, 0x004e, 0x00ee, 0x0005, 0x0096, 0x0006, 0x080c,
++      0x0fae, 0x000e, 0x090c, 0x0d84, 0xa867, 0x010d, 0xa88e, 0x0026,
++      0x2010, 0x080c, 0xb09b, 0x2001, 0x0000, 0x0120, 0x2200, 0x9080,
++      0x0015, 0x2004, 0x002e, 0xa87a, 0xa986, 0xac76, 0xa87f, 0x0000,
++      0x2001, 0x195b, 0x2004, 0xa882, 0x9006, 0xa8e2, 0xa802, 0xa86a,
++      0xa88a, 0x0126, 0x2091, 0x8000, 0x080c, 0x61a9, 0x012e, 0x009e,
++      0x0005, 0x6700, 0x9786, 0x0000, 0x0158, 0x9786, 0x0001, 0x0140,
++      0x9786, 0x000a, 0x0128, 0x9786, 0x0009, 0x0110, 0x9085, 0x0001,
++      0x0005, 0x00e6, 0x6010, 0x9075, 0x0138, 0x00b6, 0x2058, 0xb8a0,
++      0x00be, 0x9206, 0x00ee, 0x0005, 0x9085, 0x0001, 0x0cd8, 0x0016,
++      0x6004, 0x908e, 0x001e, 0x11a0, 0x8007, 0x6134, 0x918c, 0x00ff,
++      0x9105, 0x6036, 0x6007, 0x0085, 0x6003, 0x000b, 0x6023, 0x0005,
++      0x2001, 0x1954, 0x2004, 0x601a, 0x080c, 0x7bcb, 0x080c, 0x8125,
++      0x001e, 0x0005, 0xa001, 0xa001, 0x0005, 0x6024, 0xd0e4, 0x0158,
++      0xd0cc, 0x0118, 0x080c, 0xb3ae, 0x0030, 0x080c, 0xcc1f, 0x080c,
++      0x79df, 0x080c, 0x9554, 0x0005, 0x9280, 0x0008, 0x2004, 0x9084,
++      0x000f, 0x0002, 0xca50, 0xca50, 0xca50, 0xca52, 0xca50, 0xca52,
++      0xca52, 0xca50, 0xca52, 0xca50, 0xca50, 0xca50, 0xca50, 0xca50,
++      0x9006, 0x0005, 0x9085, 0x0001, 0x0005, 0x9280, 0x0008, 0x2004,
++      0x9084, 0x000f, 0x0002, 0xca69, 0xca69, 0xca69, 0xca69, 0xca69,
++      0xca69, 0xca76, 0xca69, 0xca69, 0xca69, 0xca69, 0xca69, 0xca69,
++      0xca69, 0x6007, 0x003b, 0x602f, 0x0009, 0x6017, 0x2a00, 0x6003,
++      0x0001, 0x080c, 0x7bcb, 0x080c, 0x8125, 0x0005, 0x0096, 0x00c6,
++      0x2260, 0x080c, 0xcc1f, 0x6043, 0x0000, 0x6024, 0xc0f4, 0xc0e4,
++      0x6026, 0x603b, 0x0000, 0x00ce, 0x00d6, 0x2268, 0x9186, 0x0007,
++      0x1904, 0xcad0, 0x6814, 0x9005, 0x0138, 0x2048, 0xa87c, 0xd0fc,
++      0x1118, 0x00de, 0x009e, 0x08a8, 0x6007, 0x003a, 0x6003, 0x0001,
++      0x080c, 0x7bcb, 0x080c, 0x8125, 0x00c6, 0x2d60, 0x6100, 0x9186,
++      0x0002, 0x1904, 0xcb48, 0x6014, 0x9005, 0x1138, 0x6000, 0x9086,
++      0x0007, 0x190c, 0x0d84, 0x0804, 0xcb48, 0x2048, 0x080c, 0xb0ad,
++      0x1130, 0x0028, 0x2048, 0xa800, 0x9005, 0x1de0, 0x2900, 0x2048,
++      0xa87c, 0x9084, 0x0003, 0x9086, 0x0002, 0x1170, 0xa87c, 0xc0dc,
++      0xc0f4, 0xa87e, 0xa880, 0xc0f4, 0xc0fc, 0xa882, 0x2009, 0x0043,
++      0x080c, 0xc3ee, 0x0804, 0xcb48, 0x2009, 0x0041, 0x0804, 0xcb42,
++      0x9186, 0x0005, 0x15a8, 0x6814, 0x2048, 0xa87c, 0xd0bc, 0x1120,
++      0x00de, 0x009e, 0x0804, 0xca69, 0xd0b4, 0x0128, 0xd0fc, 0x090c,
++      0x0d84, 0x0804, 0xca8a, 0x6007, 0x003a, 0x6003, 0x0001, 0x080c,
++      0x7bcb, 0x080c, 0x8125, 0x00c6, 0x2d60, 0x6100, 0x9186, 0x0002,
++      0x0120, 0x9186, 0x0004, 0x1904, 0xcb48, 0x6814, 0x2048, 0xa97c,
++      0xc1f4, 0xc1dc, 0xa97e, 0xa980, 0xc1f4, 0xc1fc, 0xc1bc, 0xa982,
++      0x00f6, 0x2c78, 0x080c, 0x150d, 0x00fe, 0x2009, 0x0042, 0x04d0,
++      0x0036, 0x080c, 0x0fae, 0x090c, 0x0d84, 0xa867, 0x010d, 0x9006,
++      0xa802, 0xa86a, 0xa88a, 0x2d18, 0xab8e, 0xa887, 0x0045, 0x2c00,
++      0xa892, 0x6038, 0xa8a2, 0x2360, 0x6024, 0xc0dd, 0x6026, 0x6010,
++      0x00b6, 0x2058, 0xb8a0, 0x00be, 0x2004, 0x6354, 0xab7a, 0xa876,
++      0x9006, 0xa87e, 0xa882, 0xad9a, 0xae96, 0xa89f, 0x0001, 0x080c,
++      0x61a9, 0x2019, 0x0045, 0x6008, 0x2068, 0x080c, 0xc58e, 0x2d00,
++      0x600a, 0x6023, 0x0006, 0x6003, 0x0007, 0x901e, 0x631a, 0x6342,
++      0x003e, 0x0038, 0x6043, 0x0000, 0x6003, 0x0007, 0x080c, 0xc3ee,
++      0x00ce, 0x00de, 0x009e, 0x0005, 0x9186, 0x0013, 0x1128, 0x6004,
++      0x9082, 0x0085, 0x2008, 0x00c2, 0x9186, 0x0027, 0x1178, 0x080c,
++      0x8026, 0x0036, 0x0096, 0x6014, 0x2048, 0x2019, 0x0004, 0x080c,
++      0xc970, 0x009e, 0x003e, 0x080c, 0x8125, 0x0005, 0x9186, 0x0014,
++      0x0d70, 0x080c, 0x95e9, 0x0005, 0xcb7b, 0xcb79, 0xcb79, 0xcb79,
++      0xcb79, 0xcb79, 0xcb7b, 0xcb79, 0xcb79, 0xcb79, 0xcb79, 0xcb79,
++      0xcb79, 0x080c, 0x0d84, 0x080c, 0x8026, 0x6003, 0x000c, 0x080c,
++      0x8125, 0x0005, 0x9182, 0x0092, 0x1220, 0x9182, 0x0085, 0x0208,
++      0x001a, 0x080c, 0x95e9, 0x0005, 0xcb99, 0xcb99, 0xcb99, 0xcb99,
++      0xcb9b, 0xcbbb, 0xcb99, 0xcb99, 0xcb99, 0xcb99, 0xcb99, 0xcb99,
++      0xcb99, 0x080c, 0x0d84, 0x00d6, 0x2c68, 0x080c, 0x94fe, 0x01b0,
++      0x6003, 0x0001, 0x6007, 0x001e, 0x2009, 0x026e, 0x210c, 0x613a,
++      0x2009, 0x026f, 0x210c, 0x613e, 0x600b, 0xffff, 0x6910, 0x6112,
++      0x6023, 0x0004, 0x080c, 0x7bcb, 0x080c, 0x8125, 0x2d60, 0x080c,
++      0x9554, 0x00de, 0x0005, 0x080c, 0x9554, 0x0005, 0x00e6, 0x6010,
++      0x00b6, 0x2058, 0xb800, 0x00be, 0xd0ec, 0x00ee, 0x0005, 0x2009,
++      0x1872, 0x210c, 0xd1ec, 0x05b0, 0x6003, 0x0002, 0x6024, 0xc0e5,
++      0x6026, 0xd0cc, 0x0150, 0x2001, 0x1955, 0x2004, 0x6042, 0x2009,
++      0x1872, 0x210c, 0xd1f4, 0x1520, 0x00a0, 0x2009, 0x1872, 0x210c,
++      0xd1f4, 0x0128, 0x6024, 0xc0e4, 0x6026, 0x9006, 0x00d8, 0x2001,
++      0x1955, 0x200c, 0x2001, 0x1953, 0x2004, 0x9100, 0x9080, 0x000a,
++      0x6042, 0x6010, 0x00b6, 0x2058, 0xb8ac, 0x00be, 0x0008, 0x2104,
++      0x9005, 0x0118, 0x9088, 0x0003, 0x0cd0, 0x2c0a, 0x600f, 0x0000,
++      0x9085, 0x0001, 0x0005, 0x0016, 0x00c6, 0x00e6, 0x6154, 0xb8ac,
++      0x2060, 0x8cff, 0x0180, 0x84ff, 0x1118, 0x6054, 0x9106, 0x1138,
++      0x600c, 0x2072, 0x080c, 0x79df, 0x080c, 0x9554, 0x0010, 0x9cf0,
++      0x0003, 0x2e64, 0x0c70, 0x00ee, 0x00ce, 0x001e, 0x0005, 0x00d6,
++      0x00b6, 0x6010, 0x2058, 0xb8ac, 0x2068, 0x9005, 0x0130, 0x9c06,
++      0x0110, 0x680c, 0x0cd0, 0x600c, 0x680e, 0x00be, 0x00de, 0x0005,
++      0x0026, 0x0036, 0x0156, 0x2011, 0x182a, 0x2204, 0x9084, 0x00ff,
++      0x2019, 0x026e, 0x2334, 0x9636, 0x1508, 0x8318, 0x2334, 0x2204,
++      0x9084, 0xff00, 0x9636, 0x11d0, 0x2011, 0x0270, 0x20a9, 0x0004,
++      0x6010, 0x0096, 0x2048, 0x2019, 0x000a, 0x080c, 0xa439, 0x009e,
++      0x1168, 0x2011, 0x0274, 0x20a9, 0x0004, 0x6010, 0x0096, 0x2048,
++      0x2019, 0x0006, 0x080c, 0xa439, 0x009e, 0x1100, 0x015e, 0x003e,
++      0x002e, 0x0005, 0x00e6, 0x2071, 0x1800, 0x080c, 0x5677, 0x080c,
++      0x2b1e, 0x00ee, 0x0005, 0x00e6, 0x6010, 0x00b6, 0x2058, 0xb800,
++      0x00be, 0xd0fc, 0x0108, 0x0011, 0x00ee, 0x0005, 0xa880, 0xc0e5,
++      0xa882, 0x0005, 0x00e6, 0x00c6, 0x0076, 0x0066, 0x0056, 0x0046,
++      0x0026, 0x0016, 0x0126, 0x2091, 0x8000, 0x2029, 0x19bd, 0x252c,
++      0x2021, 0x19c3, 0x2424, 0x2061, 0x1cd0, 0x2071, 0x1800, 0x764c,
++      0x706c, 0x9606, 0x0578, 0x6720, 0x9786, 0x0001, 0x0118, 0x9786,
++      0x0008, 0x1500, 0x2500, 0x9c06, 0x01e8, 0x2400, 0x9c06, 0x01d0,
++      0x080c, 0xc9f1, 0x01b8, 0x080c, 0xca01, 0x11a0, 0x6000, 0x9086,
++      0x0004, 0x1120, 0x0016, 0x080c, 0x17b0, 0x001e, 0x080c, 0xb284,
++      0x1110, 0x080c, 0x2d3f, 0x080c, 0xb295, 0x1110, 0x080c, 0x9e99,
++      0x080c, 0x9584, 0x9ce0, 0x0018, 0x2001, 0x1818, 0x2004, 0x9c02,
++      0x1208, 0x0858, 0x012e, 0x001e, 0x002e, 0x004e, 0x005e, 0x006e,
++      0x007e, 0x00ce, 0x00ee, 0x0005, 0x2001, 0x180f, 0x2004, 0xd0dc,
++      0x0005, 0x0006, 0x2001, 0x1836, 0x2004, 0xd09c, 0x000e, 0x0005,
++      0x6004, 0x9086, 0x0001, 0x1128, 0x080c, 0x905b, 0x080c, 0x9584,
++      0x9006, 0x0005, 0x0126, 0x0006, 0x00e6, 0x0016, 0x2091, 0x8000,
++      0x2071, 0x1840, 0xd5a4, 0x0118, 0x7034, 0x8000, 0x7036, 0xd5b4,
++      0x0118, 0x7030, 0x8000, 0x7032, 0xd5ac, 0x0178, 0x2500, 0x9084,
++      0x0007, 0x908e, 0x0003, 0x0148, 0x908e, 0x0004, 0x0130, 0x908e,
++      0x0005, 0x0118, 0x2071, 0x184a, 0x0089, 0x001e, 0x00ee, 0x000e,
++      0x012e, 0x0005, 0x0126, 0x0006, 0x00e6, 0x2091, 0x8000, 0x2071,
++      0x1842, 0x0021, 0x00ee, 0x000e, 0x012e, 0x0005, 0x2e04, 0x8000,
++      0x2072, 0x1220, 0x8e70, 0x2e04, 0x8000, 0x2072, 0x0005, 0x00e6,
++      0x2071, 0x1840, 0x0c99, 0x00ee, 0x0005, 0x00e6, 0x2071, 0x1844,
++      0x0c69, 0x00ee, 0x0005, 0x0126, 0x0006, 0x00e6, 0x2091, 0x8000,
++      0x2071, 0x1840, 0x7044, 0x8000, 0x7046, 0x00ee, 0x000e, 0x012e,
++      0x0005, 0x0002, 0x0003, 0x03d6, 0x0000, 0x8064, 0x0008, 0x0010,
++      0x0000, 0x8066, 0x0000, 0x0101, 0x0008, 0x4406, 0x000b, 0x8060,
++      0x0000, 0x0400, 0x0000, 0x580c, 0x0003, 0x7934, 0x000b, 0x5090,
++      0x000b, 0x4c09, 0x0003, 0xbac0, 0x0009, 0x0082, 0x0008, 0x0c09,
++      0x000b, 0x15fe, 0x0008, 0x3409, 0x0003, 0x808c, 0x0008, 0x0001,
++      0x0000, 0x0000, 0x0007, 0x4047, 0x000a, 0x808c, 0x0008, 0x0002,
++      0x0000, 0x081b, 0x0003, 0x4022, 0x0000, 0x001c, 0x0003, 0x4122,
++      0x0008, 0x4447, 0x0002, 0x0de7, 0x0003, 0x0bfe, 0x0008, 0x11a0,
++      0x0001, 0x11c9, 0x000b, 0x0ca0, 0x0001, 0x11c9, 0x000b, 0x9180,
++      0x0001, 0x0004, 0x0000, 0x8060, 0x0000, 0x0400, 0x0000, 0x7f62,
++      0x0008, 0x8066, 0x0000, 0x0009, 0x0008, 0x442a, 0x0003, 0x808c,
++      0x0008, 0x0000, 0x0008, 0x0060, 0x0008, 0x8062, 0x0008, 0x0004,
++      0x0000, 0x8066, 0x0000, 0x0411, 0x0000, 0x4432, 0x0003, 0x03fe,
++      0x0000, 0x43e0, 0x0001, 0x0dc6, 0x0003, 0xc2c0, 0x0009, 0x00ff,
++      0x0008, 0x02e0, 0x0001, 0x0dc6, 0x0003, 0x9180, 0x0001, 0x0005,
++      0x0008, 0x8060, 0x0000, 0x0400, 0x0000, 0x7f62, 0x0008, 0x8066,
++      0x0000, 0x0019, 0x0000, 0x4441, 0x000b, 0x0240, 0x0002, 0x09c3,
++      0x000b, 0x00fe, 0x0000, 0x31c6, 0x0003, 0x112a, 0x0000, 0x002e,
++      0x0008, 0x022c, 0x0008, 0x3a44, 0x0002, 0x0c09, 0x000b, 0x808c,
++      0x0008, 0x0002, 0x0000, 0x1760, 0x0008, 0x8062, 0x0008, 0x000f,
++      0x0008, 0x8066, 0x0000, 0x0011, 0x0008, 0x4452, 0x0003, 0x01fe,
++      0x0008, 0x42e0, 0x0009, 0x0db9, 0x000b, 0x00fe, 0x0000, 0x43e0,
++      0x0001, 0x0db9, 0x000b, 0x1734, 0x0000, 0x1530, 0x0000, 0x1632,
++      0x0008, 0x0d2a, 0x0008, 0x9880, 0x0001, 0x0010, 0x0000, 0x8060,
++      0x0000, 0x0400, 0x0000, 0x7f62, 0x0008, 0x8066, 0x0000, 0x1e0a,
++      0x0008, 0x4464, 0x0003, 0x808a, 0x0008, 0x0003, 0x0008, 0x1a60,
++      0x0000, 0x8062, 0x0008, 0x0002, 0x0000, 0x586a, 0x0003, 0x8066,
++      0x0000, 0x3679, 0x0000, 0x446d, 0x0003, 0x586e, 0x000b, 0x8054,
++      0x0008, 0x0011, 0x0008, 0x8074, 0x0000, 0x1010, 0x0008, 0x1efe,
++      0x0000, 0x3009, 0x000b, 0x0077, 0x0004, 0x0009, 0x000b, 0x1c60,
++      0x0000, 0x1b62, 0x0000, 0x8066, 0x0000, 0x0231, 0x0008, 0x447b,
++      0x000b, 0x587c, 0x000b, 0x0140, 0x0008, 0x0242, 0x0000, 0x1f43,
++      0x0002, 0x0c86, 0x0003, 0x0d44, 0x0000, 0x0d46, 0x0008, 0x0348,
++      0x0008, 0x044a, 0x0008, 0x008a, 0x0003, 0x0344, 0x0008, 0x0446,
++      0x0008, 0x0548, 0x0008, 0x064a, 0x0000, 0x588a, 0x000b, 0x8054,
++      0x0008, 0x0001, 0x0000, 0x8074, 0x0000, 0x2020, 0x0008, 0x4000,
++      0x000f, 0x3a40, 0x000a, 0x0c0c, 0x000b, 0x2b24, 0x0008, 0x2b24,
++      0x0008, 0x5894, 0x000b, 0x8054, 0x0008, 0x0002, 0x0000, 0x1242,
++      0x0002, 0x08d8, 0x0003, 0x3a45, 0x000a, 0x08c9, 0x0003, 0x1e10,
++      0x000a, 0x7f3c, 0x0000, 0x08c6, 0x0003, 0x1d00, 0x0002, 0x7f3a,
++      0x0000, 0x0d60, 0x0000, 0x7f62, 0x0008, 0x8066, 0x0000, 0x0009,
++      0x0008, 0x44a4, 0x0003, 0x00fe, 0x0000, 0x34c3, 0x0003, 0x1c60,
++      0x0000, 0x8062, 0x0008, 0x0001, 0x0000, 0x8066, 0x0000, 0x0009,
++      0x0008, 0x44ac, 0x000b, 0x00fe, 0x0000, 0x31a2, 0x000b, 0x0038,
++      0x0000, 0x0060, 0x0008, 0x8062, 0x0008, 0x0019, 0x0000, 0x8066,
++      0x0000, 0x0009, 0x0008, 0x44b5, 0x0003, 0x80c0, 0x0009, 0x00ff,
++      0x0008, 0x7f3e, 0x0008, 0x0d60, 0x0000, 0x0efe, 0x0008, 0x1f80,
++      0x0001, 0x7f62, 0x0008, 0x8066, 0x0000, 0x0009, 0x0008, 0x44bf,
++      0x0003, 0x003a, 0x0008, 0x1dfe, 0x0000, 0x00a0, 0x000b, 0x0036,
++      0x0008, 0x0077, 0x0004, 0x00d8, 0x000b, 0x8074, 0x0000, 0x2000,
++      0x0000, 0x00d8, 0x000b, 0x3a44, 0x0002, 0x09cc, 0x000b, 0x8074,
++      0x0000, 0x1000, 0x0000, 0x2d0e, 0x0000, 0x2d0e, 0x0000, 0x35a2,
++      0x0003, 0x26fe, 0x0008, 0x26fe, 0x0008, 0x2700, 0x0008, 0x2700,
++      0x0008, 0x00d0, 0x0009, 0x0ce6, 0x0003, 0x8074, 0x0000, 0x4040,
++      0x0008, 0x58d8, 0x0003, 0x5090, 0x000b, 0x3a46, 0x000a, 0x0ce6,
++      0x0003, 0x3a47, 0x0002, 0x08e3, 0x000b, 0x8054, 0x0008, 0x0004,
++      0x0000, 0x8074, 0x0000, 0x8000, 0x0000, 0x0127, 0x0003, 0x92c0,
++      0x0009, 0x0f88, 0x0008, 0x0809, 0x0003, 0x1a60, 0x0000, 0x8062,
++      0x0008, 0x0002, 0x0000, 0x8066, 0x0000, 0x362a, 0x0000, 0x44eb,
++      0x000b, 0x2000, 0x0000, 0x2000, 0x0000, 0x2102, 0x0000, 0x2102,
++      0x0000, 0x2204, 0x0000, 0x2204, 0x0000, 0x2306, 0x0000, 0x2306,
++      0x0000, 0x2408, 0x0000, 0x2408, 0x0000, 0x250a, 0x0000, 0x250a,
++      0x0000, 0x260c, 0x0000, 0x260c, 0x0000, 0x270e, 0x0000, 0x270e,
++      0x0000, 0x2810, 0x0000, 0x2810, 0x0000, 0x2912, 0x0000, 0x2912,
++      0x0000, 0x1a60, 0x0000, 0x8062, 0x0008, 0x0007, 0x0000, 0x8066,
++      0x0000, 0x0052, 0x0000, 0x4505, 0x0003, 0x92c0, 0x0009, 0x0780,
++      0x0008, 0x0db3, 0x000b, 0x124b, 0x0002, 0x090e, 0x0003, 0x2e4d,
++      0x0002, 0x2e4d, 0x0002, 0x09a2, 0x0003, 0x3a46, 0x000a, 0x0d1b,
++      0x0003, 0x5910, 0x0003, 0x8054, 0x0008, 0x0004, 0x0000, 0x1243,
++      0x000a, 0x0925, 0x0003, 0x8010, 0x0008, 0x000d, 0x0000, 0x0193,
++      0x000c, 0x1810, 0x0000, 0x0193, 0x000c, 0x0125, 0x000b, 0x194d,
++      0x000a, 0x091f, 0x0003, 0x1243, 0x000a, 0x09a9, 0x000b, 0x591f,
++      0x0003, 0x8054, 0x0008, 0x0004, 0x0000, 0x0188, 0x000c, 0x1810,
++      0x0000, 0x0193, 0x000c, 0x8074, 0x0000, 0xf000, 0x0008, 0x3a42,
++      0x0002, 0x0d2d, 0x0003, 0x15fe, 0x0008, 0x344b, 0x0003, 0x0d30,
++      0x0000, 0x0009, 0x000b, 0x0d30, 0x0000, 0x8074, 0x0000, 0x0501,
++      0x0000, 0x8010, 0x0008, 0x000c, 0x0008, 0x0193, 0x000c, 0x0009,
++      0x000b, 0xbbe0, 0x0009, 0x0030, 0x0008, 0x0d44, 0x0003, 0x18fe,
++      0x0000, 0x3ce0, 0x0009, 0x0941, 0x000b, 0x15fe, 0x0008, 0x3ce0,
++      0x0009, 0x0941, 0x000b, 0x0183, 0x0004, 0x8076, 0x0008, 0x0040,
++      0x0000, 0x0180, 0x000b, 0x8076, 0x0008, 0x0041, 0x0008, 0x0180,
++      0x000b, 0xbbe0, 0x0009, 0x0032, 0x0000, 0x0d49, 0x000b, 0x3c1e,
++      0x0008, 0x0180, 0x000b, 0xbbe0, 0x0009, 0x0037, 0x0000, 0x0d65,
++      0x0003, 0x18fe, 0x0000, 0x3ce0, 0x0009, 0x0d41, 0x0003, 0x1a60,
++      0x0000, 0x8062, 0x0008, 0x000d, 0x0000, 0x2604, 0x0008, 0x2604,
++      0x0008, 0x2706, 0x0008, 0x2706, 0x0008, 0x2808, 0x0000, 0x2808,
++      0x0000, 0x290a, 0x0000, 0x290a, 0x0000, 0x8066, 0x0000, 0x0422,
++      0x0000, 0x455c, 0x0003, 0x0188, 0x000c, 0x8054, 0x0008, 0x0004,
++      0x0000, 0x8074, 0x0000, 0xf000, 0x0008, 0x8072, 0x0000, 0x8000,
++      0x0000, 0x0127, 0x0003, 0xbbe0, 0x0009, 0x0038, 0x0000, 0x0d77,
++      0x0003, 0x18fe, 0x0000, 0x3ce0, 0x0009, 0x0974, 0x000b, 0x15fe,
++      0x0008, 0x3ce0, 0x0009, 0x0d3d, 0x000b, 0x0183, 0x0004, 0x8076,
++      0x0008, 0x0040, 0x0000, 0x8072, 0x0000, 0x8000, 0x0000, 0x01c3,
++      0x0003, 0x8076, 0x0008, 0x0042, 0x0008, 0x0180, 0x000b, 0xbbe0,
++      0x0009, 0x0016, 0x0000, 0x0d80, 0x000b, 0x3a44, 0x0002, 0x0c0b,
++      0x0003, 0x8072, 0x0000, 0x8000, 0x0000, 0x8000, 0x000f, 0x0009,
++      0x000b, 0x8072, 0x0000, 0x8000, 0x0000, 0x0009, 0x000b, 0x3d30,
++      0x000a, 0x7f00, 0x0000, 0xbc80, 0x0001, 0x0007, 0x0000, 0x018c,
++      0x000b, 0x1930, 0x000a, 0x7f00, 0x0000, 0x9880, 0x0001, 0x0007,
++      0x0000, 0x8060, 0x0000, 0x0400, 0x0000, 0x7f62, 0x0008, 0x8066,
++      0x0000, 0x000a, 0x0008, 0x4591, 0x000b, 0x4000, 0x000f, 0x2193,
++      0x000b, 0x0870, 0x0008, 0x4000, 0x000f, 0xbac0, 0x0009, 0x0090,
++      0x0008, 0x099c, 0x000b, 0x8074, 0x0000, 0x0706, 0x0000, 0x019e,
++      0x000b, 0x8074, 0x0000, 0x0703, 0x0000, 0x4000, 0x000f, 0x8010,
++      0x0008, 0x0008, 0x0000, 0x01d1, 0x0003, 0x0188, 0x000c, 0x8010,
++      0x0008, 0x0007, 0x0000, 0x0193, 0x000c, 0x1810, 0x0000, 0x0193,
++      0x000c, 0x01db, 0x0003, 0x0188, 0x000c, 0x8010, 0x0008, 0x001b,
++      0x0008, 0x0193, 0x000c, 0x1810, 0x0000, 0x0193, 0x000c, 0x8074,
++      0x0000, 0xf080, 0x0000, 0x0d30, 0x0000, 0x0009, 0x000b, 0x8010,
++      0x0008, 0x0009, 0x0008, 0x01d1, 0x0003, 0x8010, 0x0008, 0x0005,
++      0x0008, 0x01d1, 0x0003, 0x808c, 0x0008, 0x0001, 0x0000, 0x8010,
++      0x0008, 0x0004, 0x0000, 0x4143, 0x000a, 0x0859, 0x0003, 0x3a44,
++      0x0002, 0x0c09, 0x000b, 0x0d2a, 0x0008, 0x01d1, 0x0003, 0x8010,
++      0x0008, 0x0003, 0x0008, 0x01d3, 0x000b, 0x8010, 0x0008, 0x000b,
++      0x0000, 0x01d3, 0x000b, 0x8010, 0x0008, 0x0002, 0x0000, 0x01d3,
++      0x000b, 0x3a47, 0x0002, 0x0cd8, 0x000b, 0x8010, 0x0008, 0x0006,
++      0x0008, 0x01d3, 0x000b, 0x8074, 0x0000, 0xf000, 0x0008, 0x0193,
++      0x000c, 0x0196, 0x000c, 0x3a40, 0x000a, 0x0809, 0x0003, 0x8010,
++      0x0008, 0x000c, 0x0008, 0x0193, 0x000c, 0x0009, 0x000b, 0x8074,
++      0x0000, 0xf080, 0x0000, 0x0d30, 0x0000, 0x2e4d, 0x0002, 0x2e4d,
++      0x0002, 0x09e4, 0x000b, 0x8054, 0x0008, 0x0019, 0x0000, 0x0009,
++      0x000b, 0x8054, 0x0008, 0x0009, 0x0008, 0x0009, 0x000b, 0x3a44,
++      0x0002, 0x0c09, 0x000b, 0x01c6, 0x0003, 0xc993, 0xf609, 0x0001,
++      0x0002, 0x0004, 0x0008, 0x0010, 0x0020, 0x0040, 0x0080, 0x0100,
++      0x0200, 0x0400, 0x0800, 0x1000, 0x2000, 0x4000, 0x8000, 0xd29e
++};
++#ifdef UNIQUE_FW_NAME
++unsigned short fw2300tpx_length01 = 0xc920;
++#else
++unsigned short risc_code_length01 = 0xc920;
++#endif
++
+--- /dev/null  Thu Apr 11 07:25:15 2002
++++ linux-2.5.73-n9560/drivers/scsi/qla2xxx/qla_cfg.c  Thu Jul  3 15:34:42 2003
+@@ -0,0 +1,2780 @@
++/******************************************************************************
++ *                  QLOGIC LINUX SOFTWARE
++ *
++ * QLogic ISP2x00 device driver for Linux 2.5.x
++ * Copyright (C) 2003 Qlogic Corporation
++ * (www.qlogic.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, 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.
++ *
++ ******************************************************************************/
++
++/*
++ * QLogic ISP2x00 Multi-path LUN Support Driver
++ *
++ */
++
++#include "qla_os.h"
++#include "qla_def.h"
++
++#include "qlfo.h"
++
++/*
++ *  Local Function Prototypes.
++ */
++
++static uint32_t qla2x00_add_portname_to_mp_dev(mp_device_t *, uint8_t *);
++
++static mp_device_t * qla2x00_allocate_mp_dev(uint8_t *, uint8_t *);
++static mp_path_t * qla2x00_allocate_path(mp_host_t *, uint16_t, fc_port_t *,
++    uint16_t);
++static mp_path_list_t * qla2x00_allocate_path_list(void);
++
++static mp_host_t * qla2x00_find_host_by_name(uint8_t *);
++
++static mp_device_t * qla2x00_find_or_allocate_mp_dev (mp_host_t *, uint16_t,
++    fc_port_t *);
++static mp_path_t * qla2x00_find_or_allocate_path(mp_host_t *, mp_device_t *,
++    uint16_t, fc_port_t *);
++
++static uint32_t qla2x00_cfg_register_failover_lun(mp_device_t *,srb_t *,
++    fc_lun_t *);
++static uint32_t qla2x00_send_failover_notify(mp_device_t *, uint8_t,
++    mp_path_t *, mp_path_t *);
++static mp_path_t * qla2x00_select_next_path(mp_host_t *, mp_device_t *,
++    uint8_t);
++
++static uint8_t qla2x00_update_mp_host(mp_host_t  *);
++static uint32_t qla2x00_update_mp_tree (void);
++
++static fc_lun_t *qla2x00_find_matching_lun(uint8_t , mp_path_t *);
++static mp_path_t *qla2x00_find_path_by_id(mp_device_t *, uint8_t);
++static mp_device_t *qla2x00_find_mp_dev_by_id(mp_host_t *, uint8_t);
++static mp_device_t *qla2x00_find_mp_dev_by_name(mp_host_t *, uint8_t *);
++
++static mp_path_t *qla2x00_get_visible_path(mp_device_t *dp);
++static void qla2x00_map_os_targets(mp_host_t *);
++static void qla2x00_map_os_luns(mp_host_t *, mp_device_t *, uint16_t);
++static uint8_t qla2x00_map_a_oslun(mp_host_t *, mp_device_t *, uint16_t, uint16_t);
++
++static uint8_t qla2x00_is_ww_name_zero(uint8_t *);
++static void qla2x00_add_path(mp_path_list_t *, mp_path_t *);
++static void qla2x00_failback_single_lun(mp_device_t *, uint8_t, uint8_t);
++static void qla2x00_failback_luns(mp_host_t *);
++static void qla2x00_setup_new_path(mp_device_t *, mp_path_t *);
++
++/*
++ * Global data items
++ */
++mp_host_t  *mp_hosts_base = NULL;
++uint8_t   mp_config_required = FALSE;
++static int    mp_num_hosts = 0;
++static uint8_t   mp_initialized = FALSE;
++
++
++/*
++ * ENTRY ROUTINES
++ */
++
++/*
++ * qla2x00_cfg_init
++ *      Initialize configuration structures to handle an instance of
++ *      an HBA, QLA2x000 card.
++ *
++ * Input:
++ *      ha = adapter state pointer.
++ *
++ * Returns:
++ *      qla2x00 local function return status code.
++ *
++ * Context:
++ *      Kernel context.
++ */
++int
++qla2x00_cfg_init(scsi_qla_host_t *ha)
++{
++      int     rval;
++
++      ENTER("qla2x00_cfg_init");
++      set_bit(CFG_ACTIVE, &ha->cfg_flags);
++      if (!mp_initialized) {
++              /* First HBA, initialize the failover global properties */
++              qla2x00_fo_init_params(ha);
++
++              /* If the user specified a device configuration then
++               * it is use as the configuration. Otherwise, we wait
++               * for path discovery.
++               */
++              if ( mp_config_required )
++                      qla2x00_cfg_build_path_tree(ha);
++      }
++      rval = qla2x00_cfg_path_discovery(ha);
++      clear_bit(CFG_ACTIVE, &ha->cfg_flags);
++      LEAVE("qla2x00_cfg_init");
++      return rval;
++}
++
++/*
++ * qla2x00_cfg_path_discovery
++ *      Discover the path configuration from the device configuration
++ *      for the specified host adapter and build the path search tree.
++ *      This function is called after the lower level driver has
++ *      completed its port and lun discovery.
++ *
++ * Input:
++ *      ha = adapter state pointer.
++ *
++ * Returns:
++ *      qla2x00 local function return status code.
++ *
++ * Context:
++ *      Kernel context.
++ */
++int
++qla2x00_cfg_path_discovery(scsi_qla_host_t *ha)
++{
++      int             rval = QLA2X00_SUCCESS;
++      mp_host_t       *host;
++      uint8_t         *name;
++
++      ENTER("qla2x00_cfg_path_discovery");
++
++      name =  &ha->init_cb->node_name[0];
++
++      set_bit(CFG_ACTIVE, &ha->cfg_flags);
++      /* Initialize the path tree for this adapter */
++      host = qla2x00_find_host_by_name(name);
++      if ( mp_config_required ) {
++              if (host == NULL ) {
++                      DEBUG4(printk("cfg_path_discovery: host not found, "
++                              "node name = "
++                              "%02x%02x%02x%02x%02x%02x%02x%02x\n",
++                              name[0], name[1], name[2], name[3],
++                              name[4], name[5], name[6], name[7]);)
++                      rval = QLA2X00_FUNCTION_FAILED;
++              } else if (ha->instance != host->instance) {
++                      DEBUG4(printk("cfg_path_discovery: host instance "
++                              "don't match - instance=%ld.\n",
++                              ha->instance);)
++                      rval = QLA2X00_FUNCTION_FAILED;
++              }
++      } else if ( host == NULL ) {
++              /* New host adapter so allocate it */
++              if ( (host = qla2x00_alloc_host(ha)) == NULL ) {
++                      printk(KERN_INFO
++                              "qla2x00(%d): Couldn't allocate "
++                              "host - ha = %p.\n",
++                              (int)ha->instance, ha);
++                      rval = QLA2X00_FUNCTION_FAILED;
++              }
++      }
++
++      /* Fill in information about host */
++      if (host != NULL ) {
++              host->flags |= MP_HOST_FLAG_NEEDS_UPDATE;
++              host->flags |= MP_HOST_FLAG_LUN_FO_ENABLED;
++              host->fcports = &ha->fcports;
++
++              /* Check if multipath is enabled */
++              if (!qla2x00_update_mp_host(host)) {
++                      rval = QLA2X00_FUNCTION_FAILED;
++              }
++              host->flags &= ~MP_HOST_FLAG_LUN_FO_ENABLED;
++      }
++
++      if (rval != QLA2X00_SUCCESS) {
++              /* EMPTY */
++              DEBUG4(printk("qla2x00_path_discovery: Exiting FAILED\n");)
++      } else {
++              LEAVE("qla2x00_cfg_path_discovery");
++      }
++      clear_bit(CFG_ACTIVE, &ha->cfg_flags);
++
++      return rval;
++}
++
++/*
++ * qla2x00_cfg_event_notifiy
++ *      Callback for host driver to notify us of configuration changes.
++ *
++ * Input:
++ *      ha = adapter state pointer.
++ *      i_type = event type
++ *
++ * Returns:
++ *
++ * Context:
++ *      Kernel context.
++ */
++int
++qla2x00_cfg_event_notify(scsi_qla_host_t *ha, uint32_t i_type)
++{
++      mp_host_t       *host;                  /* host adapter pointer */
++
++      ENTER("qla2x00_cfg_event_notify");
++
++      set_bit(CFG_ACTIVE, &ha->cfg_flags);
++      switch (i_type) {
++              case MP_NOTIFY_RESET_DETECTED:
++                      DEBUG(printk("scsi%ld: MP_NOTIFY_RESET_DETECTED "
++                                      "- no action\n",
++                                      ha->host_no);)
++                              break;
++              case MP_NOTIFY_PWR_LOSS:
++                      DEBUG(printk("scsi%ld: MP_NOTIFY_PWR_LOSS - "
++                                      "update tree\n",
++                                      ha->host_no);)
++                      /*
++                       * Update our path tree in case we are
++                       * losing the adapter
++                       */
++                      qla2x00_update_mp_tree();
++                      /* Free our resources for adapter */
++                      break;
++              case MP_NOTIFY_LOOP_UP:
++                      DEBUG(printk("scsi%ld: MP_NOTIFY_LOOP_UP - "
++                                      "update host tree\n",
++                                      ha->host_no);)
++                      /* Adapter is back up with new configuration */
++                      if ((host = qla2x00_cfg_find_host(ha)) != NULL) {
++                              host->flags |= MP_HOST_FLAG_NEEDS_UPDATE;
++                              host->fcports = &ha->fcports;
++                              qla2x00_update_mp_tree();
++                      }
++                      break;
++              case MP_NOTIFY_LOOP_DOWN:
++              case MP_NOTIFY_BUS_RESET:
++                      DEBUG(printk("scsi%ld: MP_NOTIFY_OTHERS - "
++                                      "no action\n",
++                                      ha->host_no);)
++                      break;
++              default:
++                      break;
++
++      }
++      clear_bit(CFG_ACTIVE, &ha->cfg_flags);
++
++      LEAVE("qla2x00_cfg_event_notify");
++
++      return QLA2X00_SUCCESS;
++}
++
++/*
++ * qla2x00_cfg_failover
++ *      A problem has been detected with the current path for this
++ *      lun.  Select the next available path as the current path
++ *      for this device.
++ *
++ * Inputs:
++ *      ha = pointer to host adapter
++ *      fp - pointer to failed fc_lun (failback lun)
++ *      tgt - pointer to target
++ *
++ * Returns:
++ *      pointer to new fc_lun_t, or NULL if failover fails.
++ */
++fc_lun_t *
++qla2x00_cfg_failover(scsi_qla_host_t *ha, fc_lun_t *fp,
++    os_tgt_t *tgt, srb_t *sp)
++{
++      mp_host_t       *host;                  /* host adapter pointer */
++      mp_device_t     *dp;                    /* virtual device pointer */
++      mp_path_t       *new_path;              /* new path pointer */
++      fc_lun_t        *new_fp = NULL;
++
++      ENTER("qla2x00_cfg_failover");
++      set_bit(CFG_ACTIVE, &ha->cfg_flags);
++      if ((host = qla2x00_cfg_find_host(ha)) != NULL) {
++              if ((dp = qla2x00_find_mp_dev_by_name(
++                                      host, tgt->node_name)) != NULL ) {
++
++                      DEBUG3(printk("qla2x00_cfg_failover: dp = %p\n", dp);)
++                      /*
++                       * Point at the next path in the path list if there is
++                       * one, and if it hasn't already been failed over by
++                       * another I/O. If there is only one path continuer
++                       * to point at it.
++                       */
++                      new_path = qla2x00_select_next_path(host, dp, fp->lun);
++                      DEBUG3(printk("cfg_failover: new path @ %p\n",
++                                              new_path);)
++                      new_fp = qla2x00_find_matching_lun(fp->lun, new_path);
++                      DEBUG3(printk("cfg_failover: new fp lun @ %p\n",
++                                              new_fp);)
++
++                      qla2x00_cfg_register_failover_lun(dp, sp, new_fp);
++              } else {
++                      printk(KERN_INFO
++                              "qla2x00(%d): Couldn't find device "
++                              "to failover\n",
++                              host->instance);
++              }
++      }
++      clear_bit(CFG_ACTIVE, &ha->cfg_flags);
++
++      LEAVE("qla2x00_cfg_failover");
++
++      return new_fp;
++}
++
++/*
++ * IOCTL support
++ */
++#define CFG_IOCTL
++#if defined(CFG_IOCTL)
++/*
++ * qla2x00_cfg_get_paths
++ *      Get list of paths EXT_FO_GET_PATHS.
++ *
++ * Input:
++ *      ha = pointer to adapter
++ *      bp = pointer to buffer
++ *      cmd = Pointer to kernel copy of EXT_IOCTL.
++ *
++ * Return;
++ *      0 on success or errno.
++ *    driver ioctl errors are returned via cmd->Status.
++ *
++ * Context:
++ *      Kernel context.
++ */
++int
++qla2x00_cfg_get_paths(EXT_IOCTL *cmd, FO_GET_PATHS *bp, int mode)
++{
++      FO_PATHS_INFO   *paths, *u_paths;
++      FO_PATH_ENTRY   *entry;
++      EXT_DEST_ADDR   *sap = &bp->HbaAddr;
++      mp_host_t       *host = NULL;   /* host adapter pointer */
++      mp_device_t     *dp;            /* virtual device pointer */
++      mp_path_t       *path;          /* path pointer */
++      mp_path_list_t  *path_list;     /* path list pointer */
++      int     cnt;
++      int     rval = 0;
++      scsi_qla_host_t *ha;
++
++      DEBUG9(printk("%s: entered.\n", __func__);)
++
++      u_paths = (FO_PATHS_INFO *) cmd->ResponseAdr;
++      ha = qla2x00_get_hba((int)bp->HbaInstance);
++
++      if (!ha) {
++              DEBUG2_9_10(printk("%s: no ha matching inst %d.\n",
++                  __func__, bp->HbaInstance);)
++
++              cmd->Status = EXT_STATUS_DEV_NOT_FOUND;
++              return (rval);
++      }
++
++      if (ha->flags.failover_enabled)
++              if ((host = qla2x00_cfg_find_host(ha)) == NULL) {
++                      cmd->Status = EXT_STATUS_DEV_NOT_FOUND;
++                      cmd->DetailStatus = EXT_DSTATUS_HBA_INST;
++                      DEBUG4(printk("%s: cannot find target (%ld)\n",
++                          __func__, ha->instance);)
++                      DEBUG9_10(printk("%s: cannot find host inst(%ld).\n",
++                          __func__, ha->instance);)
++
++                      return rval;
++              }
++
++      paths = (FO_PATHS_INFO *)qla2x00_kmem_zalloc(
++          sizeof(FO_PATHS_INFO), GFP_ATOMIC, 20);
++      if (paths == NULL) {
++              DEBUG4(printk("%s: failed to allocate memory of size (%d)\n",
++                  __func__, (int)sizeof(FO_PATHS_INFO));)
++              DEBUG9_10(printk("%s: failed allocate memory size(%d).\n",
++                  __func__, (int)sizeof(FO_PATHS_INFO));)
++
++              cmd->Status = EXT_STATUS_NO_MEMORY;
++
++              return -ENOMEM;
++      }
++
++      if (!ha->flags.failover_enabled) {
++              /* non-fo case. There's only one path. */
++
++              mp_path_list_t  *ptmp_plist;
++#define STD_MAX_PATH_CNT      1
++#define STD_VISIBLE_INDEX     0
++              int             found;
++              struct list_head *fcpl;
++              fc_port_t       *fcport;
++
++              DEBUG9(printk("%s: non-fo case.\n", __func__);)
++
++              if (qla2x00_get_ioctl_scrap_mem(ha, (void **)&ptmp_plist,
++                  sizeof(mp_path_list_t))) {
++                      /* not enough memory */
++                      DEBUG9_10(printk("%s(%ld): inst=%ld scrap not big enough. "
++                          "lun_mask requested=%d.\n",
++                          __func__, ha->host_no, ha->instance,
++                          sizeof(mp_path_list_t));)
++                      cmd->Status = EXT_STATUS_NO_MEMORY;
++
++                      return -ENOMEM;
++              }
++
++              found = 0;
++              fcport = NULL;
++              list_for_each(fcpl, &ha->fcports) {
++                      fcport = list_entry(fcpl, fc_port_t, list);
++
++                      if (memcmp(fcport->node_name, sap->DestAddr.WWNN,
++                          EXT_DEF_WWN_NAME_SIZE) == 0) {
++                              found++;
++                              break;
++                      }
++              }
++
++              if (found) {
++                      DEBUG9(printk("%s: found fcport:"
++                          "(%02x-%02x-%02x-%02x-%02x-%02x-%02x-%02x)\n.",
++                          __func__,
++                          sap->DestAddr.WWNN[0],
++                          sap->DestAddr.WWNN[1],
++                          sap->DestAddr.WWNN[2],
++                          sap->DestAddr.WWNN[3],
++                          sap->DestAddr.WWNN[4],
++                          sap->DestAddr.WWNN[5],
++                          sap->DestAddr.WWNN[6],
++                          sap->DestAddr.WWNN[7]);)
++
++                      paths->HbaInstance         = bp->HbaInstance;
++                      paths->PathCount           = STD_MAX_PATH_CNT;
++                      paths->VisiblePathIndex    = STD_VISIBLE_INDEX;
++
++                      /* Copy current path, which is the first one (0). */
++                      memcpy(paths->CurrentPathIndex, ptmp_plist->current_path,
++                          sizeof(paths->CurrentPathIndex));
++
++                      entry = &(paths->PathEntry[STD_VISIBLE_INDEX]);
++
++                      entry->Visible     = TRUE;
++                      entry->HbaInstance = bp->HbaInstance;
++
++                      memcpy(entry->PortName, fcport->port_name,
++                          EXT_DEF_WWP_NAME_SIZE);
++
++                      rval = verify_area(VERIFY_WRITE, (void *)u_paths,
++                          cmd->ResponseLen);
++                      if (rval) {
++                              /* error */
++                              DEBUG9_10(printk("%s: u_paths %p verify write"
++                                  " error. paths->PathCount=%d.\n",
++                                  __func__, u_paths, paths->PathCount);)
++                      }
++
++                      /* Copy data to user */
++                      if (rval == 0)
++                              rval = copy_to_user(&u_paths->PathCount,
++                                  &paths->PathCount, 4);
++                      if (rval == 0)
++                              rval = copy_to_user(&u_paths->CurrentPathIndex,
++                                  &paths->CurrentPathIndex,
++                                  sizeof(paths->CurrentPathIndex));
++                      if (rval == 0)
++                              rval = copy_to_user(&u_paths->PathEntry,
++                                  &paths->PathEntry,
++                                  sizeof(paths->PathEntry));
++
++                      if (rval) { /* if any of the above failed */
++                              DEBUG9_10(printk("%s: data copy failed.\n",
++                                  __func__);)
++
++                              cmd->Status = EXT_STATUS_COPY_ERR;
++                      }
++              } else {
++                      cmd->Status = EXT_STATUS_DEV_NOT_FOUND;
++                      cmd->DetailStatus = EXT_DSTATUS_TARGET;
++
++                      DEBUG10(printk("%s: cannot find fcport "
++                          "(%02x-%02x-%02x-%02x-%02x-%02x-%02x-%02x)\n.",
++                          __func__,
++                          sap->DestAddr.WWNN[0],
++                          sap->DestAddr.WWNN[1],
++                          sap->DestAddr.WWNN[2],
++                          sap->DestAddr.WWNN[3],
++                          sap->DestAddr.WWNN[4],
++                          sap->DestAddr.WWNN[5],
++                          sap->DestAddr.WWNN[6],
++                          sap->DestAddr.WWNN[7]);)
++                      DEBUG4(printk("%s: cannot find fcport "
++                          "(%02x-%02x-%02x-%02x-%02x-%02x-%02x-%02x)\n.",
++                          __func__,
++                          sap->DestAddr.WWNN[0],
++                          sap->DestAddr.WWNN[1],
++                          sap->DestAddr.WWNN[2],
++                          sap->DestAddr.WWNN[3],
++                          sap->DestAddr.WWNN[4],
++                          sap->DestAddr.WWNN[5],
++                          sap->DestAddr.WWNN[6],
++                          sap->DestAddr.WWNN[7]);)
++              }
++
++              qla2x00_free_ioctl_scrap_mem(ha);
++              /* end of non-fo case. */
++
++      } else if (sap->DestType != EXT_DEF_DESTTYPE_WWNN) {
++              /* Scan for mp_dev by nodename *ONLY* */
++
++              cmd->Status = EXT_STATUS_INVALID_PARAM;
++              cmd->DetailStatus = EXT_DSTATUS_TARGET;
++
++              DEBUG4(printk("%s: target can be accessed by NodeName only.",
++                  __func__);)
++              DEBUG10(printk("%s: target can be accessed by NodeName only. "
++                  "got type %d.\n",
++                  __func__, sap->DestType);)
++
++      } else if ((dp = qla2x00_find_mp_dev_by_name(host,
++          sap->DestAddr.WWNN)) != NULL) {
++              DEBUG9(printk("%s: Found mp_dev:"
++                  "(%02x-%02x-%02x-%02x-%02x-%02x-%02x-%02x)\n.",
++                  __func__,
++                  sap->DestAddr.WWNN[0],
++                  sap->DestAddr.WWNN[1],
++                  sap->DestAddr.WWNN[2],
++                  sap->DestAddr.WWNN[3],
++                  sap->DestAddr.WWNN[4],
++                  sap->DestAddr.WWNN[5],
++                  sap->DestAddr.WWNN[6],
++                  sap->DestAddr.WWNN[7]);)
++
++              path_list = dp->path_list;
++
++              paths->HbaInstance = bp->HbaInstance;
++              paths->PathCount           = path_list->path_cnt;
++              paths->VisiblePathIndex    = path_list->visible;
++
++              /* copy current paths */
++              memcpy(paths->CurrentPathIndex,
++                  path_list->current_path,
++                  sizeof(paths->CurrentPathIndex));
++
++              path = path_list->last;
++              for (cnt = 0; cnt < path_list->path_cnt; cnt++) {
++                      entry = &(paths->PathEntry[path->id]);
++
++                      entry->Visible    = (path->id == path_list->visible);
++                      entry->HbaInstance = path->host->instance;
++
++                      memcpy(entry->PortName,
++                          path->portname,
++                          EXT_DEF_WWP_NAME_SIZE);
++
++                      path = path->next;
++              }
++
++              rval = verify_area(VERIFY_WRITE, (void *)u_paths,
++                  cmd->ResponseLen);
++              if (rval) {
++                      /* error */
++                      DEBUG9_10(printk("%s: u_paths %p verify write"
++                          " error. paths->PathCount=%d.\n",
++                          __func__, u_paths, paths->PathCount);)
++              }
++
++              /* copy data to user */
++              if (rval == 0)
++                      rval = copy_to_user(&u_paths->PathCount,
++                          &paths->PathCount, 4);
++              if (rval == 0)
++                      rval = copy_to_user(&u_paths->CurrentPathIndex,
++                          &paths->CurrentPathIndex,
++                          sizeof(paths->CurrentPathIndex));
++              if (rval == 0)
++                      rval = copy_to_user(&u_paths->PathEntry,
++                          &paths->PathEntry,
++                          sizeof(paths->PathEntry));
++
++              if (rval != 0) {  /* if any of the above failed */
++                      DEBUG9_10(printk("%s: u_paths %p copy"
++                          " error. paths->PathCount=%d.\n",
++                          __func__, u_paths, paths->PathCount);)
++                      cmd->Status = EXT_STATUS_COPY_ERR;
++              }
++
++      } else {
++
++              cmd->Status = EXT_STATUS_DEV_NOT_FOUND;
++              cmd->DetailStatus = EXT_DSTATUS_TARGET;
++
++              DEBUG4(printk("%s: cannot find device "
++                  "(%02x-%02x-%02x-%02x-%02x-%02x-%02x-%02x)\n.",
++                  __func__,
++                  sap->DestAddr.WWNN[0],
++                  sap->DestAddr.WWNN[1],
++                  sap->DestAddr.WWNN[2],
++                  sap->DestAddr.WWNN[3],
++                  sap->DestAddr.WWNN[4],
++                  sap->DestAddr.WWNN[5],
++                  sap->DestAddr.WWNN[6],
++                  sap->DestAddr.WWNN[7]);)
++      }
++
++      KMEM_FREE(paths, sizeof(FO_PATHS_INFO));
++
++      DEBUG9(printk("%s: exiting. rval=%d.\n", __func__, rval);)
++
++      return rval;
++
++} /* qla2x00_cfg_get_paths */
++
++/*
++ * qla2x00_cfg_set_current_path
++ *      Set the current failover path EXT_FO_GET_PATHS IOCTL call.
++ *
++ * Input:
++ *      ha = pointer to adapter
++ *      bp = pointer to buffer
++ *      cmd = Pointer to kernel copy of EXT_IOCTL.
++ *
++ * Return;
++ *      0 on success or errno.
++ *
++ * Context:
++ *      Kernel context.
++ */
++int
++qla2x00_cfg_set_current_path(EXT_IOCTL *cmd, FO_SET_CURRENT_PATH *bp, int mode )
++{
++      uint8_t         orig_id, new_id;
++      mp_host_t       *host, *new_host;
++      mp_device_t     *dp;
++      mp_path_list_t  *path_list;
++      EXT_DEST_ADDR   *sap = &bp->HbaAddr;
++      uint32_t        rval = 0;
++      scsi_qla_host_t *ha;
++      mp_path_t       *new_path, *old_path;
++
++      DEBUG9(printk("%s: entered.\n", __func__);)
++
++      /* First find the adapter with the instance number. */
++      ha = qla2x00_get_hba((int)bp->HbaInstance);
++      if (!ha) {
++              DEBUG2_9_10(printk("%s: no ha matching inst %d.\n",
++                  __func__, bp->HbaInstance);)
++
++              cmd->Status = EXT_STATUS_DEV_NOT_FOUND;
++              return (rval);
++      }
++
++      if (!ha->flags.failover_enabled)
++              /* non-failover mode. nothing to be done. */
++              return 0;
++
++      if ((host = qla2x00_cfg_find_host(ha)) == NULL) {
++              cmd->Status = EXT_STATUS_DEV_NOT_FOUND;
++              cmd->DetailStatus = EXT_DSTATUS_HBA_INST;
++              DEBUG4(printk("%s: cannot find adapter.\n",
++                  __func__);)
++              return (rval);
++      }
++
++      set_bit(CFG_ACTIVE, &ha->cfg_flags);
++      sap = &bp->HbaAddr;
++      /* Scan for mp_dev by nodename *ONLY* */
++      if (sap->DestType != EXT_DEF_DESTTYPE_WWNN) {
++              cmd->Status = EXT_STATUS_DEV_NOT_FOUND;
++              cmd->DetailStatus = EXT_DSTATUS_TARGET;
++              DEBUG4(printk("%s: target can be accessed by NodeName only.",
++                  __func__);)
++              DEBUG9_10(printk("%s: target can be accessed by NodeName only.",
++                  __func__);)
++      } else if ((dp = qla2x00_find_mp_dev_by_name(
++          host, sap->DestAddr.WWNN)) != NULL) {
++
++              path_list = dp->path_list;
++
++              if (bp->NewCurrentPathIndex < MAX_PATHS_PER_DEVICE &&
++                  sap->Lun < MAX_LUNS &&
++                  bp->NewCurrentPathIndex < path_list->path_cnt) {
++
++                      orig_id = path_list->current_path[sap->Lun];
++
++                      DEBUG(printk("%s: dev no  %d, lun %d, "
++                          "newindex %d, oldindex %d "
++                          "nn=%02x%02x%02x%02x%02x%02x%02x%02x\n",
++                          __func__, dp->dev_id, sap->Lun,
++                          bp->NewCurrentPathIndex, orig_id,
++                          host->nodename[0], host->nodename[1],
++                          host->nodename[2], host->nodename[3],
++                          host->nodename[4], host->nodename[5],
++                          host->nodename[6], host->nodename[7]);)
++
++                      if (bp->NewCurrentPathIndex != orig_id) {
++                              /* Acquire the update spinlock. */
++
++                              /* Set the new current path. */
++                              new_id = path_list-> current_path[sap->Lun] =
++                                  bp->NewCurrentPathIndex;
++
++                              /* Release the update spinlock. */
++                              old_path = qla2x00_find_path_by_id(
++                                  dp, orig_id);
++                              new_path = qla2x00_find_path_by_id(dp, new_id);
++                              new_host = new_path->host;
++
++                              /* remap the lun */
++                              qla2x00_map_a_oslun(new_host, dp,
++                                  dp->dev_id, sap->Lun);
++
++                              qla2x00_send_failover_notify(dp,
++                                  sap->Lun, old_path, new_path);
++                      } else {
++                              /* EMPTY */
++                              DEBUG4(printk("%s: path index not changed.\n",
++                                  __func__);)
++                      }
++              } else {
++                      cmd->Status = EXT_STATUS_INVALID_PARAM;
++                      cmd->DetailStatus = EXT_DSTATUS_PATH_INDEX;
++                      DEBUG4(printk("%s: invalid index for device.\n",
++                          __func__);)
++                      DEBUG9_10(printk("%s: invalid index for device.\n",
++                          __func__);)
++              }
++      } else {
++              cmd->Status = EXT_STATUS_DEV_NOT_FOUND;
++              cmd->DetailStatus = EXT_DSTATUS_TARGET;
++              DEBUG4(printk("%s: cannot find device.\n",
++                  __func__);)
++              DEBUG9_10(printk("%s: cannot find device.\n",
++                  __func__);)
++      }
++      clear_bit(CFG_ACTIVE, &ha->cfg_flags);
++
++      DEBUG9(printk("%s: exiting. rval = %d.\n", __func__, rval);)
++
++      return rval;
++}
++#endif
++
++/*
++ * MP SUPPORT ROUTINES
++ */
++
++/*
++ * qla2x00_add_mp_host
++ *    Add the specified host the host list.
++ *
++ * Input:
++ *    node_name = pointer to node name
++ *
++ * Returns:
++ *
++ * Context:
++ *    Kernel context.
++ */
++mp_host_t *
++qla2x00_add_mp_host(uint8_t *node_name)
++{
++      mp_host_t   *host, *temp;
++
++      host = (mp_host_t *) KMEM_ZALLOC(sizeof(mp_host_t), 1);
++      if (host != NULL) {
++              memcpy(host->nodename, node_name, WWN_SIZE);
++              host->next = NULL;
++              /* add to list */
++              if (mp_hosts_base == NULL) {
++                      mp_hosts_base = host;
++              } else {
++                      temp = mp_hosts_base;
++                      while (temp->next != NULL)
++                              temp = temp->next;
++                      temp->next = host;
++              }
++              mp_num_hosts++;
++      }
++      return host;
++}
++
++/*
++ * qla2x00_alloc_host
++ *      Allocate and initialize an mp host structure.
++ *
++ * Input:
++ *      ha = pointer to base driver's adapter structure.
++ *
++ * Returns:
++ *      Pointer to host structure or null on error.
++ *
++ * Context:
++ *      Kernel context.
++ */
++mp_host_t   *
++qla2x00_alloc_host(scsi_qla_host_t *ha)
++{
++      mp_host_t       *host, *temp;
++      uint8_t         *name, *portname;
++
++      name =  &ha->init_cb->node_name[0];
++      portname = &ha->init_cb->port_name[0];
++
++      ENTER("qla2x00_alloc_host");
++
++      host = (mp_host_t *) KMEM_ZALLOC(sizeof(mp_host_t), 2);
++
++      if (host != NULL) {
++              host->ha = ha;
++              memcpy(host->nodename, name, WWN_SIZE);
++              memcpy(host->portname, portname, WWN_SIZE);
++              host->next = NULL;
++              host->flags = MP_HOST_FLAG_NEEDS_UPDATE;
++              host->instance = ha->instance;
++              /* host->MaxLunsPerTarget = qla_fo_params.MaxLunsPerTarget; */
++
++              if (qla2x00_fo_enabled(host->ha, host->instance)) {
++                      host->flags |= MP_HOST_FLAG_FO_ENABLED;
++                      DEBUG4(printk("%s: Failover enabled.\n",
++                          __func__);)
++              } else {
++                      /* EMPTY */
++                      DEBUG4(printk("%s: Failover disabled.\n",
++                          __func__);)
++              }
++              /* add to list */
++              if (mp_hosts_base == NULL) {
++                      mp_hosts_base = host;
++              } else {
++                      temp = mp_hosts_base;
++                      while (temp->next != NULL)
++                              temp = temp->next;
++                      temp->next = host;
++              }
++              mp_num_hosts++;
++
++              DEBUG4(printk("%s: Alloc host @ %p\n", __func__, host);)
++      } else {
++              /* EMPTY */
++              DEBUG4(printk("%s: Failed\n", __func__);)
++      }
++
++      return host;
++}
++
++/*
++ * qla2x00_add_portname_to_mp_dev
++ *      Add the specific port name to the list of port names for a
++ *      multi-path device.
++ *
++ * Input:
++ *      dp = pointer ti virtual device
++ *      portname = Port name to add to device
++ *
++ * Returns:
++ *      qla2x00 local function return status code.
++ *
++ * Context:
++ *      Kernel context.
++ */
++static uint32_t
++qla2x00_add_portname_to_mp_dev(mp_device_t *dp, uint8_t *portname)
++{
++      uint8_t         index;
++      uint32_t        rval = QLA2X00_SUCCESS;
++
++      ENTER("qla2x00_add_portname_to_mp_dev");
++
++      /* Look for an empty slot and add the specified portname.   */
++      for (index = 0; index < MAX_NUMBER_PATHS; index++) {
++              if (qla2x00_is_ww_name_zero(&dp->portnames[index][0])) {
++                      DEBUG4(printk("%s: adding portname to dp = "
++                          "%p at index = %d\n",
++                          __func__, dp, index);)
++                      memcpy(&dp->portnames[index][0], portname, WWN_SIZE);
++                      break;
++              }
++      }
++      if (index == MAX_NUMBER_PATHS) {
++              rval = QLA2X00_FUNCTION_FAILED;
++              DEBUG4(printk("%s: Fail no room\n", __func__);)
++      } else {
++              /* EMPTY */
++              DEBUG4(printk("%s: Exit OK\n", __func__);)
++      }
++
++      LEAVE("qla2x00_add_portname_to_mp_dev");
++
++      return rval;
++}
++
++
++/*
++ *  qla2x00_allocate_mp_dev
++ *      Allocate an fc_mp_dev, clear the memory, and log a system
++ *      error if the allocation fails. After fc_mp_dev is allocated
++ *
++ *  Inputs:
++ *      nodename  = pointer to nodename of new device
++ *      portname  = pointer to portname of new device
++ *
++ *  Returns:
++ *      Pointer to new mp_device_t, or NULL if the allocation fails.
++ *
++ * Context:
++ *      Kernel context.
++ */
++static mp_device_t *
++qla2x00_allocate_mp_dev(uint8_t  *nodename, uint8_t *portname)
++{
++      mp_device_t   *dp;            /* Virtual device pointer */
++
++      ENTER("qla2x00_allocate_mp_dev");
++
++      dp = (mp_device_t *)KMEM_ZALLOC(sizeof(mp_device_t), 3);
++
++      if (dp != NULL) {
++              DEBUG3(printk("%s: mp_device_t allocated at %p\n",
++                  __func__, dp);)
++
++              /*
++               * Copy node name into the mp_device_t.
++               */
++              if (nodename)
++                      memcpy(dp->nodename, nodename, WWN_SIZE);
++
++              /*
++               * Since this is the first port, it goes at
++               * index zero.
++               */
++              if (portname)
++                      memcpy(&dp->portnames[0][0], portname, PORT_NAME_SIZE);
++
++              /* Allocate an PATH_LIST for the fc_mp_dev. */
++              if ((dp->path_list = qla2x00_allocate_path_list()) == NULL) {
++                      DEBUG4(printk("%s: allocate path_list Failed.\n",
++                          __func__);)
++                      KMEM_FREE(dp, sizeof(mp_device_t));
++                      dp = NULL;
++              } else {
++                      DEBUG4(printk("%s: mp_path_list_t allocated at %p\n",
++                          __func__, dp->path_list);)
++                      /* EMPTY */
++                      DEBUG4(printk("qla2x00_allocate_mp_dev: Exit Okay\n");)
++              }
++      } else {
++              /* EMPTY */
++              DEBUG4(printk("%s: Allocate failed.\n", __func__);)
++      }
++
++      LEAVE("qla2x00_allocate_mp_dev");
++
++      return dp;
++}
++
++/*
++ *  qla2x00_allocate_path
++ *      Allocate a PATH.
++ *
++ *  Inputs:
++ *     host   Host adapter for the device.
++ *     path_id  path number
++ *     port   port for device.
++ *      dev_id  device number
++ *
++ *  Returns:
++ *      Pointer to new PATH, or NULL if the allocation failed.
++ *
++ * Context:
++ *      Kernel context.
++ */
++static mp_path_t *
++qla2x00_allocate_path(mp_host_t *host, uint16_t path_id,
++    fc_port_t *port, uint16_t dev_id)
++{
++      mp_path_t       *path;
++      uint16_t        lun;
++
++      ENTER("qla2x00_allocate_path");
++
++      path = (mp_path_t *) KMEM_ZALLOC(sizeof(mp_path_t), 4);
++      if (path != NULL) {
++              DEBUG3(printk("%s: mp_path_t allocated at %p\n",
++                  __func__, path); )
++
++              /* Copy the supplied information into the MP_PATH.  */
++              path->host = host;
++              if (!(port->flags & FC_CONFIG) ||
++                      port->loop_id != FC_NO_LOOP_ID) {
++
++                      path->port = port;
++              }
++              path->id   = path_id;
++              port->cur_path = path->id;
++              path->mp_byte  = port->mp_byte;
++              path->next  = NULL;
++              memcpy(path->portname, port->port_name, WWN_SIZE);
++              for (lun = 0; lun < MAX_LUNS; lun++) {
++                      path->lun_data.data[lun] |= LUN_DATA_ENABLED;
++              }
++      } else {
++              /* EMPTY */
++              DEBUG4(printk("%s: Failed\n", __func__);)
++      }
++
++      return path;
++}
++
++
++/*
++ *  qla2x00_allocate_path_list
++ *      Allocate a PATH_LIST
++ *
++ *  Input:
++ *            None
++ *
++ *  Returns:
++ *      Pointer to new PATH_LIST, or NULL if the allocation fails.
++ *
++ * Context:
++ *      Kernel context.
++ */
++static mp_path_list_t *
++qla2x00_allocate_path_list( void )
++{
++      mp_path_list_t  *path_list;
++      uint16_t                i;
++      uint8_t                 l;
++
++      path_list = (mp_path_list_t *) KMEM_ZALLOC(sizeof(mp_path_list_t), 5);
++
++      if (path_list != NULL) {
++              DEBUG4(printk("%s: allocated at %p\n",
++                  __func__, path_list);)
++
++              path_list->visible = PATH_INDEX_INVALID;
++              /* Initialized current path */
++              for (i = 0; i < MAX_LUNS_PER_DEVICE; i++) {
++                      l = (uint8_t)(i & 0xFF);
++                      path_list->current_path[l] = PATH_INDEX_INVALID;
++              }
++              path_list->last = NULL;
++
++      } else {
++              /* EMPTY */
++              DEBUG4(printk("%s: Alloc pool failed for MP_PATH_LIST.\n",
++                  __func__);)
++      }
++
++      return path_list;
++}
++
++/*
++ *  qla2x00_cfg_find_host
++ *      Look through the existing multipath tree, and find
++ *      a host adapter to match the specified ha.
++ *
++ *  Input:
++ *      ha = pointer to host adapter
++ *
++ *  Return:
++ *      Pointer to new host, or NULL if no match found.
++ *
++ * Context:
++ *      Kernel context.
++ */
++mp_host_t *
++qla2x00_cfg_find_host(scsi_qla_host_t *ha)
++{
++      mp_host_t     *host = NULL;     /* Host found and null if not */
++      mp_host_t     *tmp_host;
++
++      ENTER("qla2x00_cfg_find_host");
++
++      for (tmp_host = mp_hosts_base; (tmp_host); tmp_host = tmp_host->next) {
++              if (tmp_host->ha == ha) {
++                      host = tmp_host;
++                      DEBUG3(printk("%s: Found host =%p, instance %d\n",
++                          __func__, host, host->instance);)
++                      break;
++              }
++      }
++
++      LEAVE("qla2x00_cfg_find_host");
++
++      return host;
++}
++
++/*
++ *  qla2x00_find_host_by_name
++ *      Look through the existing multipath tree, and find
++ *      a host adapter to match the specified name.
++ *
++ *  Input:
++ *      name = node name to match.
++ *
++ *  Return:
++ *      Pointer to new host, or NULL if no match found.
++ *
++ * Context:
++ *      Kernel context.
++ */
++mp_host_t *
++qla2x00_find_host_by_name(uint8_t   *name)
++{
++      mp_host_t     *host;            /* Host found and null if not */
++
++      for (host = mp_hosts_base; (host); host = host->next) {
++              if (memcmp(host->nodename, name, WWN_SIZE) == 0)
++                      break;
++      }
++      return host;
++}
++
++
++/*
++ *  qla2x00_find_or_allocate_mp_dev
++ *      Look through the existing multipath control tree, and find
++ *      an mp_device_t with the supplied world-wide node name.  If
++ *      one cannot be found, allocate one.
++ *
++ *  Input:
++ *      host      Adapter to add device to.
++ *      dev_id    Index of device on adapter.
++ *      port      port database information.
++ *
++ *  Returns:
++ *      Pointer to new mp_device_t, or NULL if the allocation fails.
++ *
++ *  Side Effects:
++ *      If the MP HOST does not already point to the mp_device_t,
++ *      a pointer is added at the proper port offset.
++ *
++ * Context:
++ *      Kernel context.
++ */
++static mp_device_t *
++qla2x00_find_or_allocate_mp_dev(mp_host_t *host, uint16_t dev_id,
++    fc_port_t *port)
++{
++      mp_device_t     *dp = NULL;  /* pointer to multi-path device   */
++      uint8_t         node_found;  /* Found matching node name. */
++      uint8_t         port_found;  /* Found matching port name. */
++      uint8_t         names_valid; /* Node name and port name are not zero */ 
++      mp_host_t       *temp_host;  /* pointer to temporary host */
++
++      uint16_t        j;
++      mp_device_t     *temp_dp;
++
++      ENTER("qla2x00_find_or_allocate_mp_dev");
++
++      DEBUG3(printk("%s: host =%p, port =%p, id = %d\n",
++          __func__, host, port, dev_id);)
++
++      temp_dp = qla2x00_find_mp_dev_by_id(host,dev_id);
++
++      DEBUG3(printk("%s: temp dp =%p\n", __func__, temp_dp);)
++      /* if Device already known at this port. */
++      if (temp_dp != NULL) {
++              node_found = qla2x00_is_nodename_equal(temp_dp->nodename,
++                                      port->node_name);
++              port_found = qla2x00_is_portname_in_device(temp_dp,
++                                      port->port_name);
++
++              if (node_found && port_found) {
++                      DEBUG3(printk("%s: port exists in device %p\n",
++                          __func__, temp_dp);)
++                      dp = temp_dp;
++
++                      /*
++                       * Copy the LUN configuration data
++                       * into the mp_device_t.
++                       */
++              }
++      }
++
++
++      /* Sanity check the port information  */
++      names_valid = (!qla2x00_is_ww_name_zero(port->node_name) &&
++                      !qla2x00_is_ww_name_zero(port->port_name));
++
++      /*
++       * If the optimized check failed, loop through each known
++       * device on each known adapter looking for the node name.
++       */
++      if (dp == NULL && names_valid) {
++              DEBUG3(printk("%s: Searching each adapter for the device...\n",
++                  __func__);)
++
++              for (temp_host = mp_hosts_base; (temp_host);
++                  temp_host = temp_host->next) {
++
++                      /* Loop through each potential device on adapter. */
++                      for (j = 0; j < MAX_MP_DEVICES; j++) {
++                              temp_dp = temp_host->mp_devs[j];
++
++                              if (temp_dp == NULL)
++                                      continue;
++
++                              node_found = qla2x00_is_nodename_equal(
++                                              temp_dp->nodename,
++                                              port->node_name);
++                              port_found = qla2x00_is_portname_in_device(
++                                              temp_dp,
++                                              port->port_name);
++
++                              if (node_found || port_found) {
++                                      DEBUG3(printk("%s: Matching device "
++                                          "found at %p @ %d\n",
++                                          __func__, temp_dp, j);)
++                                      /*
++                                       * If the node name matches but
++                                       * the port name was not found,
++                                       * add the port name to the list
++                                       * of port names.
++                                       */
++                                      if (!port_found) {
++                                              qla2x00_add_portname_to_mp_dev(
++                                                              temp_dp,
++                                                              port->port_name);
++                                      }
++
++                                      /*
++                                       * Set the flag that we have
++                                       * found the device.
++                                       */
++                                      dp = temp_dp;
++                                      host->mp_devs[j] = dp;
++                                      dp->use_cnt++;
++
++                                      /* Fixme(dg)
++                                       * Copy the LUN info into
++                                       * the mp_device_t
++                                       */
++                                      break;
++                              }
++                      }
++
++                      /* Break outer loop if inner loop succeeded. */
++                      if (dp != NULL)
++                              break;
++              }
++
++      }
++
++      /* If we couldn't find one, allocate one. */
++      if (dp == NULL &&
++              ((port->flags & FC_CONFIG) || !mp_config_required ) ) {
++
++              dp = qla2x00_allocate_mp_dev(port->node_name, port->port_name);
++              host->mp_devs[dev_id] = dp;
++              dp->dev_id = dev_id;
++              dp->use_cnt++;
++      }
++
++      LEAVE("qla2x00_allocate_mp_dev");
++
++      return dp;
++}
++
++
++/*
++ *  qla2x00_find_or_allocate_path
++ *      Look through the path list for the supplied device, and either
++ *      find the supplied adapter (path) for the adapter, or create
++ *      a new one and add it to the path list.
++ *
++ *  Input:
++ *      host      Adapter (path) for the device.
++ *      dp       Device and path list for the device.
++ *      dev_id    Index of device on adapter.
++ *      port     Device data from port database.
++ *
++ *  Returns:
++ *      Pointer to new PATH, or NULL if the allocation fails.
++ *
++ *  Side Effects:
++ *      1. If the PATH_LIST does not already point to the PATH,
++ *         a new PATH is added to the PATH_LIST.
++ *      2. If the new path is found to be a second visible path, it is
++ *         marked as hidden, and the device database is updated to be
++ *         hidden as well, to keep the miniport synchronized.
++ *
++ * Context:
++ *      Kernel context.
++ */
++/* ARGSUSED */
++static mp_path_t *
++qla2x00_find_or_allocate_path(mp_host_t *host, mp_device_t *dp,
++    uint16_t dev_id, fc_port_t *port)
++{
++      mp_path_list_t  *path_list = dp->path_list;
++      mp_path_t               *path;
++      uint8_t                 id;
++
++
++      ENTER("qla2x00_find_or_allocate_path");
++
++      DEBUG4(printk("%s: host =%p, port =%p, dp=%p, dev id = %d\n",
++          __func__, host, port, dp, dev_id);)
++      /*
++       * Loop through each known path in the path list.  Look for
++       * a PATH that matches both the adapter and the port name.
++       */
++      path = qla2x00_find_path_by_name(host, path_list, port->port_name);
++
++
++      if (path != NULL ) {
++              DEBUG3(printk("%s: Found an existing "
++                  "path -  host =%p, port =%p, path id = %d\n",
++                  __func__, host, path->port, path->id);)
++              DEBUG3(printk("%s: Luns for path_id %d, instance %d\n",
++                  __func__, path->id, host->instance);)
++              DEBUG3(qla2x00_dump_buffer(
++                  (char *)&path->lun_data.data[0], 64);)
++
++              /* If we found an existing path, look for any changes to it. */
++              if (path->port == NULL) {
++                      DEBUG3(printk("%s: update path %p, path id= %d, "
++                          "mp_byte=0x%x port=%p\n",
++                          __func__, path, path->id,
++                          path->mp_byte, path->port);)
++                      path->port = port;
++                      port->mp_byte = path->mp_byte;
++              } else {
++                      if ((path->mp_byte & MP_MASK_HIDDEN) &&
++                              !(port->mp_byte & MP_MASK_HIDDEN)) {
++
++                              DEBUG3(printk("%s: Adapter(%p) "
++                                  "Device (%p) Path (%d) "
++                                  "has become visible.\n",
++                                  __func__, host, dp, path->id);)
++
++                              path->mp_byte &= ~MP_MASK_HIDDEN;
++                      }
++
++                      if (!(path->mp_byte & MP_MASK_HIDDEN) &&
++                                      (port->mp_byte & MP_MASK_HIDDEN)) {
++
++                              DEBUG3(printk("%s: Adapter(%p) "
++                                  "Device (%p) Path (%d) "
++                                  "has become hidden.\n",
++                                  __func__, host, dp, path->id);)
++
++                              path->mp_byte |= MP_MASK_HIDDEN;
++                      }
++              }
++
++      } else {
++              /*
++               * If we couldn't find an existing path, and there is still
++               * room to add one, allocate one and put it in the list.
++               */
++              if (path_list->path_cnt < MAX_PATHS_PER_DEVICE &&
++                      path_list->path_cnt < qla_fo_params.MaxPathsPerDevice) {
++
++                      id = path_list->path_cnt;
++
++                      /* Update port with bitmask info */
++                      path = qla2x00_allocate_path(host, id, port, dev_id);
++                      DEBUG3(printk("%s: new path %p, path id= %d, "
++                          "mp_byte=0x%x port=%p\n",
++                          __func__, path, id,
++                          path->mp_byte, path->port);)
++                      qla2x00_add_path(path_list, path);
++
++                      /* Reconcile the new path against the existing ones. */
++                      qla2x00_setup_new_path(dp, path);
++              } else {
++                      /* EMPTY */
++                      DEBUG4(printk("%s: Err exit, no space to add path.\n",
++                          __func__);)
++              }
++
++      }
++
++      LEAVE("qla2x00_find_or_allocate_path");
++
++      return path;
++}
++
++static uint32_t
++qla2x00_cfg_register_failover_lun(mp_device_t *dp, srb_t *sp, fc_lun_t *new_lp)
++{
++      uint32_t        status = QLA2X00_SUCCESS;
++      os_tgt_t        *tq;
++      os_lun_t        *lq;
++      fc_lun_t        *old_lp;
++
++      DEBUG2(printk("%s: NEW fclun = %p, sp = %p\n",
++          __func__, new_lp, sp);)
++
++      /*
++       * Fix lun descriptors to point to new fclun which is a new fcport.
++       */
++      if (new_lp == NULL) {
++              DEBUG2(printk("%s: Failed new lun %p\n",
++                  __func__, new_lp);)
++              return QLA2X00_FUNCTION_FAILED;
++      }
++
++      tq = sp->tgt_queue;
++      lq = sp->lun_queue;
++      if (tq == NULL) {
++              DEBUG2(printk("%s: Failed to get old tq %p\n",
++                  __func__, tq);)
++              return QLA2X00_FUNCTION_FAILED;
++      }
++      if (lq == NULL) {
++              DEBUG2(printk("%s: Failed to get old lq %p\n",
++                  __func__, lq);)
++              return QLA2X00_FUNCTION_FAILED;
++      }
++      old_lp = lq->fclun;
++      lq->fclun = new_lp;
++
++      /* Log the failover to console */
++      printk(KERN_INFO
++              "qla2x00: FAILOVER device %d from "
++              "%02x%02x%02x%02x%02x%02x%02x%02x -> "
++              "%02x%02x%02x%02x%02x%02x%02x%02x - "
++              "LUN %02x, reason=0x%x\n",
++              dp->dev_id,
++              old_lp->fcport->port_name[0], old_lp->fcport->port_name[1],
++              old_lp->fcport->port_name[2], old_lp->fcport->port_name[3],
++              old_lp->fcport->port_name[4], old_lp->fcport->port_name[5],
++              old_lp->fcport->port_name[6], old_lp->fcport->port_name[7],
++              new_lp->fcport->port_name[0], new_lp->fcport->port_name[1],
++              new_lp->fcport->port_name[2], new_lp->fcport->port_name[3],
++              new_lp->fcport->port_name[4], new_lp->fcport->port_name[5],
++              new_lp->fcport->port_name[6], new_lp->fcport->port_name[7],
++              new_lp->lun, sp->err_id);
++      printk(KERN_INFO
++              "qla2x00: FROM HBA %d to HBA %d\n",
++              (int)old_lp->fcport->ha->instance,
++              (int)new_lp->fcport->ha->instance);
++
++      DEBUG3(printk("%s: NEW fclun = %p , port =%p, "
++          "loop_id =0x%x, instance %ld\n",
++          __func__,
++          new_lp, new_lp->fcport,
++          new_lp->fcport->loop_id,
++          new_lp->fcport->ha->instance);)
++
++      return status;
++}
++
++
++/*
++ * qla2x00_send_failover_notify
++ *      A failover operation has just been done from an old path
++ *      index to a new index.  Call lower level driver
++ *      to perform the failover notification.
++ *
++ * Inputs:
++ *      device           Device being failed over.
++ *      lun                LUN being failed over.
++ *      newpath           path that was failed over too.
++ *      oldpath           path that was failed over from.
++ *
++ * Return:
++ *      Local function status code.
++ *
++ * Context:
++ *      Kernel context.
++ */
++/* ARGSUSED */
++static uint32_t
++qla2x00_send_failover_notify(mp_device_t *dp,
++    uint8_t lun, mp_path_t *newpath, mp_path_t *oldpath)
++{
++      fc_lun_t        *old_lp, *new_lp;
++      uint32_t        status = QLA2X00_SUCCESS;
++
++      ENTER("qla2x00_send_failover_notify");
++
++      old_lp = qla2x00_find_matching_lun(lun, oldpath);
++      new_lp = qla2x00_find_matching_lun(lun, newpath);
++
++      /*
++       * If the target is the same target, but a new HBA has been selected,
++       * send a third party logout if required.
++       */
++      if ((qla_fo_params.FailoverNotifyType &
++                       FO_NOTIFY_TYPE_LOGOUT_OR_LUN_RESET ||
++                      qla_fo_params.FailoverNotifyType &
++                       FO_NOTIFY_TYPE_LOGOUT_OR_CDB) &&
++                      qla2x00_is_portname_equal(
++                              oldpath->portname, newpath->portname)) {
++
++              status =  qla2x00_send_fo_notification(old_lp, new_lp);
++              if (status == QLA2X00_SUCCESS) {
++                      /* EMPTY */
++                      DEBUG4(printk("%s: Logout succeded\n",
++                          __func__);)
++              } else {
++                      /* EMPTY */
++                      DEBUG4(printk("%s: Logout Failed\n",
++                          __func__);)
++              }
++      } else if ((qla_fo_params.FailoverNotifyType &
++                       FO_NOTIFY_TYPE_LUN_RESET) ||
++                      (qla_fo_params.FailoverNotifyType &
++                       FO_NOTIFY_TYPE_LOGOUT_OR_LUN_RESET)) {
++
++              /*
++               * If desired, send a LUN reset as the
++               * failover notification type.
++               */
++              if (newpath->lun_data.data[lun] & LUN_DATA_ENABLED) {
++                      status = qla2x00_send_fo_notification(old_lp, new_lp);
++                      if (status == QLA2X00_SUCCESS) {
++                              /* EMPTY */
++                              DEBUG4(printk("%s: LUN reset succeeded.\n",
++                                  __func__);)
++                      } else {
++                              /* EMPTY */
++                              DEBUG4(printk("%s: Failed reset LUN.\n",
++                                  __func__);)
++                      }
++              }
++
++      } else if (qla_fo_params.FailoverNotifyType == FO_NOTIFY_TYPE_CDB ||
++                      qla_fo_params.FailoverNotifyType ==
++                       FO_NOTIFY_TYPE_LOGOUT_OR_CDB) {
++
++              if (newpath->lun_data.data[lun] & LUN_DATA_ENABLED) {
++                      status = qla2x00_send_fo_notification(old_lp, new_lp);
++                      if (status == QLA2X00_SUCCESS) {
++                              /* EMPTY */
++                              DEBUG4(printk("%s: Send CDB succeeded.\n",
++                                  __func__);)
++                      } else {
++                              /* EMPTY */
++                              DEBUG4(printk("%s: Send CDB Error "
++                                  "lun=(%d).\n", __func__, lun);)
++                      }
++              }
++      } else {
++              /* EMPTY */
++              DEBUG4(printk("%s: failover disabled or no notify routine "
++                  "defined.\n", __func__);)
++      }
++
++      return status;
++}
++
++/*
++ *  qla2x00_select_next_path
++ *      A problem has been detected with the current path for this
++ *      device.  Try to select the next available path as the current
++ *      path for this device.  If there are no more paths, the same
++ *      path will still be selected.
++ *
++ *  Inputs:
++ *      dp           pointer of device structure.
++ *      lun                LUN to failover.
++ *
++ *  Return Value:
++ *            new path or same path
++ *
++ * Context:
++ *      Kernel context.
++ */
++static mp_path_t *
++qla2x00_select_next_path(mp_host_t *host, mp_device_t *dp, uint8_t lun)
++{
++      mp_path_t       *path = NULL;
++      mp_path_list_t  *path_list;
++      mp_path_t       *orig_path;
++      int             id;
++      uint32_t        status;
++      mp_host_t *new_host;
++
++      ENTER("qla2x00_select_next_path:");
++
++      path_list = dp->path_list;
++      if (path_list == NULL)
++              return NULL;
++
++      /* Get current path */
++      id = path_list->current_path[lun];
++
++      /* Get path for current path id  */
++      if ((orig_path = qla2x00_find_path_by_id(dp, id)) != NULL) {
++
++              /* select next path */
++              path = orig_path->next;
++              new_host = path->host;
++
++              /* FIXME may need to check for HBA being reset */
++              DEBUG3(printk("%s: orig path = %p new path = %p " 
++                  "curr idx = %d, new idx = %d\n",
++                  __func__, orig_path, path, orig_path->id, path->id);)
++              DEBUG3(printk("  FAILOVER: device nodename: "
++                  "%02x%02x%02x%02x%02x%02x%02x%02x\n",
++                  dp->nodename[0], dp->nodename[1],
++                  dp->nodename[2], dp->nodename[3],
++                  dp->nodename[4], dp->nodename[5],
++                  dp->nodename[6], dp->nodename[7]);)
++              DEBUG3(printk(" Original  - host nodename: "
++                  "%02x%02x%02x%02x%02x%02x%02x%02x\n",
++                  orig_path->host->nodename[0],
++                  orig_path->host->nodename[1],
++                  orig_path->host->nodename[2],
++                  orig_path->host->nodename[3],
++                  orig_path->host->nodename[4],
++                  orig_path->host->nodename[5],
++                  orig_path->host->nodename[6],
++                  orig_path->host->nodename[7]);)
++              DEBUG3(printk("   portname: "
++                  "%02x%02x%02x%02x%02x%02x%02x%02x\n",
++                  orig_path->port->port_name[0],
++                  orig_path->port->port_name[1],
++                  orig_path->port->port_name[2],
++                  orig_path->port->port_name[3],
++                  orig_path->port->port_name[4],
++                  orig_path->port->port_name[5],
++                  orig_path->port->port_name[6],
++                  orig_path->port->port_name[7]);)
++              DEBUG3(printk(" New  - host nodename: "
++                  "%02x%02x%02x%02x%02x%02x%02x%02x\n",
++                  new_host->nodename[0], new_host->nodename[1],
++                  new_host->nodename[2], new_host->nodename[3],
++                  new_host->nodename[4], new_host->nodename[5],
++                  new_host->nodename[6], new_host->nodename[7]);)
++              DEBUG3(printk("   portname: "
++                  "%02x%02x%02x%02x%02x%02x%02x%02x\n",
++                  path->port->port_name[0],
++                  path->port->port_name[1],
++                  path->port->port_name[2],
++                  path->port->port_name[3],
++                  path->port->port_name[4],
++                  path->port->port_name[5],
++                  path->port->port_name[6],
++                  path->port->port_name[7]);)
++
++              path_list->current_path[lun] = path->id;
++
++              /* If we selected a new path, do failover notification. */
++              if (path != orig_path) {
++                      status = qla2x00_send_failover_notify(
++                                      dp, lun, path, orig_path);
++
++                      /*
++                       * Currently we ignore the returned status from
++                       * the notify. however, if failover notify fails
++                       */
++              }
++      }
++
++      LEAVE("qla2x00_select_next_path:");
++
++      return  path ;
++}
++
++
++
++/*
++ *  qla2x00_update_mp_host
++ *      Update the multipath control information from the port
++ *      database for that adapter.
++ *
++ *  Input:
++ *      host      Adapter to update. Devices that are new are
++ *                      known to be attached to this adapter.
++ *
++ *  Returns:
++ *      TRUE if updated successfully; FALSE if error.
++ *
++ */
++static uint8_t
++qla2x00_update_mp_host(mp_host_t  *host)
++{
++      uint8_t         success = TRUE;
++      uint16_t        dev_id;
++      struct list_head        *fcpl;
++      fc_port_t       *fcport;
++      scsi_qla_host_t *ha = host->ha;
++
++      ENTER("qla2x00_update_mp_host");
++
++      /*
++       * We make sure each port is attached to some virtual device.
++       */
++      dev_id = 0;
++      fcport = NULL;
++      list_for_each(fcpl, &ha->fcports) {
++              fcport = list_entry(fcpl, fc_port_t, list);
++
++              success |= qla2x00_update_mp_device(host, fcport, dev_id);
++
++              dev_id++;
++      }
++      if (success) {
++              DEBUG2(printk("%s: Exit OK\n", __func__);)
++              qla2x00_map_os_targets(host);
++      } else {
++              /* EMPTY */
++              DEBUG2(printk("%s: Exit FAILED\n", __func__);)
++      }
++
++      LEAVE("qla2x00_update_mp_host");
++
++      return success;
++}
++
++/*
++ *  qla2x00_update_mp_device
++ *      Update the multipath control information from the port
++ *      database for that adapter.
++ *
++ *  Inputs:
++ *            host   Host adapter structure
++ *      port   Device to add to the path tree.
++ *            dev_id  Device id
++ *
++ *  Synchronization:
++ *      The Adapter Lock should have already been acquired
++ *      before calling this routine.
++ *
++ *  Return
++ *      TRUE if updated successfully; FALSE if error.
++ *
++ */
++uint8_t
++qla2x00_update_mp_device(mp_host_t *host, fc_port_t *port, uint16_t dev_id)
++{
++      uint8_t         success = TRUE;
++      mp_device_t *dp;
++      mp_path_t  *path;
++
++      ENTER("qla2x00_update_mp_device");
++
++      DEBUG3(printk("%s: host =%p, port =%p, id = %d\n",
++          __func__, host, port, dev_id);)
++
++      if (!qla2x00_is_ww_name_zero(port->port_name)) {
++
++              /*
++               * Search for a device with a matching node name,
++               * or create one.
++               */
++              dp = qla2x00_find_or_allocate_mp_dev(host, dev_id, port);
++
++              /*
++               * We either have found or created a path list. Find this
++               * host's path in the path list or allocate a new one
++               * and add it to the list.
++               */
++              if (dp == NULL) {
++                      DEBUG4(printk("%s: Device NOT found or created at.\n",
++                          __func__);)
++                      return FALSE;
++              }
++
++              /*
++               * Find the path in the current path list, or allocate
++               * a new one and put it in the list if it doesn't exist.
++               * Note that we do NOT set bSuccess to FALSE in the case
++               * of failure here.  We must tolerate the situation where
++               * the customer has more paths to a device than he can
++               * get into a PATH_LIST.
++               */
++
++              path = qla2x00_find_or_allocate_path(host, dp, dev_id, port);
++              if (path == NULL) {
++                      DEBUG4(printk("%s:Path NOT found or created.\n",
++                          __func__);)
++                      return FALSE;
++              }
++
++              /* Set the PATH flag to match the device flag
++               * of whether this device needs a relogin.  If any
++               * device needs relogin, set the relogin countdown.
++               */
++              if (port->flags & FC_CONFIG)
++                      path->config = TRUE;
++
++              if (atomic_read(&port->state) != FC_ONLINE) {
++                      path->relogin = TRUE;
++                      if (host->relogin_countdown == 0)
++                              host->relogin_countdown = 30;
++              } else {
++                      path->relogin = FALSE;
++              }
++
++      } else {
++              /* EMPTY */
++              DEBUG4(printk("%s: Failed portname empty.\n",
++                  __func__);)
++      }
++
++      LEAVE("qla2x00_update_mp_device");
++
++      return success;
++}
++
++/*
++ * qla2x00_update_mp_tree
++ *      Get port information from each adapter, and build or rebuild
++ *      the multipath control tree from this data.  This is called
++ *      from init and during port database notification.
++ *
++ * Input:
++ *      None
++ *
++ * Return:
++ *      Local function return code.
++ *
++ */
++static uint32_t
++qla2x00_update_mp_tree(void)
++{
++      mp_host_t       *host;
++      uint32_t        rval = QLA2X00_SUCCESS;
++
++      ENTER("qla2x00_update_mp_tree:");
++
++      /* Loop through each adapter and see what needs updating. */
++      for (host = mp_hosts_base; (host) ; host = host->next) {
++
++              DEBUG4(printk("%s: hba(%d) flags (%x)\n",
++                  __func__, host->instance, host->flags);)
++              /* Clear the countdown; it may be reset in the update. */
++              host->relogin_countdown = 0;
++
++              /* Override the NEEDS_UPDATE flag if disabled. */
++              if (host->flags & MP_HOST_FLAG_DISABLE ||
++                  list_empty(host->fcports))
++                      host->flags &= ~MP_HOST_FLAG_NEEDS_UPDATE;
++
++              if (host->flags & MP_HOST_FLAG_NEEDS_UPDATE) {
++
++                      /*
++                       * Perform the actual updates.  If this succeeds, clear
++                       * the flag that an update is needed, and failback all
++                       * devices that are visible on this path to use this
++                       * path.  If the update fails, leave set the flag that
++                       * an update is needed, and it will be picked back up
++                       * during the next timer routine.
++                       */
++                      if (qla2x00_update_mp_host(host)) {
++                              host->flags &= ~MP_HOST_FLAG_NEEDS_UPDATE;
++
++                              qla2x00_failback_luns(host);
++                      } else
++                              rval = QLA2X00_FUNCTION_FAILED;
++
++              }
++
++      }
++
++      if (rval != QLA2X00_SUCCESS) {
++              /* EMPTY */
++              DEBUG4(printk("%s: Exit FAILED.\n", __func__);)
++
++      } else {
++              /* EMPTY */
++              DEBUG4(printk("%s: Exit OK.\n", __func__);)
++      }
++      return rval;
++}
++
++
++
++/*
++ * qla2x00_find_matching_lun
++ *      Find the lun in the path that matches the
++ *  specified lun number.
++ *
++ * Input:
++ *      lun  = lun number
++ *      newpath = path to search for lun
++ *
++ * Returns:
++ *      NULL or pointer to lun
++ *
++ * Context:
++ *      Kernel context.
++ * (dg)
++ */
++static fc_lun_t  *
++qla2x00_find_matching_lun(uint8_t lun, mp_path_t *newpath)
++{
++      fc_lun_t *lp = NULL;    /* lun ptr */
++      struct list_head        *fcll;
++      fc_lun_t *nlp;                  /* Next lun ptr */
++      fc_port_t *fcport;              /* port ptr */
++
++      if ((fcport = newpath->port) != NULL) {
++              list_for_each(fcll, &fcport->fcluns) {
++                      nlp = list_entry(fcll, fc_lun_t, list);
++
++                      if (lun == nlp->lun) {
++                              lp = nlp;
++                              break;
++                      }
++              }
++      }
++      return lp;
++}
++
++/*
++ * qla2x00_find_path_by_name
++ *      Find the path specified portname from the pathlist
++ *
++ * Input:
++ *      host = host adapter pointer.
++ *    pathlist =  multi-path path list
++ *      portname      portname to search for
++ *
++ * Returns:
++ * pointer to the path or NULL
++ *
++ * Context:
++ *      Kernel context.
++ */
++mp_path_t *
++qla2x00_find_path_by_name(mp_host_t *host, mp_path_list_t *plp,
++    uint8_t *portname)
++{
++      mp_path_t  *path = NULL;                /* match if not NULL */
++      mp_path_t  *tmp_path;
++      int cnt;
++
++      if ((tmp_path = plp->last) != NULL) {
++              for (cnt = 0; cnt < plp->path_cnt; cnt++) {
++                      if (tmp_path->host == host &&
++                              qla2x00_is_portname_equal(
++                                      tmp_path->portname, portname)) {
++
++                              path = tmp_path;
++                              break;
++                      }
++                      tmp_path = tmp_path->next;
++              }
++      }
++      return path ;
++}
++
++/*
++ * qla2x00_find_path_by_id
++ *      Find the path for the specified path id.
++ *
++ * Input:
++ *    dp              multi-path device
++ *    id              path id
++ *
++ * Returns:
++ *      pointer to the path or NULL
++ *
++ * Context:
++ *      Kernel context.
++ */
++static mp_path_t *
++qla2x00_find_path_by_id(mp_device_t *dp, uint8_t id)
++{
++      mp_path_t  *path = NULL;
++      mp_path_t  *tmp_path;
++      mp_path_list_t          *path_list;
++      int cnt;
++
++      path_list = dp->path_list;
++      tmp_path = path_list->last;
++      for (cnt = 0; (tmp_path) && cnt < path_list->path_cnt; cnt++) {
++              if (tmp_path->id == id) {
++                      path = tmp_path;
++                      break;
++              }
++              tmp_path = tmp_path->next;
++      }
++      return path ;
++}
++
++/*
++ * qla2x00_find_mp_dev_by_id
++ *      Find the mp_dev for the specified target id.
++ *
++ * Input:
++ *      host = host adapter pointer.
++ *      tgt  = Target id
++ *
++ * Returns:
++ *
++ * Context:
++ *      Kernel context.
++ */
++static mp_device_t  *
++qla2x00_find_mp_dev_by_id(mp_host_t *host, uint8_t id )
++{
++      if (id < MAX_MP_DEVICES)
++              return host->mp_devs[id];
++      else
++              return NULL;
++}
++
++/*
++ * qla2x00_find_mp_dev_by_name
++ *      Find the mp_dev for the specified target name.
++ *
++ * Input:
++ *      host = host adapter pointer.
++ *      name  = Target name
++ *
++ * Returns:
++ *
++ * Context:
++ *      Kernel context.
++ */
++static mp_device_t  *
++qla2x00_find_mp_dev_by_name(mp_host_t *host, uint8_t *name )
++{
++      int id;
++      mp_device_t *dp;
++
++      ENTER("qla2x00_find_mp_dev_by_name");
++
++      for (id= 0; id < MAX_MP_DEVICES; id++) {
++              if ((dp = host->mp_devs[id] ) == NULL)
++                      continue;
++
++              if (qla2x00_is_nodename_equal(dp->nodename, name)) {
++                      DEBUG3(printk("%s: Found matching device @ index %d:\n",
++                          __func__, id);)
++                      return dp;
++              }
++      }
++
++      LEAVE("qla2x00_find_mp_dev_by_name");
++
++      return NULL;
++}
++
++/*
++ * qla2x00_get_visible_path
++ * Find the the visible path for the specified device.
++ *
++ * Input:
++ *      dp = device pointer
++ *
++ * Returns:
++ *      NULL or path
++ *
++ * Context:
++ *      Kernel context.
++ */
++static mp_path_t *
++qla2x00_get_visible_path(mp_device_t *dp)
++{
++      uint16_t        id;
++      mp_path_list_t  *path_list;
++      mp_path_t       *path;
++
++      path_list = dp->path_list;
++      /* if we don't have a visible path skip it */
++      if ((id = path_list->visible) == PATH_INDEX_INVALID) {
++              return NULL;
++      }
++
++      if ((path = qla2x00_find_path_by_id(dp,id))== NULL)
++              return NULL;
++
++      return path ;
++}
++
++/*
++ * qla2x00_map_os_targets
++ * Allocate the luns and setup the OS target.
++ *
++ * Input:
++ *      host = host adapter pointer.
++ *
++ * Returns:
++ *      None
++ *
++ * Context:
++ *      Kernel context.
++ */
++static void
++qla2x00_map_os_targets(mp_host_t *host)
++{
++      scsi_qla_host_t *ha = host->ha;
++      mp_path_t       *path;
++      mp_device_t     *dp;
++      os_tgt_t        *tgt;
++      int             t;
++
++      ENTER("qla2x00_map_os_targets ");
++
++      for (t = 0; t < MAX_TARGETS; t++ ) {
++              dp = host->mp_devs[t];
++              if (dp != NULL) {
++                      DEBUG3(printk("%s: (%d) found a dp=%p, "
++                          "host=%p, ha=%p\n",
++                          __func__, t, dp, host,ha);)
++
++                      if ((path = qla2x00_get_visible_path(dp)) == NULL) {
++                              printk(KERN_INFO
++                                  "qla_cfg(%d): No visible path "
++                                  "for target %d, dp = %p\n",
++                                  host->instance, t, dp);
++                              continue;
++                      }
++
++                      /* if not the visible path skip it */
++                      if (path->host == host) {
++                              if (TGT_Q(ha, t) == NULL) {
++                                      tgt = qla2x00_tgt_alloc(ha, t);
++                                      memcpy(tgt->node_name,
++                                                      dp->nodename,
++                                                      WWN_SIZE);
++                                      tgt->vis_port = path->port;
++                              }
++                              DEBUG3(printk("%s(%ld): host=%d, "
++                                  "device= %p has VISIBLE "
++                                  "path=%p, path id=%d\n",
++                                  __func__, ha->host_no,
++                                  host->instance,
++                                  dp, path, path->id);)
++                      } else {
++                      /* EMPTY */
++                              DEBUG3(printk("%s(%ld): host=%d, "
++                                  "device= %p has HIDDEN "
++                                  "path=%p, path id=%d\n",
++                                  __func__, ha->host_no,
++                                  host->instance, dp, path,path->id);)
++                      }
++                      qla2x00_map_os_luns(host, dp, t);
++              } else {
++                      if ((tgt= TGT_Q(ha,t)) != NULL) {
++                              qla2x00_tgt_free(ha,t);
++                      }
++              }
++      }
++
++      LEAVE("qla2x00_map_os_targets ");
++}
++
++/*
++ * qla2x00_map_os_luns
++ *      Allocate the luns for the OS target.
++ *
++ * Input:
++ *      dp = pointer to device
++ *      t  = OS target number.
++ *
++ * Returns:
++ *      None
++ *
++ * Context:
++ *    Kernel context.
++ */
++static void
++qla2x00_map_os_luns(mp_host_t *host, mp_device_t *dp, uint16_t t)
++{
++      uint16_t lun;
++      int     i;
++
++      for (lun = 0; lun < MAX_LUNS; lun++ ) {
++              if ( qla2x00_map_a_oslun(host, dp, t, lun) &&
++                      (host->flags & MP_HOST_FLAG_LUN_FO_ENABLED) ){
++                      /* find a path for us to use */
++                      for ( i = 0; i < dp->path_list->path_cnt; i++ ){
++                              qla2x00_select_next_path(host, dp, lun);
++                              if( !qla2x00_map_a_oslun(host, dp, t, lun))
++                                      break;
++                      }
++              }
++      }
++}
++
++/*
++ * qla2x00_map_a_osluns
++ *      Map the OS lun to the current path
++ *
++ * Input:
++ *      host = pointer to host
++ *      dp = pointer to device
++ *      lun  = OS lun number.
++ *
++ * Returns:
++ *      None
++ *
++ * Context:
++ *    Kernel context.
++ */
++
++static uint8_t
++qla2x00_map_a_oslun(mp_host_t *host, mp_device_t *dp, uint16_t t, uint16_t lun)
++{
++      fc_port_t       *fcport;
++      fc_lun_t        *fclun;
++      os_lun_t        *lq;
++      uint16_t        id;
++      mp_path_t       *path, *vis_path;
++      mp_host_t       *vis_host;
++      uint8_t         status = FALSE;
++
++      if ((id = dp->path_list->current_path[lun]) != PATH_INDEX_INVALID) {
++              path = qla2x00_find_path_by_id(dp,id);
++              if (path) {
++                      fcport = path->port;
++                      if (fcport) {
++                              /* dg 04/26/02 */
++                              fcport->cur_path = id;
++                              fclun = qla2x00_find_matching_lun(lun,path);
++
++                              /* Always map all luns if they are enabled */
++                              if (fclun &&
++                                      (path->lun_data.data[lun] &
++                                       LUN_DATA_ENABLED) ) {
++
++                                      /*
++                                       * Mapped lun on the visible path
++                                       */
++                                      if ((vis_path =
++                                          qla2x00_get_visible_path(dp)) ==
++                                          NULL ) {
++
++                                              printk(KERN_INFO
++                                                  "qla2x00(%d): No visible "
++                                                  "path for target %d, "
++                                                  "dp = %p\n",
++                                                  host->instance,
++                                                  t, dp);
++
++                                              return FALSE;
++                                      }
++
++                                      vis_host = vis_path->host;
++
++                                      /* ra 11/30/01 */
++                                      /*
++                                       * Always alloc LUN 0 so kernel
++                                       * will scan past LUN 0.
++                                       */
++                                      if (lun != 0 &&
++                                          (EXT_IS_LUN_BIT_SET(
++                                              &(fcport->lun_mask), lun))) {
++
++                                              /* mask this LUN */
++                                              return FALSE;
++                                      }
++
++                                      if ((lq = qla2x00_lun_alloc(
++                                                      vis_host->ha,
++                                                      t, lun)) != NULL) {
++
++                                              lq->fclun = fclun;
++                                      }
++                              }
++                      }
++                      else
++                              status = TRUE;
++              }
++      }
++      return status;
++}
++
++/*
++ * qla2x00_is_ww_name_zero
++ *
++ * Input:
++ *      ww_name = Pointer to WW name to check
++ *
++ * Returns:
++ *      TRUE if name is 0 else FALSE
++ *
++ * Context:
++ *      Kernel context.
++ */
++static uint8_t
++qla2x00_is_ww_name_zero(uint8_t *nn)
++{
++      int cnt;
++
++      /* Check for zero node name */
++      for (cnt = 0; cnt < WWN_SIZE ; cnt++, nn++) {
++              if (*nn != 0)
++                      break;
++      }
++      /* if zero return TRUE */
++      if (cnt == WWN_SIZE)
++              return TRUE;
++      else
++              return FALSE;
++}
++
++/*
++ * qla2x00_add_path
++ * Add a path to the pathlist
++ *
++ * Input:
++ * pathlist -- path list of paths
++ * path -- path to be added to list
++ *
++ * Returns:
++ *      None
++ *
++ * Context:
++ *      Kernel context.
++ */
++static void
++qla2x00_add_path( mp_path_list_t *pathlist, mp_path_t *path )
++{
++      mp_path_t *last = pathlist->last;
++
++      ENTER("qla2x00_add_path");
++
++      DEBUG3(printk("%s: pathlist =%p, path =%p, cnt = %d\n",
++          __func__, pathlist, path, pathlist->path_cnt);)
++      if (last == NULL) {
++              last = path;
++      } else {
++              path->next = last->next;
++      }
++
++      last->next = path;
++      pathlist->last = path;
++      pathlist->path_cnt++;
++
++      LEAVE("qla2x00_add_path");
++}
++
++
++/*
++ * qla2x00_is_portname_in_device
++ *    Search for the specified "portname" in the device list.
++ *
++ * Input:
++ *    dp = device pointer
++ *    portname = portname to searched for in device
++ *
++ * Returns:
++ *      qla2x00 local function return status code.
++ *
++ * Context:
++ *      Kernel context.
++ */
++uint8_t
++qla2x00_is_portname_in_device(mp_device_t *dp, uint8_t *portname)
++{
++      int idx;
++
++      for (idx = 0; idx < MAX_PATHS_PER_DEVICE; idx++) {
++              if (memcmp(&dp->portnames[idx][0], portname, WWN_SIZE) == 0)
++                      return TRUE;
++      }
++      return FALSE;
++}
++
++
++/*
++ *  qla2x00_set_lun_data_from_bitmask
++ *      Set or clear the LUN_DATA_ENABLED bits in the LUN_DATA from
++ *      a LUN bitmask provided from the miniport driver.
++ *
++ *  Inputs:
++ *      lun_data = Extended LUN_DATA buffer to set.
++ *      lun_mask = Pointer to lun bit mask union.
++ *
++ *  Return Value: none.
++ */
++void
++qla2x00_set_lun_data_from_bitmask(mp_lun_data_t *lun_data,
++    lun_bit_mask_t *lun_mask)
++{
++      int16_t lun;
++
++      ENTER("qla2x00_set_lun_data_from_bitmask");
++
++      for (lun = 0; lun < MAX_LUNS; lun++) {
++              /* our bit mask is inverted */
++              if (!(EXT_IS_LUN_BIT_SET(lun_mask,lun)))
++                      lun_data->data[lun] |= LUN_DATA_ENABLED;
++              else
++                      lun_data->data[lun] &= ~LUN_DATA_ENABLED;
++
++              DEBUG5(printk("%s: lun data[%d] = 0x%x\n",
++                  __func__, lun, lun_data->data[lun]);)
++      }
++
++      LEAVE("qla2x00_set_lun_data_from_bitmask");
++
++      return;
++}
++
++static void
++qla2x00_failback_single_lun(mp_device_t *dp, uint8_t lun, uint8_t new)
++{
++      mp_path_list_t   *pathlist;
++      mp_path_t        *new_path, *old_path;
++      uint8_t         old;
++      mp_host_t  *host;
++      os_lun_t *lq;
++      mp_path_t       *vis_path;
++      mp_host_t       *vis_host;
++
++      /* Failback and update statistics. */
++      if ((pathlist = dp->path_list) == NULL)
++              return;
++
++      old = pathlist->current_path[lun];
++      pathlist->current_path[lun] = new;
++
++      if ((new_path = qla2x00_find_path_by_id(dp, new)) == NULL)
++              return;
++      if ((old_path = qla2x00_find_path_by_id(dp, old)) == NULL)
++              return;
++
++      /* An fclun should exist for the failbacked lun */
++      if (qla2x00_find_matching_lun(lun, new_path) == NULL)
++              return;
++      if (qla2x00_find_matching_lun(lun, old_path) == NULL)
++              return;
++
++      /* Log to console and to event log. */
++      printk(KERN_INFO
++              "qla2x00: FAILBACK device %d -> "
++              "%02x%02x%02x%02x%02x%02x%02x%02x LUN %02x\n",
++              dp->dev_id,
++              dp->nodename[0], dp->nodename[1],
++              dp->nodename[2], dp->nodename[3],
++              dp->nodename[4], dp->nodename[5],
++              dp->nodename[6], dp->nodename[7],
++              lun);
++
++      printk(KERN_INFO
++              "qla2x00: FROM HBA %d to HBA %d \n",
++              old_path->host->instance,
++              new_path->host->instance);
++
++
++      /* Send a failover notification. */
++#if 0
++      qla2x00_send_failover_notify(dp, lun, new_path, old_path);
++#endif
++
++      host =  new_path->host;
++
++      /* remap the lun */
++      qla2x00_map_a_oslun(host, dp, dp->dev_id, lun);
++
++      /* 7/16
++       * Reset counts on the visible path
++       */
++      if ((vis_path = qla2x00_get_visible_path(dp)) == NULL) {
++              printk(KERN_INFO
++                      "qla2x00(%d): No visible path for "
++                      "target %d, dp = %p\n",
++                      host->instance,
++                      dp->dev_id, dp);
++              return;
++      }
++
++      vis_host = vis_path->host;
++      if ((lq = qla2x00_lun_alloc(vis_host->ha, dp->dev_id, lun)) != NULL) {
++              qla2x00_delay_lun(vis_host->ha, lq, recoveryTime);
++              qla2x00_flush_failover_q(vis_host->ha, lq);
++              qla2x00_reset_lun_fo_counts(vis_host->ha, lq);
++      }
++}
++
++/*
++*  qla2x00_failback_luns
++*      This routine looks through the devices on an adapter, and
++*      for each device that has this adapter as the visible path,
++*      it forces that path to be the current path.  This allows us
++*      to keep some semblance of static load balancing even after
++*      an adapter goes away and comes back.
++*
++*  Arguments:
++*      host          Adapter that has just come back online.
++*
++*  Return:
++*     None.
++*/
++static void
++qla2x00_failback_luns( mp_host_t  *host)
++{
++      uint16_t          dev_no;
++      uint8_t           l;
++      uint16_t          lun;
++      int i;
++      mp_device_t      *dp;
++      mp_path_list_t   *path_list;
++      mp_path_t        *path;
++      fc_lun_t        *new_fp;
++
++      ENTER("qla2x00_failback_luns");
++
++      for (dev_no = 0; dev_no < MAX_MP_DEVICES; dev_no++) {
++              dp = host->mp_devs[dev_no];
++
++              if (dp == NULL)
++                      continue;
++
++              path_list = dp->path_list;
++              for (path = path_list->last, i= 0;
++                      i < path_list->path_cnt;
++                      i++, path = path->next) {
++
++                      if (path->host != host )
++                              continue;
++
++                      if (path->port == NULL)
++                              continue;
++
++                      if (atomic_read(&path->port->state) == FC_DEVICE_DEAD)
++                              continue;
++
++                      /* 
++                       * Failback all the paths for this host,
++                       * the luns could be preferred across all paths 
++                       */
++                      DEBUG2(printk("%s(%d): Lun Data for device %p, "
++                          "id=%d, path id=%d\n",
++                          __func__, host->instance, dp, dp->dev_id,
++                          path->id);)
++                      DEBUG4(qla2x00_dump_buffer(
++                          (char *)&path->lun_data.data[0], 64);)
++                      DEBUG4(printk("%s(%d): Perferrred Path data:\n",
++                          __func__, host->instance);)
++                      DEBUG4(qla2x00_dump_buffer(
++                          (char *)&path_list->current_path[0], 64);)
++
++                      for (lun = 0; lun < MAX_LUNS_PER_DEVICE; lun++) {
++                              l = (uint8_t)(lun & 0xFF);
++
++                              /*
++                               * if this is the preferred lun and not
++                               * the current path then failback lun.
++                               */
++                              DEBUG4(printk("%s: target=%d, cur path id =%d, "
++                                  "lun data[%d] = %d)\n",
++                                  __func__, dp->dev_id, path->id,
++                                  lun, path->lun_data.data[lun]);)
++
++                              if ((path->lun_data.data[l] &
++                                              LUN_DATA_PREFERRED_PATH) &&
++                                      /* !path->relogin && */
++                                      path_list->current_path[l] !=
++                                              path->id) {
++                                      /* No point in failing back a
++                                         disconnected lun */
++                                      new_fp = qla2x00_find_matching_lun(
++                                                      l, path);
++
++                                      if (new_fp == NULL)
++                                              continue;
++                                      if (new_fp->flags & FC_DISCON_LUN)
++                                              continue;
++
++                                      qla2x00_failback_single_lun(
++                                                      dp, l, path->id);
++                              }
++                      }
++              }
++
++      }
++
++      LEAVE("qla2x00_failback_luns");
++
++      return;
++}
++
++/*
++ *  qla2x00_setup_new_path
++ *      Checks the path against the existing paths to see if there
++ *      are any incompatibilities.  It then checks and sets up the
++ *      current path indices.
++ *
++ *  Inputs:
++ *      dp   =  pointer to device
++ *      path = new path
++ *
++ *  Returns:
++ *      None
++ */
++static void
++qla2x00_setup_new_path( mp_device_t *dp, mp_path_t *path)
++{
++      mp_path_list_t  *path_list = dp->path_list;
++      mp_path_t       *tmp_path, *first_path;
++      mp_host_t       *first_host;
++      mp_host_t       *tmp_host;
++
++      uint16_t        lun;
++      uint8_t         l;
++      int             i;
++
++      ENTER("qla2x00_setup_new_path");
++
++      /* If this is a visible path, and there is not already a
++       * visible path, save it as the visible path.  If there
++       * is already a visible path, log an error and make this
++       * path invisible.
++       */
++      if (!(path->mp_byte & (MP_MASK_HIDDEN | MP_MASK_UNCONFIGURED))) {
++
++              /* No known visible path */
++              if (path_list->visible == PATH_INDEX_INVALID) {
++                      DEBUG3(printk("%s: No know visible path - make this "
++                          "path visible\n",
++                          __func__);)
++                              
++                      path_list->visible = path->id;
++                      path->mp_byte &= ~MP_MASK_HIDDEN;
++              } else {
++                      DEBUG3(printk("%s: Second visible path found- make "
++                          "this one hidden\n",
++                          __func__);)
++
++                      path->mp_byte |= MP_MASK_HIDDEN;
++              }
++      }
++
++      /*
++       * If this is not the first path added, and the setting for
++       * MaxLunsPerTarget does not match that of the first path
++       * then disable qla_cfg for all adapters.
++       */
++      first_path = qla2x00_find_path_by_id(dp, 0);
++
++      if (first_path != NULL) {
++              first_host = first_path->host;
++              if ((path->id != 0) &&
++                      (first_host->MaxLunsPerTarget !=
++                       path->host->MaxLunsPerTarget)) {
++
++                      for (tmp_path = path_list->last, i = 0;
++                              (tmp_path) && i <= path->id; i++) {
++
++                              tmp_host = tmp_path->host;
++                              if (!(tmp_host->flags &
++                                              MP_HOST_FLAG_DISABLE)) {
++
++                                      DEBUG4(printk("%s: 2nd visible "
++                                          "path (%p)\n",
++                                          __func__, tmp_host);)
++
++                                      tmp_host->flags |= MP_HOST_FLAG_DISABLE;
++                              }
++                      }
++              }
++      }
++
++      /*
++       * For each LUN, evaluate whether the new path that is added
++       * is better than the existing path.  If it is, make it the
++       * current path for the LUN.
++       */
++      for (lun = 0; lun < MAX_LUNS_PER_DEVICE; lun++) {
++              l = (uint8_t)(lun & 0xFF);
++
++              /* If this is the first path added, it is the only
++               * available path, so make it the current path.
++               */
++
++              DEBUG4(printk("%s: lun_data 0x%x, LUN %d\n",
++                  __func__, path->lun_data.data[l], lun);)
++
++              if (first_path == path) {
++                      path_list->current_path[l] = 0;
++                      path->lun_data.data[l] |=  LUN_DATA_PREFERRED_PATH;
++              } else if (path->lun_data.data[l] & LUN_DATA_PREFERRED_PATH) {
++                      /*
++                       * If this is not the first path added, if this is
++                       * the preferred path, make it the current path.
++                       */
++                      path_list->current_path[l] = path->id;
++              }
++      }
++
++      LEAVE("qla2x00_setup_new_path");
++
++      return;
++}
++
++/*
++ * qla2x00_cfg_mem_free
++ *     Free all configuration structures.
++ *
++ * Input:
++ *      ha = adapter state pointer.
++ *
++ * Context:
++ *      Kernel context.
++ */
++void
++qla2x00_cfg_mem_free(scsi_qla_host_t *ha)
++{
++      mp_device_t *dp;
++      mp_path_list_t  *path_list;
++      mp_path_t       *tmp_path, *path;
++      mp_host_t       *host, *temp;
++      int     id, cnt;
++
++      if ((host = qla2x00_cfg_find_host(ha)) != NULL) {
++              if( mp_num_hosts == 0 )
++                      return;
++
++              for (id= 0; id < MAX_MP_DEVICES; id++) {
++                      if ((dp = host->mp_devs[id]) == NULL)
++                              continue;
++                      if ((path_list = dp->path_list) == NULL)
++                              continue;
++                      if ((tmp_path = path_list->last) == NULL)
++                              continue;
++                      for (cnt = 0; cnt < path_list->path_cnt; cnt++) {
++                              path = tmp_path;
++                              tmp_path = tmp_path->next;
++                              DEBUG(printk(KERN_INFO
++                                              "host%d - Removing path[%d] "
++                                              "= %p\n",
++                                              host->instance,
++                                              cnt, path);)
++                              KMEM_FREE(path,sizeof(mp_path_t));
++                      }
++                      KMEM_FREE(path_list, sizeof(mp_path_list_t));
++                      host->mp_devs[id] = NULL;
++                      /* remove dp from other hosts */
++                      for (temp = mp_hosts_base; (temp); temp = temp->next) {
++                              if (temp->mp_devs[id] == dp) {
++                                      DEBUG(printk(KERN_INFO
++                                              "host%d - Removing host[%d] = "
++                                              "%p\n",
++                                              host->instance,
++                                              temp->instance,temp);)
++                                      temp->mp_devs[id] = NULL;
++                              }
++                      }
++                      KMEM_FREE(dp, sizeof(mp_device_t));
++              }
++
++              /* remove this host from host list */
++              temp = mp_hosts_base;
++              if (temp != NULL) {
++                      /* Remove from top of queue */
++                      if (temp == host) {
++                              mp_hosts_base = host->next;
++                      } else {
++                              /*
++                               * Remove from middle of queue
++                               * or bottom of queue
++                               */
++                              for (temp = mp_hosts_base;
++                                              temp != NULL;
++                                              temp = temp->next) {
++
++                                      if (temp->next == host) {
++                                              temp->next = host->next;
++                                              break;
++                                      }
++                              }
++                      }
++              }
++              KMEM_FREE(host, sizeof(mp_host_t));
++              mp_num_hosts--;
++      }
++}
+--- /dev/null  Thu Apr 11 07:25:15 2002
++++ linux-2.5.73-n9560/drivers/scsi/qla2xxx/qla_cfg.h  Thu Jul  3 15:34:42 2003
+@@ -0,0 +1,181 @@
++/******************************************************************************
++ *                  QLOGIC LINUX SOFTWARE
++ *
++ * QLogic ISP2x00 device driver for Linux 2.5.x
++ * Copyright (C) 2003 Qlogic Corporation
++ * (www.qlogic.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, 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.
++ *
++ ******************************************************************************/
++
++/*
++ * QLogic ISP2x00 Multi-path LUN Support
++ * Multi-path include file.
++ */
++
++#if !defined(_QLA_CFG_H)
++#define       _QLA_CFG_H
++
++#if defined(__cplusplus)
++extern "C"
++{
++#endif
++
++/*
++ * Failover definitions
++ */
++#define FAILOVER_TYPE_COUNT           4
++#define MP_NOTIFY_RESET_DETECTED      1
++#define MP_NOTIFY_PWR_LOSS            2
++#define MP_NOTIFY_LOOP_UP             3
++#define MP_NOTIFY_LOOP_DOWN           4
++#define MP_NOTIFY_BUS_RESET           5
++#define FAILOVER_TYPE_ERROR_RETRY     1
++#define MAX_NUMBER_PATHS              FO_MAX_PATHS
++#define PORT_NAME_SIZE                        WWN_SIZE
++#define FAILOVER_NOTIFY_STATUS_ERROR  QLA2X00_SUCCESS
++#define FAILOVER_NOTIFY_STATUS_SUCCESS  QLA2X00_SUCCESS
++#define FAILOVER_NOTIFY_CDB_LENGTH_MAX        FO_NOTIFY_CDB_LENGTH_MAX
++#define MAX_TARGETS_PER_DEVICE                SDM_DEF_MAX_TARGETS_PER_DEVICE
++
++/*
++ * Limits definitions.
++ */
++#define MAX_LUNS_PER_DEVICE   MAX_LUNS        /* Maximum # of luns */
++#define MAX_MP_DEVICES                MAX_TARGETS     /* Maximum # of virtual devs */
++#define MAX_PATHS_PER_DEVICE  8               /* Maximum # of paths */
++#if !defined(MAX_LUNS)
++#define       MAX_LUNS                256
++#endif
++#define MAX_HOSTS             MAX_HOST_COUNT
++
++/* Async notification types */
++#define NOTIFY_EVENT_LINK_DOWN      1         /* Link went down */
++#define NOTIFY_EVENT_LINK_UP        2         /* Link is back up */
++#define NOTIFY_EVENT_RESET_DETECTED 3         /* Reset detected */
++
++/* MACROS */
++#define qla2x00_is_portname_equal(N1,N2) \
++      ((memcmp((N1),(N2),WWN_SIZE)==0?TRUE:FALSE))
++#define qla2x00_is_nodename_equal(N1,N2) \
++      ((memcmp((N1),(N2),WWN_SIZE)==0?TRUE:FALSE))
++#if 0
++#define qla2x00_allocate_path_list() \
++    ((mp_path_list_t *)KMEM_ZALLOC(sizeof(mp_path_list_t)))
++#endif
++
++/*
++ * Per-multipath driver parameters
++ */
++typedef struct _mp_lun_data {
++      uint8_t         data[MAX_LUNS];
++#define LUN_DATA_ENABLED              BIT_7
++#define LUN_DATA_PREFERRED_PATH               BIT_6
++}
++mp_lun_data_t;
++
++
++#define PATH_INDEX_INVALID            0xff
++
++/*
++ * Per-device collection of all paths.
++ */
++typedef struct _mp_path_list {
++      struct _mp_path *last;          /* ptrs to end of circular list of paths */
++      uint8_t         path_cnt;       /* number of paths */
++      uint8_t         visible;        /* visible path */
++      uint16_t        reserved1;      /* Memory alignment */
++      uint32_t        reserved2;      /* Memory alignment */
++      uint8_t         current_path[ MAX_LUNS_PER_DEVICE ]; /* current path for a given lun */
++      uint16_t        failover_cnt[ FAILOVER_TYPE_COUNT ];
++}
++mp_path_list_t;
++
++/*
++ * Definitions for failover notify SRBs.  These SRBs contain failover notify
++ * CDBs to notify a target that a failover has occurred.
++ *
++ */
++typedef struct _failover_notify_srb {
++      srb_t           *srb;
++      uint16_t        status;
++      uint16_t        reserved;
++}
++failover_notify_srb_t;
++
++/*
++ * Per-device multipath control data.
++ */
++typedef struct _mp_device {
++      mp_path_list_t  *path_list;             /* Path list for device.  */
++      int                             dev_id;
++      int                     use_cnt;        /* number of users */
++      uint8_t         nodename[WWN_SIZE];     /* World-wide node name. */
++      /* World-wide port names. */
++      uint8_t         portnames[MAX_PATHS_PER_DEVICE][WWN_SIZE];
++}
++mp_device_t;
++
++/*
++ * Per-adapter multipath Host
++ */
++typedef struct _mp_host {
++      struct _mp_host *next;  /* ptr to next host adapter in list */
++      scsi_qla_host_t *ha;    /* ptr to lower-level driver adapter struct */
++      int             instance;       /* OS instance number */
++      struct list_head *fcports;      /* Port chain for this adapter */
++      mp_device_t     *mp_devs[MAX_MP_DEVICES]; /* Multipath devices */
++
++      uint32_t        flags;
++#define MP_HOST_FLAG_NEEDS_UPDATE  BIT_0  /* Need to update device data. */
++#define MP_HOST_FLAG_FO_ENABLED          BIT_1  /* Failover enabled for this host */
++#define MP_HOST_FLAG_DISABLE     BIT_2  /* Bypass qla_cfg. */
++#define MP_HOST_FLAG_LUN_FO_ENABLED   BIT_3  /* lun Failover enabled */
++
++      uint8_t         nodename[WWN_SIZE];
++      uint8_t         portname[WWN_SIZE];
++      uint16_t        MaxLunsPerTarget;
++
++      uint16_t        relogin_countdown;
++}
++mp_host_t;
++
++/*
++ * Describes path a single.
++ */
++typedef struct _mp_path {
++      struct _mp_path  *next;                 /* next path in list  */
++      struct _mp_host *host;                  /* Pointer to adapter */
++      fc_port_t       *port;                  /* FC port info  */
++      uint16_t       id;                      /* Path id (index) */
++      uint8_t        mp_byte;                 /* Multipath control byte */
++#define MP_MASK_HIDDEN        0x80
++#define MP_MASK_UNCONFIGURED  0x40
++#define MP_MASK_PRIORITY      0x07
++
++      uint8_t        relogin;                 /* Need to relogin to port */
++      uint8_t        config;                  /* User configured path */
++      uint8_t        reserved[3];
++      mp_lun_data_t   lun_data;               /* Lun data information */
++      uint8_t        portname[WWN_SIZE];      /* Port name of this target. */
++}
++mp_path_t;
++
++/*
++ * Failover notification requests from host driver.
++ */
++typedef struct failover_notify_entry {
++      struct scsi_address             *os_addr;
++}
++failover_notify_t;
++
++#endif /* _QLA_CFG_H */
+--- /dev/null  Thu Apr 11 07:25:15 2002
++++ linux-2.5.73-n9560/drivers/scsi/qla2xxx/qla_cfgln.c        Thu Jul  3 15:34:42 2003
+@@ -0,0 +1,726 @@
++/******************************************************************************
++ *                  QLOGIC LINUX SOFTWARE
++ *
++ * QLogic ISP2x00 device driver for Linux 2.5.x
++ * Copyright (C) 2003 Qlogic Corporation
++ * (www.qlogic.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, 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.
++ *
++ ******************************************************************************/
++
++/*
++ * QLogic ISP2x00 Multi-path LUN Support Driver 
++ * Solaris specific functions
++ *
++ */
++
++#include "qla_os.h"
++#include "qla_def.h"
++
++#include "qlfo.h"
++
++#define MAX_SEARCH_STR_SIZE   512
++
++/*
++ * qla2x00_set_lun_data_from_config
++ * Set lun_data byte from the configuration parameters.
++ *
++ * Input:
++ * host -- pointer to host adapter structure.
++ * port -- pointer to port
++ * tgt  -- target number
++ * dev_no  -- device number
++ */
++void
++qla2x00_set_lun_data_from_config(mp_host_t *host, fc_port_t *port,
++    uint16_t tgt, uint16_t dev_no)
++{
++      char            *propbuf;  /* As big as largest search string */
++      int             rval;
++      int16_t         lun, l;
++      scsi_qla_host_t *ha = host->ha;
++      mp_device_t     *dp;
++      lun_bit_mask_t  *plun_mask;
++      lun_bit_mask_t  *mask_ptr;
++      mp_path_list_t  *pathlist;
++#if 0
++      uint8_t         control_byte;
++#endif
++
++      mp_path_t *path;
++
++      if (qla2x00_get_ioctl_scrap_mem(ha, (void **)&propbuf,
++          MAX_SEARCH_STR_SIZE)) {
++              /* not enough memory */
++              DEBUG9_10(printk("%s(%ld): inst=%ld scrap not big enough. "
++                  "propbuf requested=%d.\n",
++                  __func__, ha->host_no, ha->instance,
++                  MAX_SEARCH_STR_SIZE);)
++              return;
++      }
++
++      if (qla2x00_get_ioctl_scrap_mem(ha, (void **)&plun_mask,
++          sizeof(lun_bit_mask_t))) {
++              /* not enough memory */
++              DEBUG9_10(printk("%s(%ld): inst=%ld scrap not big enough. "
++                  "lun_mask requested=%d.\n",
++                  __func__, ha->host_no, ha->instance,
++                  sizeof(lun_bit_mask_t));)
++              qla2x00_free_ioctl_scrap_mem(ha);
++              return;
++      }
++      mask_ptr = plun_mask;
++
++      dp = host->mp_devs[tgt];
++      if (dp == NULL) {
++              printk("qla2x00_set_lun_data_from_config: Target %d "
++                  "not found for hba %d\n",tgt, host->instance);
++              qla2x00_free_ioctl_scrap_mem(ha);
++              return;
++      }
++      if ( (pathlist = dp->path_list) == NULL ) {
++              printk("qla2x00_set_lun_data_from_config: path list "
++                  "not found for target %d\n", tgt);
++              qla2x00_free_ioctl_scrap_mem(ha);
++              return;
++      }
++
++      if ((path = qla2x00_find_path_by_name(host, pathlist,
++          port->port_name)) == NULL ) {
++              printk("qla2x00_set_lun_data_from_config: No path found "
++                  "for target %d\n", tgt);
++              qla2x00_free_ioctl_scrap_mem(ha);
++              return;
++      }
++
++      /* clear port information */
++      path->port = NULL;
++
++#if 0
++      /* 02/06/01 - move to build path tree */
++      /*
++       * Get "target-N-device-N-control" if property is present then all
++       * luns are visible.
++       */
++      sprintf(propbuf, "scsi-qla%d-tgt-%d-di-%d-control",
++                      host->instance, tgt, dev_no);
++      DEBUG3(printk("build_tree: %s\n",propbuf);)
++      rval = qla2x00_get_prop_xstr(ha, propbuf,
++                      (uint8_t *)(&control_byte), sizeof(control_byte));
++      if (rval != -1) {
++              if (!((control_byte & MP_MASK_HIDDEN) ||
++                      (control_byte & MP_MASK_UNCONFIGURED))) {
++                      pathlist->visible = path->id;
++                      DEBUG(printk("qla2x00_set_lun_data_from_config: "
++                                      "found visible path id %d hba %d\n",
++                                      path->id, host->instance);)
++              } else {
++                      pathlist->visible = PATH_INDEX_INVALID; /* 01/30 */
++                      DEBUG(printk("qla2x00_set_lun_data_from_config: "
++                                      "found hidden path id %d hba %d\n",
++                                      path->id, host->instance);)
++              }
++              path->mp_byte = control_byte;
++              DEBUG(printk("qla2x00_set_lun_data_from_config: "
++                              "control byte 0x%x for path id %d hba %d\n",
++                              path->mp_byte, path->id, host->instance);)
++      }
++#endif
++
++      /* Get "target-N-device-N-preferred" as a 256 bit lun_mask*/
++      sprintf(propbuf, "scsi-qla%ld-tgt-%d-di-%d-preferred",
++          ha->instance, tgt, dev_no);
++      DEBUG2(printk("build_tree: %s\n",propbuf);)
++
++      rval = qla2x00_get_prop_xstr(ha, propbuf,
++          (uint8_t *)(plun_mask), sizeof(lun_bit_mask_t));
++
++      if (rval == -1) {
++              /* EMPTY */
++              DEBUG2(printk("qla2x00_set_lun_data_from_config: "
++                  "NO Preferred mask  - ret %d\n", rval);)
++      } else {
++              if (rval != sizeof(lun_bit_mask_t)) {
++                      /* EMPTY */
++                      printk("qla2x00_set_lun_data_from_config: "
++                          "Preferred mask len %d is incorrect.\n", rval);
++              }
++
++              DEBUG3(printk("qla2x00_set_lun_data_from_config: "
++                  "Preferred mask read:\n");)
++              DEBUG3(qla2x00_dump_buffer((char *)plun_mask,
++                  sizeof(lun_bit_mask_t));)
++
++              for (lun = MAX_LUNS-1, l =0; lun >= 0; lun--, l++ ) {
++                      if (EXT_IS_LUN_BIT_SET(mask_ptr, lun)) {
++                              path->lun_data.data[l] |=
++                                  LUN_DATA_PREFERRED_PATH;
++                              pathlist->current_path[l] = path->id;
++                      } else {
++                              path->lun_data.data[l] &=
++                                  ~LUN_DATA_PREFERRED_PATH;
++                      }
++              }
++
++      }
++
++      /* Get "target-N-device-N-lun-disable" as a 256 bit lun_mask*/
++      sprintf(propbuf, "scsi-qla%ld-tgt-%d-di-%d-lun-disabled",
++          ha->instance, tgt, dev_no);
++      DEBUG3(printk("build_tree: %s\n",propbuf);)
++
++      rval = qla2x00_get_prop_xstr(ha, propbuf,
++          (uint8_t *)plun_mask, sizeof(lun_bit_mask_t));
++      if (rval == -1) {
++              /* default: all luns enabled */
++              for (lun = 0; lun < MAX_LUNS; lun++) {
++                      path->lun_data.data[lun] |= LUN_DATA_ENABLED;
++              }
++      } else {
++              if (rval != sizeof(lun_bit_mask_t)) {
++                      printk("qla2x00_set_lun_data_from_config: Enable "
++                          "mask has wrong size %d != %d\n",
++                          rval, (int)sizeof(lun_bit_mask_t));
++              } else {
++                      for (lun = MAX_LUNS-1, l =0; lun >= 0; lun--, l++) {
++                              /* our bit mask is inverted */
++                              if (!EXT_IS_LUN_BIT_SET(mask_ptr,lun))
++                                      path->lun_data.data[l] |=
++                                          LUN_DATA_ENABLED;
++                              else
++                                      path->lun_data.data[l] &=
++                                          ~LUN_DATA_ENABLED;
++                      }
++              }
++      }
++
++      DEBUG3(printk("qla2x00_set_lun_data_from_config: Luns data for "
++          "device %p, instance %d, path id=%d\n",
++          dp,host->instance,path->id);)
++      DEBUG3(qla2x00_dump_buffer((char *)&path->lun_data.data[0], 64);)
++
++      qla2x00_free_ioctl_scrap_mem(ha);
++      LEAVE("qla2x00_set_lun_data_from_config");
++}
++
++
++
++/*
++ * qla2x00_cfg_build_path_tree
++ *    Find all path properties and build a path tree. The
++ *  resulting tree has no actual port assigned to it
++ *  until the port discovery is done by the lower level.
++ *
++ * Input:
++ *    ha = adapter block pointer.
++ *
++ * Context:
++ *    Kernel context.
++ */
++void
++qla2x00_cfg_build_path_tree(scsi_qla_host_t *ha)
++{
++      char            *propbuf;
++      uint8_t         node_name[WWN_SIZE];
++      uint8_t         port_name[WWN_SIZE];
++      fc_port_t       *port;
++      uint16_t        dev_no = 0, tgt_no;
++      int             instance, rval;
++      mp_host_t       *host = NULL;
++      uint8_t         *name;
++      int             done;
++      uint8_t         control_byte;
++
++
++      ENTER("qla2x00_cfg_build_path_tree");
++
++      printk(KERN_INFO
++          "qla02%d: ConfigRequired is set. \n", (int)ha->instance);
++      DEBUG(printk("qla2x00_cfg_build_path_tree: hba =%d",
++          (int)ha->instance);)
++
++      if (qla2x00_get_ioctl_scrap_mem(ha, (void **)&propbuf,
++          MAX_SEARCH_STR_SIZE)) {
++              /* not enough memory */
++              DEBUG9_10(printk("%s(%ld): inst=%ld scrap not big enough. "
++                  "propbuf requested=%d.\n",
++                  __func__, ha->host_no, ha->instance,
++                  MAX_SEARCH_STR_SIZE);)
++              return;
++      }
++
++      /* Look for adapter nodename in properties */
++      sprintf(propbuf, "scsi-qla%ld-adapter-port", ha->instance);
++      DEBUG(printk("build_tree: %s\n",propbuf);)
++
++      rval = qla2x00_get_prop_xstr(ha, propbuf, port_name, WWN_SIZE);
++      if (rval != WWN_SIZE) {
++              qla2x00_free_ioctl_scrap_mem(ha);
++              return;
++      }
++
++      /* Does nodename match the host adapter nodename? */
++      name =  &ha->init_cb->port_name[0];
++      if (!qla2x00_is_nodename_equal(name, port_name)) {
++              printk(KERN_INFO
++                  "scsi(%d): Adapter nodenames don't match - ha = %p.\n",
++                  (int)ha->instance,ha);
++              DEBUG(printk("qla(%d): Adapter nodenames don't match - "
++                  "ha = %p.\n",
++                  (int)ha->instance,ha);)
++              qla2x00_free_ioctl_scrap_mem(ha);
++              return;
++      }
++
++      instance = ha->instance;
++      if ((host = qla2x00_alloc_host(ha)) == NULL) {
++              printk(KERN_INFO
++                  "scsi(%d): Couldn't allocate host - ha = %p.\n",
++                  (int)instance,ha);
++      } else {
++              /* create a dummy port */
++              port = (fc_port_t *)KMEM_ZALLOC(sizeof (fc_port_t),9);
++              if (port == NULL) {
++                      printk(KERN_INFO
++                          "scsi(%d): Couldn't allocate port.\n",
++                          (int)instance);
++                      DEBUG(printk("qla(%d): Couldn't allocate port.\n",
++                          (int)host->instance);)
++                      /* remove host */
++                      qla2x00_free_ioctl_scrap_mem(ha);
++                      return;
++              }
++
++              done = 0;
++
++              /* For each target on the host bus adapter */
++              for (tgt_no = 0; tgt_no < MAX_MP_DEVICES &&
++                  !done; tgt_no++) {
++
++                      /* get all paths for this target */
++                      for (dev_no = 0; dev_no < MAX_PATHS_PER_DEVICE &&
++                          !done ; dev_no++) {
++
++                              /*
++                               * O(N*M) scan, should ideally check if there
++                               * are any tgt entries present, if not, then
++                               * continue.
++                               *
++                               *   sprintf(propbuf,
++                               *              "scsi-qla%d-tgt-%d-",
++                               *              instance, tgt_no);
++                               *   if (strstr(ha->cmdline, propbuf) == NULL)
++                               *      continue;
++                               *
++                               */
++                              memset(port, 0, sizeof (fc_port_t));
++
++                              /*
++                               * Get "target-N-device-N-node" is a 16-chars
++                               * number
++                               */
++                              sprintf(propbuf, "scsi-qla%d-tgt-%d-di-%d-node",
++                                  instance, tgt_no, dev_no);
++                              DEBUG(printk("build_tree: %s\n",propbuf);)
++
++                              rval = qla2x00_get_prop_xstr(ha, propbuf,
++                                  node_name, WWN_SIZE);
++                              if (rval != WWN_SIZE)
++                                      continue;
++
++                              memcpy(port->node_name, node_name, WWN_SIZE);
++
++                              /*
++                               * Get "target-N-device-N-port" is a 16-chars
++                               * number
++                               */
++                              sprintf(propbuf, "scsi-qla%d-tgt-%d-di-%d-port",
++                                  instance,  tgt_no, dev_no);
++                              DEBUG(printk("build_tree: %s\n",propbuf);)
++
++                              rval = qla2x00_get_prop_xstr(ha, propbuf,
++                                  port_name, WWN_SIZE);
++                              if (rval != WWN_SIZE)
++                                      continue;
++
++                              memcpy(port->node_name, node_name, WWN_SIZE);
++                              memcpy(port->port_name, port_name, WWN_SIZE);
++                              port->flags |= FC_CONFIG;
++
++                              /*
++                               * Get "target-N-device-N-control" if property 
++                               * is present then all luns are visible.
++                               */
++                              sprintf(propbuf,
++                                  "scsi-qla%d-tgt-%d-di-%d-control",
++                                  instance, tgt_no, dev_no);
++                              DEBUG3(printk("build_tree: %s\n",propbuf);)
++
++                              rval = qla2x00_get_prop_xstr(ha, propbuf,
++                                  (uint8_t *)(&control_byte),
++                                  sizeof(control_byte));
++                              if (rval == -1) {
++                                      /* error getting string. go to next. */
++                                      continue;
++                              }
++
++                              DEBUG(printk("build_tree: control byte 0x%x\n",
++                                  control_byte);)
++
++                              port->mp_byte = control_byte;
++                              DEBUG(printk("build_tree: update_mp_device "
++                                  "host=%p, port=%p, tgt_no=%d\n",
++                                  host, port, tgt_no);)
++
++                              qla2x00_update_mp_device(host, port, tgt_no);
++                              qla2x00_set_lun_data_from_config(host,
++                                  port, tgt_no, dev_no);
++                      }
++              }
++              KMEM_FREE(port, sizeof (fc_port_t));
++      }
++
++      qla2x00_free_ioctl_scrap_mem(ha);
++
++      LEAVE("qla2x00_cfg_build_path_tree");
++      DEBUG(printk("Leaving: qla2x00_cfg_build_path_tree\n");)
++}
++
++/*
++ * qla2x00_cfg_display_devices
++ *      This routine will the node names of the different devices found
++ *      after port inquiry.
++ *
++ * Input:
++ *
++ * Returns:
++ *      None.
++ */
++void qla2x00_cfg_display_devices(void)
++{
++      mp_host_t     *host;
++      int     id;
++      mp_device_t     *dp;
++      mp_path_t  *path;
++      mp_path_list_t  *path_list;
++      int cnt, i, dev_no;
++      int instance;
++      lun_bit_mask_t  lun_mask;
++      int     mask_set;
++      uint8_t l;
++
++      printk("qla2x00_cfg_display_devices\n");
++      for (host = mp_hosts_base; (host); host = host->next) {
++
++              instance = (int) host->instance;
++              /* Display the node name for adapter */
++              printk(KERN_INFO
++                      "scsi-qla%d-adapter-port="
++                      "%02x%02x%02x%02x%02x%02x%02x%02x\\;\n",
++                      instance,
++                      host->portname[0],
++                      host->portname[1],
++                      host->portname[2],
++                      host->portname[3],
++                      host->portname[4],
++                      host->portname[5],
++                      host->portname[6],
++                      host->portname[7]);
++
++              for (id = 0; id < MAX_MP_DEVICES; id++) {
++                      if( (dp = host->mp_devs[id] ) == NULL )
++                              continue;
++
++                      path_list = dp->path_list;
++
++
++                      if( (path = path_list->last) != NULL ) {
++                              /* Print out device port names */
++                              path = path->next; /* first path */
++                              for (dev_no = 0,  cnt = 0;
++                                      cnt < path_list->path_cnt;
++                                      path = path->next, cnt++) {
++
++                                      /* skip others if not our host */
++                                      if (host != path->host)
++                                              continue;
++                                      printk(KERN_INFO
++                                              "scsi-qla%d-tgt-%d-di-%d-node="
++                                              "%02x%02x%02x%02x"
++                                              "%02x%02x%02x%02x\\;\n",
++                                              instance, id, path->id,
++                                              dp->nodename[0],
++                                              dp->nodename[1],
++                                              dp->nodename[2],
++                                              dp->nodename[3],
++                                              dp->nodename[4],
++                                              dp->nodename[5],
++                                              dp->nodename[6],
++                                              dp->nodename[7]);
++
++                                      /* port_name */
++                                      printk(KERN_INFO
++                                              "scsi-qla%d-tgt-%d-di-%d-port="
++                                              "%02x%02x%02x%02x"
++                                              "%02x%02x%02x%02x\\;\n",
++                                              instance, id, path->id,
++                                              path->portname[0],
++                                              path->portname[1],
++                                              path->portname[2],
++                                              path->portname[3],
++                                              path->portname[4],
++                                              path->portname[5],
++                                              path->portname[6],
++                                              path->portname[7]);
++
++                                      /* control byte */
++                                      printk(KERN_INFO
++                                              "scsi-qla%d-tgt-%d-di-%d-"
++                                              "control=%02x\\;\n",
++                                              instance, id, path->id,
++                                              path->mp_byte);
++
++                                      /*
++                                       * Build preferred bit mask for this
++                                       * path */
++                                      memset(&lun_mask, 0, sizeof(lun_mask));
++                                      mask_set = 0;
++                                      for (i = 0; i < MAX_LUNS; i++) {
++                                              l = (uint8_t)(i & 0xFF);
++                                              if (path_list->current_path[l] == path->id ) {
++                                                      EXT_SET_LUN_BIT((&lun_mask),l);
++                                                      mask_set++;
++                                              }
++                                      }
++                                      if (mask_set) {
++                                              printk(KERN_INFO
++                                                      "scsi-qla%d-tgt-%d-di-%d-preferred=%08x%08x%08x%08x%08x%08x%08x%08x\\;\n",
++                                                      instance,  id, path->id,
++                                                      *((uint32_t *) &lun_mask.mask[28]),
++                                                      *((uint32_t *) &lun_mask.mask[24]),
++                                                      *((uint32_t *) &lun_mask.mask[20]),
++                                                      *((uint32_t *) &lun_mask.mask[16]),
++                                                      *((uint32_t *) &lun_mask.mask[12]),
++                                                      *((uint32_t *) &lun_mask.mask[8]),
++                                                      *((uint32_t *) &lun_mask.mask[4]),
++                                                      *((uint32_t *) &lun_mask.mask[0]) );
++                                      }
++                                      /*
++                                       * Build disable bit mask for this path
++                                       */
++                                      mask_set = 0;
++                                      for (i = 0; i < MAX_LUNS; i++) {
++                                              l = (uint8_t)(i & 0xFF);
++                                              if (!(path->lun_data.data[l] &
++                                                      LUN_DATA_ENABLED) ) {
++
++                                                      mask_set++;
++                                              }
++                                      }
++                                      if (mask_set) {
++                                              printk(KERN_INFO
++                                                      "scsi-qla%d-tgt-%d-di-%d-lun-disable=%08x%08x%08x%08x%08x%08x%08x%08x\\;\n",
++                                                      instance,  id, path->id,
++                                                      *((uint32_t *) &lun_mask.mask[28]),
++                                                      *((uint32_t *) &lun_mask.mask[24]),
++                                                      *((uint32_t *) &lun_mask.mask[20]),
++                                                      *((uint32_t *) &lun_mask.mask[16]),
++                                                      *((uint32_t *) &lun_mask.mask[12]),
++                                                      *((uint32_t *) &lun_mask.mask[8]),
++                                                      *((uint32_t *) &lun_mask.mask[4]),
++                                                      *((uint32_t *) &lun_mask.mask[0]) );
++                                      }
++                                      dev_no++;
++                              }
++
++                      }
++              }
++      }
++}
++
++#if 0
++int qla2x00_cfg_build_range( mp_path_t *path, uint8_t *buf, int siz, uint8_t mask )
++{
++        int   i;
++        int   max, min;
++        int   colonflg = FALSE;
++        int   len = 0;
++
++        max = -1;
++        min = 0;
++        for (i = 0; i < MAX_LUNS; i++) {
++                if( (path->lun_data.data[i] & mask) ) {
++                        max = i;
++                } else {
++                        if( colonflg && max >= min ) {
++                                len += sprintf(&buf[len],":");
++                                if( len > siz)
++                                        return len;
++                                colonflg = FALSE;
++                        }
++                        if (max > min ) {
++                                len += sprintf(&buf[len],"%02x-%02x",min,max);
++                                if( len > siz)
++                                        return len;
++                                colonflg = TRUE;
++                        } else if ( max == min ) {
++                                len += sprintf(&buf[len],"%02x",max);
++                                if( len > siz)
++                                        return len;
++                                colonflg = TRUE;
++                        }
++                        min = i + 1;
++                        max = i;
++                }
++        }
++        DEBUG4(printk("build_range: return len =%d\n",len);)
++        return(len);
++}
++#endif
++
++#if 0
++/*
++ * qla2x00_cfg_proc_display_devices
++ *      This routine will the node names of the different devices found
++ *      after port inquiry.
++ *
++ * Input:
++ *
++ * Returns:
++ *      None.
++ */
++int qla2x00_cfg_proc_display_devices(scsi_qla_host_t *ha)
++{
++        mp_host_t     *host;
++        int     id;
++        mp_device_t   *dp;
++        mp_path_t  *path;
++        mp_path_list_t        *path_list;
++        int cnt, i;
++        int instance;
++        lun_bit_mask_t        lun_mask;
++        int   mask_set;
++        uint8_t       l;
++        fc_port_t     *port;
++        int len = 0;
++
++        for (host = mp_hosts_base; (host); host = host->next) {
++
++                if( host->ha != ha )
++                        continue;
++
++                instance = (int) host->instance;
++
++                /* Display the node name for adapter */
++                len += sprintf(PROC_BUF,
++                                "scsi-qla%d-adapter-node="
++                              "%02x%02x%02x%02x%02x%02x%02x%02x;\n",
++                                instance,
++                                host->nodename[0],
++                                host->nodename[1],
++                                host->nodename[2],
++                                host->nodename[3],
++                                host->nodename[4],
++                                host->nodename[5],
++                                host->nodename[6],
++                                host->nodename[7]);
++
++
++                for (id = 0; id < MAX_MP_DEVICES; id++) {
++                        if( (dp = host->mp_devs[id] ) == NULL )
++                                continue;
++
++                        path_list = dp->path_list;
++
++                        if( (path = path_list->last) != NULL ) {
++                                /* Print out device port names */
++                                path = path->next; /* first path */
++                                for (cnt = 0; cnt < path_list->path_cnt; path = path->next, cnt++) {
++                                        /* skip others if not our host */
++                                        if (host != path->host)
++                                                continue;
++                                        len += sprintf(PROC_BUF,
++                                                       "scsi-qla%d-target-%d-path-%d-node=%02x%02x%02x%02x%02x%02x%02x%02x;\n",
++                                                       instance,  id, path->id,
++                                                       dp->nodename[0],
++                                                       dp->nodename[1],
++                                                       dp->nodename[2],
++                                                       dp->nodename[3],
++                                                       dp->nodename[4],
++                                                       dp->nodename[5],
++                                                       dp->nodename[6],
++                                                       dp->nodename[7]);
++
++                                        /* port_name */
++                                        len += sprintf(PROC_BUF,
++                                                       "scsi-qla%d-target-%d-path-%d-port=%02x%02x%02x%02x%02x%02x%02x%02x;\n",
++                                                       instance,  id, path->id,
++                                                       path->portname[0],
++                                                       path->portname[1],
++                                                       path->portname[2],
++                                                       path->portname[3],
++                                                       path->portname[4],
++                                                       path->portname[5],
++                                                       path->portname[6],
++                                                       path->portname[7]);
++
++                                        if( path_list->visible == path->id ) {
++                                                len += sprintf(PROC_BUF, "scsi-qla%d-target-%d-path-%d-visible=%02x;\n",
++                                                               instance,  id, path->id, path->id);
++                                        }
++
++                                        len +=sprintf(PROC_BUF, "scsi-qla%d-target-%d-path-%d-control=%02x;\n",
++                                                      instance,  id, path->id, path->mp_byte);
++
++                                        /* Build preferred bit mask for this path */
++                                        memset(&lun_mask, 0, sizeof(lun_mask));
++                                        mask_set = 0;
++                                        for (i = 0; i < MAX_LUNS_PER_DEVICE; i++) {
++                                                l = (uint8_t)(i & 0xFF);
++                                                if( path_list->current_path[l] == path->id ) {
++                                                        EXT_SET_LUN_BIT((&lun_mask),l);
++                                                        mask_set++;
++                                                }
++                                        }
++                                        if( mask_set && EXT_DEF_MAX_LUNS <= 256 ) {
++                                                len += sprintf(PROC_BUF,
++                                                               "scsi-qla%d-target-%d-path-%d-preferred=%08x%08x%08x%08x%08x%08x%08x%08x;\n",
++                                                               instance,  id, path->id,
++                                                               *((uint32_t *) &lun_mask.mask[0]),
++                                                               *((uint32_t *) &lun_mask.mask[4]),
++                                                               *((uint32_t *) &lun_mask.mask[8]),
++                                                               *((uint32_t *) &lun_mask.mask[12]),
++                                                               *((uint32_t *) &lun_mask.mask[16]),
++                                                               *((uint32_t *) &lun_mask.mask[20]),
++                                                               *((uint32_t *) &lun_mask.mask[24]),
++                                                               *((uint32_t *) &lun_mask.mask[28]) );
++                                        }
++
++                                        len += sprintf(PROC_BUF,
++                                                       "scsi-qla%d-target-%d-path-%d-lun-enable=%08x%08x%08x%08x%08x%08x%08x%08x;\n",
++                                                       instance,  id, path->id,
++                                                       *((uint32_t *) &path->lun_data.data[0]),
++                                                       *((uint32_t *) &path->lun_data.data[4]),
++                                                       *((uint32_t *) &path->lun_data.data[8]),
++                                                       *((uint32_t *) &path->lun_data.data[12]),
++                                                       *((uint32_t *) &path->lun_data.data[16]),
++                                                       *((uint32_t *) &path->lun_data.data[20]),
++                                                       *((uint32_t *) &path->lun_data.data[24]),
++                                                       *((uint32_t *) &path->lun_data.data[28]) );
++
++                                } /* for */
++                        }
++                }
++        }
++        return( len );
++}
++#endif
+--- /dev/null  Thu Apr 11 07:25:15 2002
++++ linux-2.5.73-n9560/drivers/scsi/qla2xxx/qla_dbg.c  Thu Jul  3 15:34:42 2003
+@@ -0,0 +1,1000 @@
++/*
++ *                  QLOGIC LINUX SOFTWARE
++ *
++ * QLogic ISP2x00 device driver for Linux 2.5.x
++ * Copyright (C) 2003 Qlogic Corporation
++ * (www.qlogic.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, 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 "qla_os.h"
++
++#include "qla_def.h"
++
++
++#if defined(ISP2300)
++/**
++ * qla2x00_fw_dump() - Dumps binary data from the 2300 firmware.
++ * @ha: SCSI driver HA context
++ * @hardware_locked: Called with the hardware_lock
++ */
++void
++qla2x00_dump_isp(scsi_qla_host_t *ha, int hardware_locked)
++{
++      int             rval;
++      uint32_t        i;
++      uint32_t        cnt, timer;
++      uint32_t        risc_address;
++      uint16_t        risc_code_size;
++      uint16_t        mb0, mb2;
++
++      uint16_t        data, stat;
++      device_reg_t    *reg;
++      uint16_t        *dmp_reg;
++      unsigned long   flags;
++
++
++      reg = ha->iobase;
++      flags = 0;
++
++      if (!hardware_locked)
++              spin_lock_irqsave(&ha->hardware_lock, flags);
++
++      printk("\n\n[==>BEG]\n");
++
++      printk("HCCR Register:\n");
++      printk("%04x\n\n", RD_REG_WORD(&reg->hccr));
++
++      WRT_REG_WORD(&reg->hccr, HCCR_PAUSE_RISC); 
++      SYS_DELAY(100);
++
++      printk("PBIU Registers:\n");
++      dmp_reg = (uint16_t *)(reg + 0);
++      for (i = 0; i < 8; i++) 
++              printk("%04x ", RD_REG_WORD(dmp_reg++));
++
++      printk("\n\n");
++
++      printk("ReqQ-RspQ-Risc2Host Status registers:\n");
++      dmp_reg = (uint16_t *)((uint8_t *)reg + 0x10);
++      for (i = 0; i < 8; i++) 
++              printk("%04x ", RD_REG_WORD(dmp_reg++));
++
++      printk("\n\n");
++
++      printk("Mailbox Registers:");
++      dmp_reg = (uint16_t *)((uint8_t *)reg + 0x40);
++      for (i = 0; i < 32; i++) {
++              if ((i % 8) == 0)
++                      printk("\n");
++              printk("%04x ", RD_REG_WORD(dmp_reg++));
++      }
++
++      printk("\n\n");
++
++      WRT_REG_WORD(&reg->ctrl_status, 0x40);
++      printk("Auto Request Response DMA Registers:");
++      dmp_reg = (uint16_t *)((uint8_t *)reg + 0x80);
++      for (i = 0; i < 32; i++) {
++              if ((i % 8) == 0)
++                      printk("\n");
++              printk("%04x ", RD_REG_WORD(dmp_reg++));
++      }
++
++      printk("\n\n");
++
++      WRT_REG_WORD(&reg->ctrl_status, 0x50); 
++      printk("DMA Registers:");
++      dmp_reg = (uint16_t *)((uint8_t *)reg + 0x80);
++      for (i = 0; i < 48; i++) {
++              if ((i % 8) == 0)
++                      printk("\n");
++              printk("%04x ", RD_REG_WORD(dmp_reg++));
++      }
++
++      printk("\n\n");
++
++      WRT_REG_WORD(&reg->ctrl_status, 0x00); 
++      printk("RISC Hardware Registers:");
++      dmp_reg = (uint16_t *)((uint8_t *)reg + 0xA0);
++      for (i = 0; i < 16; i++) {
++              if ((i % 8) == 0)
++                      printk("\n");
++              printk("%04x ", RD_REG_WORD(dmp_reg++));
++      }
++
++      printk("\n\n");
++
++      WRT_REG_WORD(&reg->pcr, 0x2000); 
++      printk("RISC GP0 Registers:");
++      dmp_reg = (uint16_t *)((uint8_t *)reg + 0x80);
++      for (i = 0; i < 16; i++) {
++              if ((i % 8) == 0)
++                      printk("\n");
++              printk("%04x ", RD_REG_WORD(dmp_reg++));
++      }
++
++      printk("\n\n");
++
++      WRT_REG_WORD(&reg->pcr, 0x2200); 
++      printk("RISC GP1 Registers:");
++      dmp_reg = (uint16_t *)((uint8_t *)reg + 0x80);
++      for (i = 0; i < 16; i++) {
++              if ((i % 8) == 0)
++                      printk("\n");
++              printk("%04x ", RD_REG_WORD(dmp_reg++));
++      }
++
++      printk("\n\n");
++
++      WRT_REG_WORD(&reg->pcr, 0x2400); 
++      printk("RISC GP2 Registers:");
++      dmp_reg = (uint16_t *)((uint8_t *)reg + 0x80);
++      for (i = 0; i < 16; i++) {
++              if ((i % 8) == 0)
++                      printk("\n");
++              printk("%04x ", RD_REG_WORD(dmp_reg++));
++      }
++
++      printk("\n\n");
++
++      WRT_REG_WORD(&reg->pcr, 0x2600); 
++      printk("RISC GP3 Registers:");
++      dmp_reg = (uint16_t *)((uint8_t *)reg + 0x80);
++      for (i = 0; i < 16; i++) {
++              if ((i % 8) == 0)
++                      printk("\n");
++              printk("%04x ", RD_REG_WORD(dmp_reg++));
++      }
++
++      printk("\n\n");
++
++      WRT_REG_WORD(&reg->pcr, 0x2800); 
++      printk("RISC GP4 Registers:");
++      dmp_reg = (uint16_t *)((uint8_t *)reg + 0x80);
++      for (i = 0; i < 16; i++) {
++              if ((i % 8) == 0)
++                      printk("\n");
++              printk("%04x ", RD_REG_WORD(dmp_reg++));
++      }
++
++      printk("\n\n");
++
++      WRT_REG_WORD(&reg->pcr, 0x2A00); 
++      printk("RISC GP5 Registers:");
++      dmp_reg = (uint16_t *)((uint8_t *)reg + 0x80);
++      for (i = 0; i < 16; i++) {
++              if ((i % 8) == 0)
++                      printk("\n");
++              printk("%04x ", RD_REG_WORD(dmp_reg++));
++      }
++
++      printk("\n\n");
++
++      WRT_REG_WORD(&reg->pcr, 0x2C00); 
++      printk("RISC GP6 Registers:");
++      dmp_reg = (uint16_t *)((uint8_t *)reg + 0x80);
++      for (i = 0; i < 16; i++) {
++              if ((i % 8) == 0)
++                      printk("\n");
++              printk("%04x ", RD_REG_WORD(dmp_reg++));
++      }
++
++      printk("\n\n");
++
++      WRT_REG_WORD(&reg->pcr, 0x2E00); 
++      printk("RISC GP7 Registers:");
++      dmp_reg = (uint16_t *)((uint8_t *)reg + 0x80);
++      for (i = 0; i < 16; i++) {
++              if ((i % 8) == 0)
++                      printk("\n");
++              printk("%04x ", RD_REG_WORD(dmp_reg++));
++      }
++
++      printk("\n\n");
++
++      WRT_REG_WORD(&reg->ctrl_status, 0x10); 
++      printk("Frame Buffer Hardware Registers:");
++      dmp_reg = (uint16_t *)((uint8_t *)reg + 0x80);
++      for (i = 0; i < 64; i++) {
++              if ((i % 8) == 0)
++                      printk("\n");
++              printk("%04x ", RD_REG_WORD(dmp_reg++));
++      }
++
++      printk("\n\n");
++
++      WRT_REG_WORD(&reg->ctrl_status, 0x20); 
++      printk("FPM B0 Registers:");
++      dmp_reg = (uint16_t *)((uint8_t *)reg + 0x80);
++      for (i = 0; i < 64; i++) {
++              if ((i % 8) == 0)
++                      printk("\n");
++              printk("%04x ", RD_REG_WORD(dmp_reg++));
++      }
++
++      printk("\n\n");
++
++      WRT_REG_WORD(&reg->ctrl_status, 0x30); 
++      printk("FPM B1 Registers:");
++      dmp_reg = (uint16_t *)((uint8_t *)reg + 0x80);
++      for (i = 0; i < 64; i++) {
++              if ((i % 8) == 0)
++                      printk("\n");
++              printk("%04x ", RD_REG_WORD(dmp_reg++));
++      }
++
++      printk("\n\n");
++
++      WRT_REG_WORD(&reg->ctrl_status, CSR_ISP_SOFT_RESET);
++
++      data = RD_REG_WORD(&reg->ctrl_status);
++      for (i = 6000000; i && data & CSR_ISP_SOFT_RESET; i--) {
++              SYS_DELAY(5);
++              data = RD_REG_WORD(&reg->ctrl_status);
++      }
++      if (ha->pdev->device == QLA2312_DEVICE_ID ||
++          ha->pdev->device == QLA2322_DEVICE_ID) {
++              SYS_DELAY(10);
++      } else {
++              data = RD_REG_WORD(&reg->mailbox0);
++              for (i = 6000000; i && data == MBS_BUSY; i--) {
++                      SYS_DELAY(5);
++                      data = RD_REG_WORD(&reg->mailbox0);
++              }
++      }
++
++      rval = QLA2X00_SUCCESS;
++      mb0 = mb2 = 0;
++      printk("Code RAM Dump:");
++      risc_address      = 0x800;
++      risc_code_size    = 0xffff - 0x800 + 1;
++      WRT_REG_WORD(&reg->mailbox0, MBC_READ_RAM_WORD);
++      clear_bit(MBX_INTERRUPT, &ha->mbx_cmd_flags);
++      for (cnt = 0; cnt < risc_code_size && rval == QLA2X00_SUCCESS; cnt++) {
++              if ((cnt % 8) == 0)
++                      printk("\n%04x: ", cnt + 0x0800);
++              WRT_REG_WORD(&reg->mailbox1, (uint16_t)risc_address++);
++              WRT_REG_WORD(&reg->hccr, HCCR_SET_HOST_INT);
++
++              for (timer = 6000000; timer != 0; timer--) {
++                      /* Check for pending interrupts. */
++                      if ((stat = RD_REG_WORD(&reg->host_status_lo)) & HSR_INT) {
++                              stat &= 0xff;
++
++                              if (stat == 0x1 || stat == 0x2) {
++                                      set_bit(MBX_INTERRUPT, &ha->mbx_cmd_flags);
++
++                                      mb0 = RD_REG_WORD(&reg->mailbox0);
++                                      mb2 = RD_REG_WORD(&reg->mailbox2);
++
++                                      /* Release mailbox registers. */
++                                      WRT_REG_WORD(&reg->semaphore, 0);
++                                      WRT_REG_WORD(&reg->hccr, HCCR_CLR_RISC_INT);
++                                      break;
++                              } else if (stat == 0x10 || stat == 0x11) {
++                                      set_bit(MBX_INTERRUPT, &ha->mbx_cmd_flags);
++
++                                      mb0 = RD_REG_WORD(&reg->mailbox0);
++                                      mb2 = RD_REG_WORD(&reg->mailbox2);
++
++                                      WRT_REG_WORD(&reg->hccr, HCCR_CLR_RISC_INT);
++                                      break;
++                              }
++
++                              /* clear this intr; it wasn't a mailbox intr */
++                              WRT_REG_WORD(&reg->hccr, HCCR_CLR_RISC_INT);
++                      }
++
++                      mdelay(5);
++              }
++
++              if (test_and_clear_bit(MBX_INTERRUPT, &ha->mbx_cmd_flags)) {
++                      rval = mb0 & MBS_MASK;
++                      printk("%04x ", mb2);
++              } else {
++                      rval = QLA2X00_FUNCTION_FAILED;
++              }
++      }
++
++      printk("\n\n");
++
++      mb0 = mb2 = 0;
++      printk("Stack RAM Dump:");
++      risc_address      = 0x10000;
++      risc_code_size    = 0x107ff - 0x10000 + 1;
++      WRT_REG_WORD(&reg->mailbox0, 0xf /* MBC_READ_RAM_EXTENDED */);
++      clear_bit(MBX_INTERRUPT, &ha->mbx_cmd_flags);
++
++      for (cnt = 0; cnt < risc_code_size && rval == QLA2X00_SUCCESS; cnt++) {
++              if ((cnt % 8) == 0)
++                      printk("\n%05x: ", cnt + 0x10000);
++              WRT_REG_WORD(&reg->mailbox1, LSW(risc_address));
++              WRT_REG_WORD(&reg->mailbox8, MSW(risc_address++));
++              WRT_REG_WORD(&reg->hccr, HCCR_SET_HOST_INT);
++
++              for (timer = 6000000; timer != 0; timer--) {
++                      /* Check for pending interrupts. */
++                      if ((stat = RD_REG_WORD(&reg->host_status_lo)) & HSR_INT) {
++                              stat &= 0xff;
++
++                              if (stat == 0x1 || stat == 0x2) {
++                                      set_bit(MBX_INTERRUPT, &ha->mbx_cmd_flags);
++
++                                      mb0 = RD_REG_WORD(&reg->mailbox0);
++                                      mb2 = RD_REG_WORD(&reg->mailbox2);
++
++                                      /* Release mailbox registers. */
++                                      WRT_REG_WORD(&reg->semaphore, 0);
++                                      WRT_REG_WORD(&reg->hccr, HCCR_CLR_RISC_INT);
++                                      break;
++                              } else if (stat == 0x10 || stat == 0x11) {
++                                      set_bit(MBX_INTERRUPT, &ha->mbx_cmd_flags);
++
++                                      mb0 = RD_REG_WORD(&reg->mailbox0);
++                                      mb2 = RD_REG_WORD(&reg->mailbox2);
++
++                                      WRT_REG_WORD(&reg->hccr, HCCR_CLR_RISC_INT);
++                                      break;
++                              }
++
++                              /* clear this intr; it wasn't a mailbox intr */
++                              WRT_REG_WORD(&reg->hccr, HCCR_CLR_RISC_INT);
++                      }
++
++                      mdelay(5);
++              }
++
++              if (test_and_clear_bit(MBX_INTERRUPT, &ha->mbx_cmd_flags)) {
++                      rval = mb0 & MBS_MASK;
++                      printk("%04x ", mb2);
++              } else {
++                      rval = QLA2X00_FUNCTION_FAILED;
++              }
++      }
++
++      printk("\n\n");
++
++      mb0 = mb2 = 0;
++      printk("Data RAM Dump:");
++      risc_address      = 0x10800;
++      risc_code_size    = 0x1ffff - 0x10800 + 1;
++      WRT_REG_WORD(&reg->mailbox0, 0xf /* MBC_READ_RAM_EXTENDED */);
++      clear_bit(MBX_INTERRUPT, &ha->mbx_cmd_flags);
++
++      for (cnt = 0; cnt < risc_code_size && rval == QLA2X00_SUCCESS; cnt++) {
++              if ((cnt % 8) == 0)
++                      printk("\n%05x: ", cnt + 0x10800);
++              WRT_REG_WORD(&reg->mailbox1, LSW(risc_address));
++              WRT_REG_WORD(&reg->mailbox8, MSW(risc_address++));
++              WRT_REG_WORD(&reg->hccr, HCCR_SET_HOST_INT);
++
++              for (timer = 6000000; timer != 0; timer--) {
++                      /* Check for pending interrupts. */
++                      if ((stat = RD_REG_WORD(&reg->host_status_lo)) & HSR_INT) {
++                              stat &= 0xff;
++
++                              if (stat == 0x1 || stat == 0x2) {
++                                      set_bit(MBX_INTERRUPT, &ha->mbx_cmd_flags);
++
++                                      mb0 = RD_REG_WORD(&reg->mailbox0);
++                                      mb2 = RD_REG_WORD(&reg->mailbox2);
++
++                                      /* Release mailbox registers. */
++                                      WRT_REG_WORD(&reg->semaphore, 0);
++                                      WRT_REG_WORD(&reg->hccr, HCCR_CLR_RISC_INT);
++                                      break;
++                              } else if (stat == 0x10 || stat == 0x11) {
++                                      set_bit(MBX_INTERRUPT, &ha->mbx_cmd_flags);
++
++                                      mb0 = RD_REG_WORD(&reg->mailbox0);
++                                      mb2 = RD_REG_WORD(&reg->mailbox2);
++
++                                      WRT_REG_WORD(&reg->hccr, HCCR_CLR_RISC_INT);
++                                      break;
++                              }
++
++                              /* clear this intr; it wasn't a mailbox intr */
++                              WRT_REG_WORD(&reg->hccr, HCCR_CLR_RISC_INT);
++                      }
++
++                      mdelay(5);
++              }
++
++              if (test_and_clear_bit(MBX_INTERRUPT, &ha->mbx_cmd_flags)) {
++                      rval = mb0 & MBS_MASK;
++                      printk("%04x ", mb2);
++              } else {
++                      rval = QLA2X00_FUNCTION_FAILED;
++              }
++      }
++
++      printk("\n[<==END] ISP DEBUG DUMP\n");
++
++      if (!hardware_locked)
++              spin_unlock_irqrestore(&ha->hardware_lock, flags);
++}
++
++#elif defined(ISP2200)
++
++/**
++ * qla2x00_fw_dump() - Dumps binary data from the 2200 firmware.
++ * @ha: SCSI driver HA context
++ * @hardware_locked: Called with the hardware_lock
++ */
++void
++qla2x00_dump_isp(scsi_qla_host_t *ha, int hardware_locked)
++{
++      int             rval;
++      uint32_t        i;
++      uint32_t        cnt, timer;
++      uint32_t        risc_address;
++      uint16_t        risc_code_size;
++      uint16_t        mb0, mb2;
++
++      uint16_t        data, stat;
++      device_reg_t    *reg;
++      uint16_t        *dmp_reg;
++      unsigned long   flags;
++
++
++      reg = ha->iobase;
++      flags = 0;
++
++      if (!hardware_locked)
++              spin_lock_irqsave(&ha->hardware_lock, flags);
++
++      printk("\n\n[==>BEG]\n");
++
++      printk("HCCR Register:\n");
++      printk("%04x\n\n", RD_REG_WORD(&reg->hccr));
++
++      /* Pause RISC. */
++      WRT_REG_WORD(&reg->hccr, HCCR_PAUSE_RISC); 
++      for (cnt = 30000; cnt; cnt--) {
++              if ((RD_REG_WORD(&reg->hccr) & HCCR_RISC_PAUSE) != 0)
++                      break;
++              SYS_DELAY(10);
++      }
++      if (!cnt)
++              goto done;
++
++      printk("PBIU Registers:\n");
++      dmp_reg = (uint16_t *)(reg + 0);
++      for (i = 0; i < 8; i++) 
++              printk("%04x ", RD_REG_WORD(dmp_reg++));
++
++      printk("\n\n");
++
++      printk("Mailbox Registers:");
++      dmp_reg = (uint16_t *)((uint8_t *)reg + 0x10);
++      for (i = 0; i < 32; i++) {
++              if (i == 8)
++                      dmp_reg = (uint16_t *)((uint8_t *)reg + 0xe0);
++
++              if ((i % 8) == 0)
++                      printk("\n");
++              printk("%04x ", RD_REG_WORD(dmp_reg++));
++      }
++
++      printk("\n\n");
++
++      printk("DMA Registers:");
++      dmp_reg = (uint16_t *)((uint8_t *)reg + 0x20);
++      for (i = 0; i < 48; i++) {
++              if ((i % 8) == 0)
++                      printk("\n");
++              printk("%04x ", RD_REG_WORD(dmp_reg++));
++      }
++
++      printk("\n\n");
++
++      WRT_REG_WORD(&reg->ctrl_status, 0x00); 
++      printk("RISC Hardware Registers:");
++      dmp_reg = (uint16_t *)((uint8_t *)reg + 0xA0);
++      for (i = 0; i < 16; i++) {
++              if ((i % 8) == 0)
++                      printk("\n");
++              printk("%04x ", RD_REG_WORD(dmp_reg++));
++      }
++
++      printk("\n\n");
++
++      WRT_REG_WORD(&reg->pcr, 0x2000); 
++      printk("RISC GP0 Registers:");
++      dmp_reg = (uint16_t *)((uint8_t *)reg + 0x80);
++      for (i = 0; i < 16; i++) {
++              if ((i % 8) == 0)
++                      printk("\n");
++              printk("%04x ", RD_REG_WORD(dmp_reg++));
++      }
++
++      printk("\n\n");
++
++      WRT_REG_WORD(&reg->pcr, 0x2100); 
++      printk("RISC GP1 Registers:");
++      dmp_reg = (uint16_t *)((uint8_t *)reg + 0x80);
++      for (i = 0; i < 16; i++) {
++              if ((i % 8) == 0)
++                      printk("\n");
++              printk("%04x ", RD_REG_WORD(dmp_reg++));
++      }
++
++      printk("\n\n");
++
++      WRT_REG_WORD(&reg->pcr, 0x2200); 
++      printk("RISC GP2 Registers:");
++      dmp_reg = (uint16_t *)((uint8_t *)reg + 0x80);
++      for (i = 0; i < 16; i++) {
++              if ((i % 8) == 0)
++                      printk("\n");
++              printk("%04x ", RD_REG_WORD(dmp_reg++));
++      }
++
++      printk("\n\n");
++
++      WRT_REG_WORD(&reg->pcr, 0x2300); 
++      printk("RISC GP3 Registers:");
++      dmp_reg = (uint16_t *)((uint8_t *)reg + 0x80);
++      for (i = 0; i < 16; i++) {
++              if ((i % 8) == 0)
++                      printk("\n");
++              printk("%04x ", RD_REG_WORD(dmp_reg++));
++      }
++
++      printk("\n\n");
++
++      WRT_REG_WORD(&reg->pcr, 0x2400); 
++      printk("RISC GP4 Registers:");
++      dmp_reg = (uint16_t *)((uint8_t *)reg + 0x80);
++      for (i = 0; i < 16; i++) {
++              if ((i % 8) == 0)
++                      printk("\n");
++              printk("%04x ", RD_REG_WORD(dmp_reg++));
++      }
++
++      printk("\n\n");
++
++      WRT_REG_WORD(&reg->pcr, 0x2500); 
++      printk("RISC GP5 Registers:");
++      dmp_reg = (uint16_t *)((uint8_t *)reg + 0x80);
++      for (i = 0; i < 16; i++) {
++              if ((i % 8) == 0)
++                      printk("\n");
++              printk("%04x ", RD_REG_WORD(dmp_reg++));
++      }
++
++      printk("\n\n");
++
++      WRT_REG_WORD(&reg->pcr, 0x2600); 
++      printk("RISC GP6 Registers:");
++      dmp_reg = (uint16_t *)((uint8_t *)reg + 0x80);
++      for (i = 0; i < 16; i++) {
++              if ((i % 8) == 0)
++                      printk("\n");
++              printk("%04x ", RD_REG_WORD(dmp_reg++));
++      }
++
++      printk("\n\n");
++
++      WRT_REG_WORD(&reg->pcr, 0x2700); 
++      printk("RISC GP7 Registers:");
++      dmp_reg = (uint16_t *)((uint8_t *)reg + 0x80);
++      for (i = 0; i < 16; i++) {
++              if ((i % 8) == 0)
++                      printk("\n");
++              printk("%04x ", RD_REG_WORD(dmp_reg++));
++      }
++
++      printk("\n\n");
++
++      WRT_REG_WORD(&reg->ctrl_status, 0x10); 
++      printk("Frame Buffer Hardware Registers:");
++      dmp_reg = (uint16_t *)((uint8_t *)reg + 0x80);
++      for (i = 0; i < 16; i++) {
++              if ((i % 8) == 0)
++                      printk("\n");
++              printk("%04x ", RD_REG_WORD(dmp_reg++));
++      }
++
++      printk("\n\n");
++
++      WRT_REG_WORD(&reg->ctrl_status, 0x20); 
++      printk("FPM B0 Registers:");
++      dmp_reg = (uint16_t *)((uint8_t *)reg + 0x80);
++      for (i = 0; i < 64; i++) {
++              if ((i % 8) == 0)
++                      printk("\n");
++              printk("%04x ", RD_REG_WORD(dmp_reg++));
++      }
++
++      printk("\n\n");
++
++      WRT_REG_WORD(&reg->ctrl_status, 0x30); 
++      printk("FPM B1 Registers:");
++      dmp_reg = (uint16_t *)((uint8_t *)reg + 0x80);
++      for (i = 0; i < 64; i++) {
++              if ((i % 8) == 0)
++                      printk("\n");
++              printk("%04x ", RD_REG_WORD(dmp_reg++));
++      }
++
++      printk("\n\n");
++
++      WRT_REG_WORD(&reg->ctrl_status, CSR_ISP_SOFT_RESET);
++
++      data = RD_REG_WORD(&reg->ctrl_status);
++      for (i = 6000000; i && data & CSR_ISP_SOFT_RESET; i--) {
++              SYS_DELAY(5);
++              data = RD_REG_WORD(&reg->ctrl_status);
++      }
++      data = RD_REG_WORD(&reg->mailbox0);
++      for (i = 6000000; i && data == MBS_BUSY; i--) {
++              SYS_DELAY(5);
++              data = RD_REG_WORD(&reg->mailbox0);
++      }
++
++      /* Pause RISC. */
++      WRT_REG_WORD(&reg->hccr, HCCR_PAUSE_RISC); 
++      for (cnt = 30000; cnt; cnt--) {
++              if ((RD_REG_WORD(&reg->hccr) & HCCR_RISC_PAUSE) != 0)
++                      break;
++              SYS_DELAY(10);
++      }
++      if (!cnt)
++              goto done;
++
++      rval = QLA2X00_SUCCESS;
++      mb0 = mb2 = 0;
++      printk("RISC SRAM:");
++      risc_address      = 0x1000;
++      risc_code_size    = 0xffff - 0x1000 + 1;
++      WRT_REG_WORD(&reg->mailbox0, MBC_READ_RAM_WORD);
++      clear_bit(MBX_INTERRUPT, &ha->mbx_cmd_flags);
++      for (cnt = 0; cnt < risc_code_size && rval == QLA2X00_SUCCESS; cnt++) {
++              if ((cnt % 8) == 0)
++                      printk("\n%04x: ", cnt + 0x1000);
++              WRT_REG_WORD(&reg->mailbox1, (uint16_t)risc_address++);
++              WRT_REG_WORD(&reg->hccr, HCCR_SET_HOST_INT);
++
++              for (timer = 6000000; timer != 0; timer--) {
++                      /* Check for pending interrupts. */
++                      if ((stat = RD_REG_WORD(&reg->host_status_lo)) & HSR_INT) {
++                              stat &= 0xff;
++
++                              if (stat == 0x1 || stat == 0x2) {
++                                      set_bit(MBX_INTERRUPT, &ha->mbx_cmd_flags);
++
++                                      mb0 = RD_REG_WORD(&reg->mailbox0);
++                                      mb2 = RD_REG_WORD(&reg->mailbox2);
++
++                                      /* Release mailbox registers. */
++                                      WRT_REG_WORD(&reg->semaphore, 0);
++                                      WRT_REG_WORD(&reg->hccr, HCCR_CLR_RISC_INT);
++                                      break;
++                              } else if (stat == 0x10 || stat == 0x11) {
++                                      set_bit(MBX_INTERRUPT, &ha->mbx_cmd_flags);
++
++                                      mb0 = RD_REG_WORD(&reg->mailbox0);
++                                      mb2 = RD_REG_WORD(&reg->mailbox2);
++
++                                      WRT_REG_WORD(&reg->hccr, HCCR_CLR_RISC_INT);
++                                      break;
++                              }
++
++                              /* clear this intr; it wasn't a mailbox intr */
++                              WRT_REG_WORD(&reg->hccr, HCCR_CLR_RISC_INT);
++                      }
++
++                      mdelay(5);
++              }
++
++              if (test_and_clear_bit(MBX_INTERRUPT, &ha->mbx_cmd_flags)) {
++                      rval = mb0 & MBS_MASK;
++                      printk("%04x ", mb2);
++              } else {
++                      rval = QLA2X00_FUNCTION_FAILED;
++              }
++      }
++
++      printk("\n[<==END] ISP DEBUG DUMP\n");
++
++done:
++      if (!hardware_locked)
++              spin_unlock_irqrestore(&ha->hardware_lock, flags);
++}
++#else /* if defined(ISP2100) */
++
++/**
++ * qla2x00_fw_dump() - Dumps binary data from the 2100 firmware.
++ * @ha: SCSI driver HA context
++ * @hardware_locked: Called with the hardware_lock
++ *
++ * NOTE: On the ISP2100, this function will not be implemented.
++ */
++void
++qla2x00_dump_isp(scsi_qla_host_t *ha, int hardware_locked)
++{
++      /* NO-OP */
++      printk("\n\n[==>BEG]\n");
++      printk("\n[<==END] ISP DEBUG DUMP\n");
++}
++
++#endif /* if defined(ISP2300) */
++
++//FIXME
++
++/****************************************************************************/
++/*                         Driver Debug Functions.                          */
++/****************************************************************************/
++
++void 
++qla2x00_dump_regs(struct Scsi_Host *host) 
++{
++      /* Assumes non-memory mapped I/O */
++      printk("Mailbox registers:\n");
++      printk("scsi(%d): mbox 0 0x%04x \n",
++          host->host_no, inw(host->io_port + 0x10));
++      printk("scsi(%d): mbox 1 0x%04x \n",
++          host->host_no, inw(host->io_port + 0x12));
++      printk("scsi(%d): mbox 2 0x%04x \n",
++          host->host_no, inw(host->io_port + 0x14));
++      printk("scsi(%d): mbox 3 0x%04x \n",
++          host->host_no, inw(host->io_port + 0x16));
++      printk("scsi(%d): mbox 4 0x%04x \n",
++          host->host_no, inw(host->io_port + 0x18));
++      printk("scsi(%d): mbox 5 0x%04x \n",
++          host->host_no, inw(host->io_port + 0x1a));
++}
++
++
++void
++qla2x00_dump_buffer(uint8_t * b, uint32_t size) 
++{
++      uint32_t cnt;
++      uint8_t c;
++
++      printk(" 0   1   2   3   4   5   6   7   8   9   "
++          "Ah  Bh  Ch  Dh  Eh  Fh\n");
++      printk("-----------------------------------------"
++          "----------------------\n");
++
++      for (cnt = 0; cnt < size;) {
++              c = *b++;
++              printk("%02x",(uint32_t) c);
++              cnt++;
++              if (!(cnt % 16))
++                      printk("\n");
++              else
++                      printk("  ");
++      }
++      if (cnt % 16)
++              printk("\n");
++}
++
++/**************************************************************************
++ *   qla2x00_print_scsi_cmd
++ *     Dumps out info about the scsi cmd and srb.
++ *   Input     
++ *     cmd : Scsi_Cmnd
++ **************************************************************************/
++void
++qla2x00_print_scsi_cmd(Scsi_Cmnd * cmd) 
++{
++      struct scsi_qla_host *ha;
++      struct Scsi_Host *host;
++      srb_t *sp;
++      struct os_lun *lq;
++      fc_port_t *fcport;
++
++      int i;
++
++      host = cmd->device->host;
++      ha = (struct scsi_qla_host *) host->hostdata;
++
++      sp = (srb_t *) CMD_SP(cmd);
++      printk("SCSI Command @= 0x%p, Handle=0x%08lx\n", 
++                      cmd, (u_long) CMD_HANDLE(cmd));
++      printk("  chan=%d, target = 0x%02x, lun = 0x%02x, cmd_len = 0x%02x\n",
++                      SCSI_BUS_32(cmd), SCSI_TCN_32(cmd), SCSI_LUN_32(cmd),
++                      cmd->cmd_len);
++      printk(" CDB = ");
++      for (i = 0; i < cmd->cmd_len; i++) {
++              printk("0x%02x ", cmd->cmnd[i]);
++      }
++      printk("\n  seg_cnt =%d, retries=%d, serial_number_at_timeout=0x%lx\n",
++                      cmd->use_sg,
++                      cmd->retries, cmd->serial_number_at_timeout);
++      printk("  request buffer=0x%p, request buffer len=0x%x\n", 
++                      cmd->request_buffer,
++                      cmd->request_bufflen);
++      printk("  tag=%d, flags=0x%x, transfersize=0x%x \n", 
++                      cmd->tag, cmd->flags, cmd->transfersize);
++      printk("  serial_number=%d, SP=%p\n", (int) cmd->serial_number,sp); 
++      printk("  data direction=%d\n", cmd->sc_data_direction);
++      if (sp) {
++              printk("  sp flags=0x%x\n", sp->flags);
++              printk("  r_start=0x%lx, u_start=0x%lx, "
++                              "f_start=0x%lx, state=%d\n", 
++                              sp->r_start, sp->u_start,
++                              sp->f_start, sp->state);
++
++              lq = sp->lun_queue;
++              fcport = lq->fclun->fcport;
++              printk(" e_start= 0x%lx, ext_history= %d, "
++                              "fo retry=%d, loopid =%x, port path=%d\n", 
++                              sp->e_start, sp->ext_history,
++                              sp->fo_retry_cnt,
++                              fcport->loop_id, 
++                              fcport->cur_path);
++      }
++}
++
++/*
++ * qla2x00_print_q_info
++ *     Prints queue info
++ * Input
++ *      q: lun queue   
++ */ 
++void 
++qla2x00_print_q_info(struct os_lun *q) 
++{
++      printk("Queue info: flags=0x%lx\n", q->q_flag);
++}
++
++#if defined(QL_DEBUG_ROUTINES)
++/*
++ * qla2x00_formatted_dump_buffer
++ *       Prints string plus buffer.
++ *
++ * Input:
++ *       string  = Null terminated string (no newline at end).
++ *       buffer  = buffer address.
++ *       wd_size = word size 8, 16, 32 or 64 bits
++ *       count   = number of words.
++ */
++void
++qla2x00_formatted_dump_buffer(char *string, uint8_t * buffer, 
++                              uint8_t wd_size, uint32_t count) 
++{
++      uint32_t cnt;
++      uint16_t *buf16;
++      uint32_t *buf32;
++
++      if (strcmp(string, "") != 0)
++              printk("%s\n",string);
++
++      switch (wd_size) {
++              case 8:
++                      printk(" 0    1    2    3    4    5    6    7    "
++                              "8    9    Ah   Bh   Ch   Dh   Eh   Fh\n");
++                      printk("-----------------------------------------"
++                              "-------------------------------------\n");
++
++                      for (cnt = 1; cnt <= count; cnt++, buffer++) {
++                              printk("%02x",*buffer);
++                              if (cnt % 16 == 0)
++                                      printk("\n");
++                              else
++                                      printk("  ");
++                      }
++                      if (cnt % 16 != 0)
++                              printk("\n");
++                      break;
++              case 16:
++                      printk("   0      2      4      6      8      Ah "
++                              "       Ch     Eh\n");
++                      printk("-----------------------------------------"
++                              "-------------\n");
++
++                      buf16 = (uint16_t *) buffer;
++                      for (cnt = 1; cnt <= count; cnt++, buf16++) {
++                              printk("%4x",*buf16);
++
++                              if (cnt % 8 == 0)
++                                      printk("\n");
++                              else if (*buf16 < 10)
++                                      printk("   ");
++                              else
++                                      printk("  ");
++                      }
++                      if (cnt % 8 != 0)
++                              printk("\n");
++                      break;
++              case 32:
++                      printk("       0          4          8          Ch\n");
++                      printk("------------------------------------------\n");
++
++                      buf32 = (uint32_t *) buffer;
++                      for (cnt = 1; cnt <= count; cnt++, buf32++) {
++                              printk("%8x", *buf32);
++
++                              if (cnt % 4 == 0)
++                                      printk("\n");
++                              else if (*buf32 < 10)
++                                      printk("   ");
++                              else
++                                      printk("  ");
++                      }
++                      if (cnt % 4 != 0)
++                              printk("\n");
++                      break;
++              default:
++                      break;
++      }
++}
++
++#endif
++
++
++#if STOP_ON_ERROR
++/**************************************************************************
++*   qla2x00_panic
++*
++**************************************************************************/
++static void 
++qla2x00_panic(char *cp, struct Scsi_Host *host) 
++{
++      struct scsi_qla_host *ha;
++      long *fp;
++
++      ha = (struct scsi_qla_host *) host->hostdata;
++      DEBUG2(ql2x_debug_print = 1;);
++      printk("qla2100 - PANIC:  %s\n", cp);
++      printk("Current time=0x%lx\n", jiffies);
++      printk("Number of pending commands =0x%lx\n", ha->actthreads);
++      printk("Number of queued commands =0x%lx\n", ha->qthreads);
++      printk("Number of free entries = (%d)\n", ha->req_q_cnt);
++      printk("Request Queue @ 0x%lx, Response Queue @ 0x%lx\n",
++                             ha->request_dma, ha->response_dma);
++      printk("Request In Ptr %d\n", ha->req_ring_index);
++      fp = (long *) &ha->flags;
++      printk("HA flags =0x%lx\n", *fp);
++      qla2x00_dump_requests(ha);
++      qla2x00_dump_regs(host);
++      cli();
++      for (;;) {
++              udelay(2);
++              barrier();
++              /* cpu_relax();*/
++      }
++      sti();
++}
++
++#endif
++
++/**************************************************************************
++*   qla2x00_dump_requests
++*
++**************************************************************************/
++void
++qla2x00_dump_requests(scsi_qla_host_t *ha) 
++{
++
++      Scsi_Cmnd       *cp;
++      srb_t           *sp;
++      int i;
++
++      printk("Outstanding Commands on controller:\n");
++
++      for (i = 1; i < MAX_OUTSTANDING_COMMANDS; i++) {
++              if ((sp = ha->outstanding_cmds[i]) == NULL)
++                      continue;
++              if ((cp = sp->cmd) == NULL)
++                      continue;
++
++              printk("(%d): Pid=%d, sp flags=0x%lx, cmd=0x%p\n", 
++                      i, 
++                      (int)sp->cmd->serial_number, 
++                      (long)sp->flags,CMD_SP(sp->cmd));
++      }
++}
+--- /dev/null  Thu Apr 11 07:25:15 2002
++++ linux-2.5.73-n9560/drivers/scsi/qla2xxx/qla_dbg.h  Thu Jul  3 15:34:42 2003
+@@ -0,0 +1,138 @@
++/******************************************************************************
++ *                  QLOGIC LINUX SOFTWARE
++ *
++ * QLogic ISP2x00 device driver for Linux 2.5.x
++ * Copyright (C) 2003 Qlogic Corporation
++ * (www.qlogic.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, 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.
++ *
++ ******************************************************************************/
++
++#undef ENTER_TRACE
++/*
++* Macros use for debugging the driver.
++*/
++#if defined(ENTER_TRACE)
++#define ENTER(x)      do { printk("qla2100 : Entering %s()\n", x); } while (0)
++#define LEAVE(x)      do { printk("qla2100 : Leaving %s()\n", x);  } while (0)
++#define ENTER_INTR(x) do { printk("qla2100 : Entering %s()\n", x); } while (0)
++#define LEAVE_INTR(x) do { printk("qla2100 : Leaving %s()\n", x);  } while (0)
++#else
++#define ENTER(x)      do {} while (0)
++#define LEAVE(x)      do {} while (0)
++#define ENTER_INTR(x)         do {} while (0)
++#define LEAVE_INTR(x)   do {} while (0)
++#endif
++
++#if  DEBUG_QLA2100
++#define DEBUG(x)      do {x;} while (0);
++#else
++#define DEBUG(x)      do {} while (0);
++#endif
++
++#if defined(QL_DEBUG_LEVEL_1)
++#define DEBUG1(x)     do {x;} while (0);
++#else
++#define DEBUG1(x)     do {} while (0);
++#endif
++
++#if defined(QL_DEBUG_LEVEL_2)
++#define DEBUG2(x)       do {x;} while (0);
++#define DEBUG2_3(x)     do {x;} while (0);
++#define DEBUG2_3_11(x)  do {x;} while (0);
++#define DEBUG2_9_10(x)    do {x;} while (0);
++#define DEBUG2_11(x)    do {x;} while (0);
++#else
++#define DEBUG2(x)     do {} while (0);
++#endif
++
++#if defined(QL_DEBUG_LEVEL_3)
++#define DEBUG3(x)     do {x;} while (0);
++#define DEBUG2_3(x)   do {x;} while (0);
++#define DEBUG2_3_11(x)        do {x;} while (0);
++#define DEBUG3_11(x)  do {x;} while (0);
++#else
++#define DEBUG3(x)     do {} while (0);
++  #if !defined(QL_DEBUG_LEVEL_2)
++  #define DEBUG2_3(x) do {} while (0);
++  #endif
++#endif
++
++#if defined(QL_DEBUG_LEVEL_4)
++#define DEBUG4(x)     do {x;} while (0);
++#else
++#define DEBUG4(x)     do {} while (0);
++#endif
++
++#if defined(QL_DEBUG_LEVEL_5)
++#define DEBUG5(x)          do {x;} while (0);
++#else
++#define DEBUG5(x)     do {} while (0);
++#endif
++
++#if defined(QL_DEBUG_LEVEL_7)
++#define DEBUG7(x)          do {x;} while (0);
++#else
++#define DEBUG7(x)        do {} while (0);
++#endif
++
++#if defined(QL_DEBUG_LEVEL_9)
++#define DEBUG9(x)       do {x;} while (0);
++#define DEBUG9_10(x)    do {x;} while (0);
++#define DEBUG2_9_10(x)        do {x;} while (0);
++#else
++#define DEBUG9(x)     do {} while (0);
++#endif
++
++#if defined(QL_DEBUG_LEVEL_10)
++#define DEBUG10(x)      do {x;} while (0);
++#define DEBUG2_9_10(x)        do {x;} while (0);
++#define DEBUG9_10(x)  do {x;} while (0);
++#else
++#define DEBUG10(x)    do {} while (0);
++  #if !defined(DEBUG2_9_10)
++  #define DEBUG2_9_10(x)      do {} while (0);
++  #endif
++  #if !defined(DEBUG9_10)
++  #define DEBUG9_10(x)        do {} while (0);
++  #endif
++#endif
++
++#if defined(QL_DEBUG_LEVEL_11)
++#define DEBUG11(x)      do{x;} while(0);
++#if !defined(DEBUG2_11)
++#define DEBUG2_11(x)    do{x;} while(0);
++#endif
++#if !defined(DEBUG2_3_11)
++#define DEBUG2_3_11(x)  do{x;} while(0);
++#endif
++#if !defined(DEBUG3_11)
++#define DEBUG3_11(x)    do{x;} while(0);
++#endif
++#else
++#define DEBUG11(x)    do{} while(0);
++  #if !defined(QL_DEBUG_LEVEL_2)
++  #define DEBUG2_11(x)        do{} while(0);
++    #if !defined(QL_DEBUG_LEVEL_3)
++    #define DEBUG2_3_11(x) do{} while(0);
++    #endif
++  #endif
++  #if !defined(QL_DEBUG_LEVEL_3)
++  #define DEBUG3_11(x)        do{} while(0);
++  #endif
++#endif
++
++#if defined(QL_DEBUG_LEVEL_12)
++#define DEBUG12(x)      do {x;} while (0);
++#else
++#define DEBUG12(x)    do {} while (0);
++#endif
+--- /dev/null  Thu Apr 11 07:25:15 2002
++++ linux-2.5.73-n9560/drivers/scsi/qla2xxx/qla_def.h  Thu Jul  3 15:34:42 2003
+@@ -0,0 +1,2484 @@
++/********************************************************************************
++*                  QLOGIC LINUX SOFTWARE
++*
++* QLogic ISP2x00 device driver for Linux 2.5.x
++* Copyright (C) 2003 Qlogic Corporation
++* (www.qlogic.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, 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.
++**
++******************************************************************************/
++
++#ifndef __QLA_DEF_H
++#define __QLA_DEF_H
++
++#if defined(qla23xx)
++      #define MAILBOX_REGISTER_COUNT  32
++      #define ISP_NAME                "23xx"
++      #define DRIVER_NAME             "qla2300"
++      #define ISP2300
++      #undef ISP2322
++#elif defined(qla22xx)
++      #define MAILBOX_REGISTER_COUNT  32
++      #define ISP_NAME                "22xx"
++      #define DRIVER_NAME             "qla2200"
++      #define ISP2200
++#else /* qla21xx */
++      #define MAILBOX_REGISTER_COUNT  8
++      #define ISP_NAME                "21xx"
++      #define DRIVER_NAME             "qla2100"
++      #define ISP2100
++#endif
++
++/*****************************************/
++/*   ISP Boards supported by this driver */
++/*****************************************/
++#define QLA2X00_VENDOR_ID     0x1077
++
++#define QLA2100_DEVICE_ID     0x2100
++
++#define QLA2200_DEVICE_ID     0x2200
++#define QLA2200A_RISC_ROM_VER 4
++
++#define QLA2300_DEVICE_ID     0x2300
++#define QLA2312_DEVICE_ID     0x2312
++#define QLA2322_DEVICE_ID     0x2322
++#define FPM_2300              6
++#define FPM_2310              7
++
++#include "qla_settings.h"
++#include "exioct.h"
++#include "inioct.h"
++
++/* 
++ * Data bit definitions
++ */
++#define BIT_0 0x1
++#define BIT_1 0x2
++#define BIT_2 0x4
++#define BIT_3 0x8
++#define BIT_4 0x10
++#define BIT_5 0x20
++#define BIT_6 0x40
++#define BIT_7 0x80
++#define BIT_8 0x100
++#define BIT_9 0x200
++#define BIT_10        0x400
++#define BIT_11        0x800
++#define BIT_12        0x1000
++#define BIT_13        0x2000
++#define BIT_14        0x4000
++#define BIT_15        0x8000
++#define BIT_16        0x10000
++#define BIT_17        0x20000
++#define BIT_18        0x40000
++#define BIT_19        0x80000
++#define BIT_20        0x100000
++#define BIT_21        0x200000
++#define BIT_22        0x400000
++#define BIT_23        0x800000
++#define BIT_24        0x1000000
++#define BIT_25        0x2000000
++#define BIT_26        0x4000000
++#define BIT_27        0x8000000
++#define BIT_28        0x10000000
++#define BIT_29        0x20000000
++#define BIT_30        0x40000000
++#define BIT_31        0x80000000
++
++#define LSB(x)        ((uint8_t)(x))
++#define MSB(x)        ((uint8_t)((uint16_t)(x) >> 8))
++
++#define LSW(x)        ((uint16_t)(x))
++#define MSW(x)        ((uint16_t)((uint32_t)(x) >> 16))
++
++#define LSD(x)        ((uint32_t)((uint64_t)(x)))
++#define MSD(x)        ((uint32_t)((uint64_t)(x) >> 32))
++
++
++/*
++ * I/O register
++*/
++/* #define MEMORY_MAPPED_IO  */    /* Enable memory mapped I/O */
++#undef MEMORY_MAPPED_IO            /* Disable memory mapped I/O */
++
++#if defined(MEMORY_MAPPED_IO)
++#define RD_REG_BYTE(addr)             readb(addr)
++#define RD_REG_WORD(addr)             readw(addr)
++#define RD_REG_DWORD(addr)            readl(addr)
++#define WRT_REG_BYTE(addr, data)      writeb(data,addr)
++#define WRT_REG_WORD(addr, data)      writew(data,addr)
++#define WRT_REG_DWORD(addr, data)     writel(data,addr)
++#else   /* MEMORY_MAPPED_IO */
++#define RD_REG_BYTE(addr)             (inb((unsigned long)addr))
++#define RD_REG_WORD(addr)             (inw((unsigned long)addr))
++#define RD_REG_DWORD(addr)            (inl((unsigned long)addr))
++#define WRT_REG_BYTE(addr, data)      (outb(data,(unsigned long)addr))
++#define WRT_REG_WORD(addr, data)      (outw(data,(unsigned long)addr))
++#define WRT_REG_DWORD(addr, data)     (outl(data,(unsigned long)addr))
++#endif  /* MEMORY_MAPPED_IO */
++
++/*
++ * Fibre Channel device definitions.
++ */
++#define WWN_SIZE              8       /* Size of WWPN, WWN & WWNN */
++#define MAX_FIBRE_DEVICES     256
++#define MAX_FIBRE_LUNS        256
++#define       MAX_RSCN_COUNT          10
++#define       MAX_HOST_COUNT          16
++
++/*
++ * Host adapter default definitions.
++ */
++#define MAX_BUSES             1  /* We only have one bus today */
++#define MAX_TARGETS_2100      MAX_FIBRE_DEVICES
++#define MAX_TARGETS_2200      MAX_FIBRE_DEVICES
++#define MAX_TARGETS           MAX_FIBRE_DEVICES
++#define MIN_LUNS              8
++#define MAX_LUNS              MAX_FIBRE_LUNS
++#define MAX_CMDS_PER_LUN      255 
++#define MAX_SRBS              4096
++                                    
++/*
++ * Fibre Channel device definitions.
++ */
++#define LAST_LOCAL_LOOP_ID    0x7d
++#define SNS_FL_PORT           0x7e
++#define FABRIC_CONTROLLER     0x7f
++#define SIMPLE_NAME_SERVER    0x80
++#define SNS_FIRST_LOOP_ID     0x81
++#define LAST_SNS_LOOP_ID      0xfe
++#define MANAGEMENT_SERVER     0xfe
++#define BROADCAST             0xff
++#define SNS_ACCEPT            0x0280  /* 8002 swapped */
++#define SNS_REJECT            0x0180  /* 8001 swapped */
++
++/* Loop ID's used as database flags, must be higher than any valid Loop ID */
++#define PORT_UNUSED           0x100   /* Port never been used. */
++#define PORT_AVAILABLE                0x101   /* Device does not exist on port. */
++#define PORT_NEED_MAP         0x102       
++#define PORT_LOST_ID          0x200       
++#define PORT_LOGIN_NEEDED     0x400       
++
++/*
++ * Timeout timer counts in seconds
++ */
++#define QLA2100_WDG_TIME_QUANTUM      5       /* In seconds */
++#define PORT_RETRY_TIME                       2
++#define LOOP_DOWN_TIMEOUT             60
++#define LOOP_DOWN_TIME                        120     /* 240 */
++#define       LOOP_DOWN_RESET                 (LOOP_DOWN_TIME - 30)
++
++/* Maximum outstanding commands in ISP queues (1-65535) */
++#define MAX_OUTSTANDING_COMMANDS      1024
++
++/* ISP request and response entry counts (37-65535) */
++#define REQUEST_ENTRY_CNT             1024    /* Number of request entries. */
++#if defined(ISP2100) || defined(ISP2200)
++#define RESPONSE_ENTRY_CNT            64      /* Number of response entries.*/
++#else
++#define RESPONSE_ENTRY_CNT            512     /* Number of response entries.*/
++#endif
++
++/* Number of segments 1 - 65535 */
++#define SG_SEGMENTS     32             /* Cmd entry + 6 continuations */
++
++/*
++ * SCSI Request Block 
++ */
++typedef struct srb {
++      struct list_head   list;
++
++      Scsi_Cmnd  *cmd;                /* Linux SCSI command pkt */
++      struct scsi_qla_host *ha;       /* ha this SP is queued on */
++
++      uint8_t     dir;                /* direction of transfer */
++      uint8_t     unused1;
++
++      uint16_t    flags;              /* Status flags - defined below */
++
++      uint16_t     state;
++#define SRB_FREE_STATE          0     /* Request returned back */
++#define SRB_PENDING_STATE       1     /* Request being queued in LUN Q */
++#define SRB_ACTIVE_STATE        2     /* Request in Active Array */
++#define SRB_DONE_STATE          3     /* Request Queued in Done Queue */
++#define SRB_RETRY_STATE         4     /* Request in Retry Queue */
++#define SRB_SUSPENDED_STATE     5     /* Request in suspended state */
++#define SRB_NO_QUEUE_STATE      6     /* Request is in between states */
++#define SRB_ACTIVE_TIMEOUT_STATE 7    /* Request in Active Array but timed out */
++#define SRB_FAILOVER_STATE    8       /* Request in Failover Queue */
++#define SRB_SCSI_RETRY_STATE    9     /* Request in Scsi Retry Queue */
++
++      uint8_t     used;               /* used by allocation code */
++      uint8_t     ref_num;            /* reference SRB number */      
++      uint16_t    magic;              /* qlogic magic number */
++#define SRB_MAGIC       0x10CB
++
++      u_long      host_no;            /* Host number of allocating host */
++      struct      timer_list   timer; /* used to timeout command */
++      dma_addr_t       saved_dma_handle;      /* for unmap of single transfers */
++
++      atomic_t         ref_count;     /* reference count for this structure */                        
++
++      /* Target/LUN queue pointers. */
++      struct os_tgt   *tgt_queue;     /* ptr to visible ha's target */
++      struct os_lun   *lun_queue;     /* ptr to visible ha's lun */
++      struct fc_lun   *fclun;         /* FC LUN context pointer. */
++
++      /* Raw completion info for use by failover ? */
++      uint8_t fo_retry_cnt;   /* Retry count this request */
++      uint8_t err_id;         /* error id */
++      uint8_t cmd_length;     /* command length */
++      uint8_t unused3;
++
++      int      delay;        /* delay in seconds */
++      int      ext_history;   /*  */
++
++      u_long      e_start;    /* jiffies at start of extend timeout */
++      u_long      r_start;    /* jiffies at start of request */
++      u_long      u_start;    /* jiffies when sent to F/W    */
++      u_long      f_start;    /* ra 10/29/01*/
++                              /*jiffies when put in failover queue*/
++
++      uint32_t    resid;      /* Residual transfer length */
++      uint16_t    sense_len;  /* Sense data length */
++      uint32_t    request_sense_length;
++      void        *request_sense_ptr;
++
++#if defined(IOCB_THROLLE_USAGE)
++      uint32_t         iocb_cnt;
++#endif
++} srb_t;
++
++/*
++ * SRB flag definitions
++ */
++#define SRB_TIMEOUT           BIT_0   /* Command timed out */
++#define SRB_DMA_VALID         BIT_1   /* Command sent to ISP */
++#define SRB_WATCHDOG          BIT_2   /* Command on watchdog list */
++#define SRB_ABORT_PENDING     BIT_3   /* Command abort sent to device */
++
++#define SRB_ABORTED           BIT_4   /* Command aborted command already */
++#define SRB_RETRY             BIT_5   /* Command needs retrying */
++#define SRB_GOT_SENSE         BIT_6   /* Command has sense data */
++#define SRB_FAILOVER          BIT_7   /* Command in failover state */
++
++#define SRB_BUSY              BIT_8   /* Command is in busy retry state */
++#define SRB_FO_CANCEL         BIT_9   /* Command don't need to do failover */
++#define       SRB_IOCTL               BIT_10  /* IOCTL command. */
++#define       SRB_ISP_STARTED         BIT_11  /* Command sent to ISP. */
++
++#define       SRB_ISP_COMPLETED       BIT_12  /* ISP finished with command */
++
++
++/*
++ *  ISP PCI Configuration Register Set
++ */
++typedef volatile struct {
++    uint16_t vendor_id;                 /* 0x0 */
++    uint16_t device_id;                 /* 0x2 */
++    uint16_t command;                   /* 0x4 */
++    uint16_t status;                    /* 0x6 */
++    uint8_t revision_id;                /* 0x8 */
++    uint8_t programming_interface;      /* 0x9 */
++    uint8_t sub_class;                  /* 0xa */
++    uint8_t base_class;                 /* 0xb */
++    uint8_t cache_line;                 /* 0xc */
++    uint8_t latency_timer;              /* 0xd */
++    uint8_t header_type;                /* 0xe */
++    uint8_t bist;                       /* 0xf */
++    uint32_t base_port;                 /* 0x10 */
++    uint32_t mem_base_addr;             /* 0x14 */
++    uint32_t base_addr[4];              /* 0x18-0x24 */
++    uint32_t reserved_1[2];             /* 0x28-0x2c */
++    uint16_t expansion_rom;             /* 0x30 */
++    uint32_t reserved_2[2];             /* 0x34-0x38 */
++    uint8_t interrupt_line;             /* 0x3c */
++    uint8_t interrupt_pin;              /* 0x3d */
++    uint8_t min_grant;                  /* 0x3e */
++    uint8_t max_latency;                /* 0x3f */
++} config_reg_t __attribute__((packed));
++
++
++/*
++ * ISP I/O Register Set structure definitions.
++ */
++typedef volatile struct {
++      volatile uint16_t flash_address; /* Flash BIOS address */
++      volatile uint16_t flash_data;   /* Flash BIOS data */
++      uint16_t unused_1[1];           /* Gap */
++      volatile uint16_t ctrl_status;  /* Control/Status */
++#define CSR_FLASH_64K_BANK    BIT_3   /* Flash upper 64K bank select */ 
++#define CSR_FLASH_ENABLE      BIT_1   /* Flash BIOS Read/Write enable */
++#define CSR_ISP_SOFT_RESET    BIT_0   /* ISP soft reset */
++
++      volatile uint16_t ictrl;        /* Interrupt control */
++#define ICR_EN_INT            BIT_15  /* ISP enable interrupts. */
++#define ICR_EN_RISC           BIT_3   /* ISP enable RISC interrupts. */
++
++      volatile uint16_t istatus;      /* Interrupt status */
++#define ISR_RISC_INT          BIT_3   /* RISC interrupt */
++
++      volatile uint16_t semaphore;    /* Semaphore */
++      volatile uint16_t nvram;        /* NVRAM register. */
++#define NVR_DESELECT          0
++#define NVR_CLOCK             BIT_0
++#define NVR_SELECT            BIT_1
++#define NVR_DATA_OUT          BIT_2
++#define NVR_DATA_IN           BIT_3
++#define NVR_BUSY              BIT_15
++
++#if defined(ISP2100) || defined(ISP2200)
++      volatile uint16_t mailbox0;
++      volatile uint16_t mailbox1;
++      volatile uint16_t mailbox2;
++      volatile uint16_t mailbox3;
++      volatile uint16_t mailbox4;
++#define       ISP_REQ_Q_IN(reg)       (&(reg)->mailbox4)
++#define       ISP_REQ_Q_OUT(reg)      (&(reg)->mailbox4)
++      volatile uint16_t mailbox5;
++#define       ISP_RSP_Q_IN(reg)       (&(reg)->mailbox5)
++#define       ISP_RSP_Q_OUT(reg)      (&(reg)->mailbox5)
++      volatile uint16_t mailbox6;
++      volatile uint16_t mailbox7;
++      uint16_t unused_2[0x3b];        /* Gap */
++#else /* defined(ISP2300) */
++      volatile uint16_t req_q_in;     /* Request Queue In-Pointer */
++#define       ISP_REQ_Q_IN(reg)       (&(reg)->req_q_in)
++      volatile uint16_t req_q_out;    /* Request Queue Out-Pointer */
++#define       ISP_REQ_Q_OUT(reg)      (&(reg)->req_q_out)
++      volatile uint16_t rsp_q_in;     /* Response Queue In-Pointer */
++#define       ISP_RSP_Q_IN(reg)       (&(reg)->rsp_q_in)
++      volatile uint16_t rsp_q_out;    /* Response Queue Out-Pointer */
++#define       ISP_RSP_Q_OUT(reg)      (&(reg)->rsp_q_out)
++
++      volatile uint16_t host_status_lo; /* RISC to Host Status Low */
++#define HSR_INT                       BIT_15  /* RISC int */
++#define HSR_RISC_PAUSED               BIT_8   /* RISC Paused */
++      volatile uint16_t host_status_hi; /* RISC to Host Status High */
++#define HSR_ROM_MB_CMD_COMP   0x01    /* ROM mailbox cmd complete */
++#define HSR_ROM_MB_CMD_ERROR  0x02    /*ROM mailbox cmd unsuccessful*/
++#define HSR_MB_CMD_COMP               0x10    /* Mailbox cmd complete */
++#define HSR_MB_CMD_ERROR      0x11    /* Mailbox cmd unsuccessful */
++#define HSR_ASYNC_EVENT               0x12    /* Asynchronous event */
++#define HSR_RESPONSE_QUEUE_UP 0x13    /* Response Queue update */
++#define HSR_RIO_ONE           0x15    /* RIO one 16 bit handle */
++#define HSR_FAST_SCSI_COMP    0x16    /* Fast Post SCSI complete */
++
++      volatile uint16_t host_semaphore; /* Host to Host Semaphore */
++      uint16_t unused_3[0x11];        /* Gap */
++      volatile uint16_t mailbox0;
++      volatile uint16_t mailbox1;
++      volatile uint16_t mailbox2;
++      volatile uint16_t mailbox3;
++      volatile uint16_t mailbox4;
++      volatile uint16_t mailbox5;
++      volatile uint16_t mailbox6;
++      volatile uint16_t mailbox7;
++      volatile uint16_t mailbox8;
++      volatile uint16_t mailbox9;
++      volatile uint16_t mailbox10;
++      volatile uint16_t mailbox11;
++      volatile uint16_t mailbox12;
++      volatile uint16_t mailbox13;
++      volatile uint16_t mailbox14;
++      volatile uint16_t mailbox15;
++      volatile uint16_t mailbox16;
++      volatile uint16_t mailbox17;
++      volatile uint16_t mailbox18;
++      volatile uint16_t mailbox19;
++      volatile uint16_t mailbox20;
++      volatile uint16_t mailbox21;
++      volatile uint16_t mailbox22;
++      volatile uint16_t mailbox23;
++      volatile uint16_t mailbox24;
++      volatile uint16_t mailbox25;
++      volatile uint16_t mailbox26;
++      volatile uint16_t mailbox27;
++      volatile uint16_t mailbox28;
++      volatile uint16_t mailbox29;
++      volatile uint16_t mailbox30;
++      volatile uint16_t mailbox31;
++      volatile uint16_t fb_cmd;
++      uint16_t unused_4[0xa];         /* Gap */
++#endif /* defined(ISP2100) || defined(ISP2200) */
++      volatile uint16_t fpm_diag_config;
++      uint16_t unused_5[0x6];         /* Gap */
++      volatile uint16_t pcr;          /* Processor Control Register. */
++      uint16_t unused_6[0x5];         /* Gap */
++      volatile uint16_t mctr;         /* Memory Configuration and Timing. */
++      uint16_t unused_7[0x3];         /* Gap */
++#if defined(ISP2100) || defined(ISP2200)
++      volatile uint16_t fb_cmd;
++#else /* defined(ISP2300) */
++      uint16_t unused_11;
++#endif /* defined(ISP2100) || defined(ISP2200) */
++      uint16_t unused_8[0x3];         /* Gap */
++      volatile uint16_t hccr;         /* Host command & control register. */
++#define HCCR_HOST_INT         BIT_7   /* Host interrupt bit */
++#define HCCR_RISC_PAUSE               BIT_5   /* Pause mode bit */
++                                      /* HCCR commands */
++#define HCCR_RESET_RISC               0x1000  /* Reset RISC */
++#define HCCR_PAUSE_RISC               0x2000  /* Pause RISC */
++#define HCCR_RELEASE_RISC     0x3000  /* Release RISC from reset. */
++#define HCCR_SET_HOST_INT     0x5000  /* Set host interrupt */
++#define HCCR_CLR_HOST_INT     0x6000  /* Clear HOST interrupt */
++#define HCCR_CLR_RISC_INT     0x7000  /* Clear RISC interrupt */
++#define       HCCR_DISABLE_PARITY_PAUSE 0x4001 /* Disable parity error RISC pause. */
++#define HCCR_ENABLE_PARITY    0xA000  /* Enable PARITY interrupt */
++
++      uint16_t unused_9[5];           /* Gap */
++      volatile uint16_t gpiod;        /* GPIO Data register. */
++      volatile uint16_t gpioe;        /* GPIO Enable register. */
++#if defined(ISP2200)
++      uint16_t unused_10[8];          /* Gap */
++      volatile uint16_t mailbox8;
++      volatile uint16_t mailbox9;
++      volatile uint16_t mailbox10;
++      volatile uint16_t mailbox11;
++      volatile uint16_t mailbox12;
++      volatile uint16_t mailbox13;
++      volatile uint16_t mailbox14;
++      volatile uint16_t mailbox15;
++      volatile uint16_t mailbox16;
++      volatile uint16_t mailbox17;
++      volatile uint16_t mailbox18;
++      volatile uint16_t mailbox19;
++      volatile uint16_t mailbox20;
++      volatile uint16_t mailbox21;
++      volatile uint16_t mailbox22;
++      volatile uint16_t mailbox23;    /* Also probe reg. */
++#endif /* defined(ISP2200) */
++} device_reg_t;
++
++typedef struct {
++      uint32_t        out_mb;         /* outbound from driver */
++      uint32_t        in_mb;                  /* Incoming from RISC */
++      uint16_t        mb[MAILBOX_REGISTER_COUNT];
++      long            buf_size;
++      void            *bufp;
++      uint32_t        tov;
++      uint8_t         flags;
++#define MBX_DMA_IN    BIT_0
++#define       MBX_DMA_OUT     BIT_1
++#define IOCTL_CMD     BIT_2
++} mbx_cmd_t;
++
++#define       MBX_TOV_SECONDS 30
++
++/*
++ *  ISP product identification definitions in mailboxes after reset.
++ */
++#define PROD_ID_1             0x4953
++#define PROD_ID_2             0x0000
++#define PROD_ID_2a            0x5020
++#define PROD_ID_3             0x2020
++#define PROD_ID_4             0x1
++#define PROD_ID_4a            0x2
++
++/*
++ * ISP mailbox Self-Test status codes
++ */
++#define MBS_FRM_ALIVE         0       /* Firmware Alive. */
++#define MBS_CHKSUM_ERR                1       /* Checksum Error. */
++#define MBS_BUSY              4       /* Busy. */
++
++/*
++ * ISP mailbox command complete status codes
++ */
++#define MBS_CMD_CMP           0x4000  /* Command Complete. */
++#define MBS_INV_CMD           0x4001  /* Invalid Command. */
++#define MBS_HOST_INF_ERR      0x4002  /* Host Interface Error. */
++#define MBS_TEST_FAILED               0x4003  /* Test Failed. */
++#define MBS_CMD_ERR           0x4005  /* Command Error. */
++#define MBS_CMD_PARAM_ERR     0x4006  /* Command Parameter Error. */
++#define MBS_FATAL_ERROR               0xF000  /* Command Fatal Error. */
++//TODO consolidate these definitions
++#define MBS_FIRMWARE_ALIVE    0x0000 
++#define MBS_COMMAND_COMPLETE  0x4000 
++#define MBS_INVALID_COMMAND   0x4001 
++
++/* QLogic subroutine status definitions */
++#define QL_STATUS_SUCCESS             0
++#define QL_STATUS_ERROR                       1
++#define QL_STATUS_FATAL_ERROR         2
++#define QL_STATUS_RESOURCE_ERROR      3
++#define QL_STATUS_LOOP_ID_IN_USE      4
++#define QL_STATUS_NO_DATA             5
++#define QL_STATUS_TIMEOUT             6
++/*
++ * ISP mailbox asynchronous event status codes
++ */
++#define MBA_ASYNC_EVENT               0x8000  /* Asynchronous event. */
++#define MBA_RESET             0x8001  /* Reset Detected. */
++#define MBA_SYSTEM_ERR                0x8002  /* System Error. */
++#define MBA_REQ_TRANSFER_ERR  0x8003  /* Request Transfer Error. */
++#define MBA_RSP_TRANSFER_ERR  0x8004  /* Response Transfer Error. */
++#define MBA_WAKEUP_THRES      0x8005  /* Request Queue Wake-up. */
++#define MBA_LIP_OCCURRED      0x8010  /* Loop Initialization Procedure */
++                                              /* occurred. */
++#define MBA_LOOP_UP           0x8011  /* FC Loop UP. */
++#define MBA_LOOP_DOWN         0x8012  /* FC Loop Down. */
++#define MBA_LIP_RESET         0x8013  /* LIP reset occurred. */
++#define MBA_PORT_UPDATE               0x8014  /* Port Database update. */
++#define MBA_SCR_UPDATE                0x8015  /* State Change Registration. */
++#define MBA_RSCN_UPDATE               MBA_SCR_UPDATE
++#define MBA_SCSI_COMPLETION   0x8020  /* SCSI Command Complete. */
++#define MBA_CTIO_COMPLETION   0x8021  /* CTIO Complete. */
++#if !defined(ISP2100)
++#define MBA_LINK_MODE_UP      0x8030  /* FC Link Mode UP. */
++#define MBA_UPDATE_CONFIG     0x8036  /* FC Update Configuration. */
++#endif
++
++/*
++ * ISP mailbox commands
++ */
++#define MBC_LOAD_RAM              1     /* Load RAM. */
++#define MBC_EXECUTE_FIRMWARE      2     /* Execute firmware. */
++#define MBC_WRITE_RAM_WORD        4     /* Write RAM word. */
++#define MBC_READ_RAM_WORD         5     /* Read RAM word. */
++#define MBC_MAILBOX_REGISTER_TEST 6     /* Wrap incoming mailboxes */
++#define MBC_VERIFY_CHECKSUM       7     /* Verify checksum. */
++#define MBC_ABOUT_FIRMWARE        8     /* Get firmware revision. */
++#define MBC_LOAD_RAM_A64          9     /* Load RAM by 64-bit address. */
++#define MBC_DUMP_RAM              0xA   /* READ BACK FW */
++#define MBC_LOAD_RAM_EXTENDED     0xB   /* Load Extended RAM */
++#define MBC_DUMP_SRAM             0xC   /* Dump SRAM    */
++#define MBC_WRITE_RAM_WORD_EXTENDED   0xD     /* Write RAM word extended */
++#define MBC_IOCB_EXECUTE          0x12  /* Execute an IOCB command */
++#define MBC_ABORT_COMMAND         0x15  /* Abort IOCB command. */
++#define MBC_ABORT_DEVICE          0x16  /* Abort device (ID/LUN). */
++#define MBC_ABORT_TARGET          0x17  /* Abort target (ID). */
++#define MBC_TARGET_RESET_ALL      0x18  /* Reset all local targets. */
++#define MBC_GET_ADAPTER_LOOP_ID   0x20  /* Get loop id of ISP2100. */
++#define MBC_GET_RETRY_COUNT       0x22  /* GET RATOV & retry count */
++#define MBC_GET_FIRMWARE_OPTIONS  0x28  /* Get firmware options. */
++#define MBC_SET_RETRY_COUNT       0x32  /* SET RATOV & retry count. */
++#define MBC_SET_FIRMWARE_OPTIONS  0x38  /* Set firmware options. */
++#define MBC_GET_RESOURCE_COUNTS   0x42  /* GET Resource counts */
++#define MBC_DIAGNOSTIC_LOOP_BACK  0x45  /* Perform LoopBack diagnostic */
++#define MBC_ENHANCED_GET_PORT_DATABASE     0x47  /* Get port database. */
++#define MBC_IOCB_EXECUTE_A64    0x54  /* Execute an IOCB command (64bit) */
++#define       MBC_SEND_RNID_ELS         0x57  /* Send RNID ELS request */
++#define       MBC_SET_RNID_PARAMS       0x59  /* Set RNID parameters */
++#define       MBC_GET_RNID_PARAMS       0x5a  /* Get RNID parameters */
++#define MBC_INITIALIZE_FIRMWARE   0x60  /* Initialize firmware */
++#define MBC_INITIATE_LIP          0x62  /* Initiate Loop Initialization */
++                                        /* Procedure */
++#define MBC_GET_FCAL_MAP      0x63  /* Get FC/AL position map */
++#define MBC_GET_PORT_DATABASE     0x64  /* Get port database. */
++#define MBC_TARGET_RESET        0x66  /* Target reset. */
++#define MBC_GET_FIRMWARE_STATE    0x69  /* Get firmware state. */
++#define MBC_GET_PORT_NAME         0x6a  /* Get port name. */
++#define MBC_GET_LINK_STATUS       0x6b  /* Get link status. */
++#define MBC_LIP_RESET             0x6c  /* LIP reset. */
++#define MBC_SEND_SNS_COMMAND      0x6e  /* Send Simple Name Server command. */
++#define MBC_LOGIN_FABRIC_PORT     0x6f  /* Login fabric port. */
++#define MBC_LOGOUT_FABRIC_PORT    0x71  /* Logout fabric port. */
++#define MBC_LIP_FULL_LOGIN        0x72  /* Full login LIP. */
++#define       MBC_LOGIN_LOOP_PORT       0x74  /* Login Loop Port. */
++#define MBC_GET_PORT_LIST         0x75  /* Get port list. */
++#define       MBC_INITIALIZE_RECEIVE_QUEUE    0x77    /* Initialize receive queue */
++#define       MBC_SEND_FARP_REQ_COMMAND       0x78    /* FARP request. */
++#define       MBC_SEND_FARP_REPLY_COMMAND     0x79    /* FARP reply. */
++#define       MBC_PORT_LOOP_NAME_LIST         0x7C    /* Get port/node name list. */
++#define       MBC_SEND_LFA_COMMAND            0x7D    /* Send Loop Fabric Address */
++#define       MBC_LUN_RESET                   0x7E    /* Send LUN reset */
++
++/* Firmware return data sizes */
++#define FCAL_MAP_SIZE 128
++
++/* Mailbox bit definitions for out_mb and in_mb */
++#define       MBX_31          BIT_31
++#define       MBX_30          BIT_30
++#define       MBX_29          BIT_29
++#define       MBX_28          BIT_28
++#define       MBX_27          BIT_27
++#define       MBX_26          BIT_26
++#define       MBX_25          BIT_25
++#define       MBX_24          BIT_24
++#define       MBX_23          BIT_23
++#define       MBX_22          BIT_22
++#define       MBX_21          BIT_21
++#define       MBX_20          BIT_20
++#define       MBX_19          BIT_19
++#define       MBX_18          BIT_18
++#define       MBX_17          BIT_17
++#define       MBX_16          BIT_16
++#define       MBX_15          BIT_15
++#define       MBX_14          BIT_14
++#define       MBX_13          BIT_13
++#define       MBX_12          BIT_12
++#define       MBX_11          BIT_11
++#define       MBX_10          BIT_10
++#define       MBX_9           BIT_9
++#define       MBX_8           BIT_8
++#define       MBX_7           BIT_7
++#define       MBX_6           BIT_6
++#define       MBX_5           BIT_5
++#define       MBX_4           BIT_4
++#define       MBX_3           BIT_3
++#define       MBX_2           BIT_2
++#define       MBX_1           BIT_1
++#define       MBX_0           BIT_0
++
++/*
++ * Firmware state codes from get firmware state mailbox command
++ */
++#define FSTATE_CONFIG_WAIT      0
++#define FSTATE_WAIT_AL_PA       1
++#define FSTATE_WAIT_LOGIN       2
++#define FSTATE_READY            3
++#define FSTATE_LOSS_OF_SYNC     4
++#define FSTATE_ERROR            5
++#define FSTATE_REINIT           6
++#define FSTATE_NON_PART         7
++
++#define FSTATE_CONFIG_CORRECT      0
++#define FSTATE_P2P_RCV_LIP         1
++#define FSTATE_P2P_CHOOSE_LOOP     2
++#define FSTATE_P2P_RCV_UNIDEN_LIP  3
++#define FSTATE_FATAL_ERROR         4
++#define FSTATE_LOOP_BACK_CONN      5
++
++/*
++ * Port Database structure definition
++ * Little endian except where noted.
++ */
++#define       PORT_DATABASE_SIZE      128     /* bytes */
++typedef struct {
++      uint8_t options;
++      uint8_t control;
++      uint8_t master_state;
++      uint8_t slave_state;
++#define       PD_STATE_DISCOVERY                      0
++#define       PD_STATE_WAIT_DISCOVERY_ACK             1
++#define       PD_STATE_PORT_LOGIN                     2
++#define       PD_STATE_WAIT_PORT_LOGIN_ACK            3
++#define       PD_STATE_PROCESS_LOGIN                  4
++#define       PD_STATE_WAIT_PROCESS_LOGIN_ACK         5
++#define       PD_STATE_PORT_LOGGED_IN                 6
++#define       PD_STATE_PORT_UNAVAILABLE               7
++#define       PD_STATE_PROCESS_LOGOUT                 8
++#define       PD_STATE_WAIT_PROCESS_LOGOUT_ACK        9
++#define       PD_STATE_PORT_LOGOUT                    10
++#define       PD_STATE_WAIT_PORT_LOGOUT_ACK           11
++      uint8_t reserved[2];
++      uint8_t hard_address;
++      uint8_t reserved_1;
++      uint8_t port_id[4];
++      uint8_t node_name[8];                   /* Big endian. */
++      uint8_t port_name[8];                   /* Big endian. */
++      uint16_t execution_throttle;
++      uint16_t execution_count;
++      uint8_t reset_count;
++      uint8_t reserved_2;
++      uint16_t resource_allocation;
++      uint16_t current_allocation;
++      uint16_t queue_head;
++      uint16_t queue_tail;
++      uint16_t transmit_execution_list_next;
++      uint16_t transmit_execution_list_previous;
++      uint16_t common_features;
++      uint16_t total_concurrent_sequences;
++      uint16_t RO_by_information_category;
++      uint8_t recipient;
++      uint8_t initiator;
++      uint16_t receive_data_size;
++      uint16_t concurrent_sequences;
++      uint16_t open_sequences_per_exchange;
++      uint16_t lun_abort_flags;
++      uint16_t lun_stop_flags;
++      uint16_t stop_queue_head;
++      uint16_t stop_queue_tail;
++      uint16_t port_retry_timer;
++      uint16_t next_sequence_id;
++      uint16_t frame_count;
++      uint16_t PRLI_payload_length;
++      uint8_t prli_svc_param_word_0[2];       /* Big endian */
++                                              /* Bits 15-0 of word 0 */
++      uint8_t prli_svc_param_word_3[2];       /* Big endian */
++                                              /* Bits 15-0 of word 3 */
++      uint16_t loop_id;
++      uint16_t extended_lun_info_list_pointer;
++      uint16_t extended_lun_stop_list_pointer;
++} port_database_t;
++
++/*
++ * ISP Initialization Control Block.
++ */
++
++#define SO_DATA_RATE_1GB      0
++#define SO_DATA_RATE_2GB      1
++#define SO_DATA_RATE_AUTO     2
++
++/*
++ * ISP Initialization Control Block.
++ * Little endian except where noted.
++ */
++#define       ICB_VERSION 1
++typedef struct {
++      uint8_t  version;
++      uint8_t  reserved_1;
++
++      /*
++       * LSB BIT 0  = Enable Hard Loop Id
++       * LSB BIT 1  = Enable Fairness
++       * LSB BIT 2  = Enable Full-Duplex
++       * LSB BIT 3  = Enable Fast Posting
++       * LSB BIT 4  = Enable Target Mode
++       * LSB BIT 5  = Disable Initiator Mode
++       * LSB BIT 6  = Enable ADISC
++       * LSB BIT 7  = Enable Target Inquiry Data
++       *
++       * MSB BIT 0  = Enable PDBC Notify
++       * MSB BIT 1  = Non Participating LIP
++       * MSB BIT 2  = Descending Loop ID Search
++       * MSB BIT 3  = Acquire Loop ID in LIPA
++       * MSB BIT 4  = Stop PortQ on Full Status
++       * MSB BIT 5  = Full Login after LIP
++       * MSB BIT 6  = Node Name Option
++       * MSB BIT 7  = Ext IFWCB enable bit
++       */
++      uint8_t  firmware_options[2];
++
++      uint16_t frame_payload_size;
++      uint16_t max_iocb_allocation;
++      uint16_t execution_throttle;
++      uint8_t  retry_count;
++      uint8_t  retry_delay;                   /* unused */
++      uint8_t  port_name[WWN_SIZE];           /* Big endian. */
++      uint16_t hard_address;
++      uint8_t  inquiry_data;
++      uint8_t  login_timeout;
++      uint8_t  node_name[WWN_SIZE];           /* Big endian. */
++
++      uint16_t request_q_outpointer;
++      uint16_t response_q_inpointer;
++      uint16_t request_q_length;
++      uint16_t response_q_length;
++      uint32_t request_q_address[2];
++      uint32_t response_q_address[2];
++
++      uint16_t lun_enables;
++      uint8_t  command_resource_count;
++      uint8_t  immediate_notify_resource_count;
++      uint16_t timeout;
++      uint8_t  reserved_2[2];
++
++      /*
++       * LSB BIT 0 = Timer Operation mode bit 0
++       * LSB BIT 1 = Timer Operation mode bit 1
++       * LSB BIT 2 = Timer Operation mode bit 2
++       * LSB BIT 3 = Timer Operation mode bit 3
++       * LSB BIT 4 = Init Config Mode bit 0
++       * LSB BIT 5 = Init Config Mode bit 1
++       * LSB BIT 6 = Init Config Mode bit 2
++       * LSB BIT 7 = Enable Non part on LIHA failure
++       *
++       * MSB BIT 0 = Enable class 2
++       * MSB BIT 1 = Enable ACK0
++       * MSB BIT 2 =
++       * MSB BIT 3 =
++       * MSB BIT 4 = FC Tape Enable
++       * MSB BIT 5 = Enable FC Confirm
++       * MSB BIT 6 = Enable command queuing in target mode
++       * MSB BIT 7 = No Logo On Link Down
++       */
++      uint8_t  add_firmware_options[2];
++
++      uint8_t  response_accumulation_timer;
++      uint8_t  interrupt_delay_timer;
++
++      /*
++       * LSB BIT 0 = Enable Read xfr_rdy
++       * LSB BIT 1 = Soft ID only
++       * LSB BIT 2 =
++       * LSB BIT 3 =
++       * LSB BIT 4 = FCP RSP Payload [0]
++       * LSB BIT 5 = FCP RSP Payload [1] / Sbus enable - 2200
++       * LSB BIT 6 = Enable Out-of-Order frame handling
++       * LSB BIT 7 = Disable Automatic PLOGI on Local Loop
++       *
++       * MSB BIT 0 = Sbus enable - 2300
++       * MSB BIT 1 =
++       * MSB BIT 2 =
++       * MSB BIT 3 =
++       * MSB BIT 4 =
++       * MSB BIT 5 = enable 50 ohm termination
++       * MSB BIT 6 = Data Rate (2300 only)
++       * MSB BIT 7 = Data Rate (2300 only)
++       */
++      uint8_t  special_options[2];
++
++      uint8_t  reserved_3[26];
++} init_cb_t;
++
++/*
++ * ISP Get/Set Target Parameters mailbox command control flags.
++ */
++
++/*
++ * Get Link Status mailbox command return buffer.
++ */
++typedef struct {
++      uint32_t        link_fail_cnt;
++      uint32_t        loss_sync_cnt;
++      uint32_t        loss_sig_cnt;
++      uint32_t        prim_seq_err_cnt;
++      uint32_t        inval_xmit_word_cnt;
++      uint32_t        inval_crc_cnt;
++} link_stat_t;
++
++/*
++ * NVRAM Command values.
++ */
++#define NV_START_BIT            BIT_2
++#define NV_WRITE_OP             (BIT_26+BIT_24)
++#define NV_READ_OP              (BIT_26+BIT_25)
++#define NV_ERASE_OP             (BIT_26+BIT_25+BIT_24)
++#define NV_MASK_OP              (BIT_26+BIT_25+BIT_24)
++#define NV_DELAY_COUNT          10
++
++/*
++ * QLogic ISP2100, ISP2200 and ISP2300 NVRAM structure definition.
++ */
++typedef struct {
++      /*
++       * NVRAM header
++       */
++      uint8_t id[4];
++      uint8_t nvram_version;
++      uint8_t reserved_0;
++
++      /*
++       * NVRAM RISC parameter block
++       */
++      uint8_t parameter_block_version;
++      uint8_t reserved_1;
++
++      /*
++       * LSB BIT 0  = Enable Hard Loop Id
++       * LSB BIT 1  = Enable Fairness
++       * LSB BIT 2  = Enable Full-Duplex
++       * LSB BIT 3  = Enable Fast Posting
++       * LSB BIT 4  = Enable Target Mode
++       * LSB BIT 5  = Disable Initiator Mode
++       * LSB BIT 6  = Enable ADISC
++       * LSB BIT 7  = Enable Target Inquiry Data
++       *
++       * MSB BIT 0  = Enable PDBC Notify
++       * MSB BIT 1  = Non Participating LIP
++       * MSB BIT 2  = Descending Loop ID Search
++       * MSB BIT 3  = Acquire Loop ID in LIPA
++       * MSB BIT 4  = Stop PortQ on Full Status
++       * MSB BIT 5  = Full Login after LIP
++       * MSB BIT 6  = Node Name Option
++       * MSB BIT 7  = Ext IFWCB enable bit
++       */
++      uint8_t  firmware_options[2];
++
++      uint16_t frame_payload_size;
++      uint16_t max_iocb_allocation;
++      uint16_t execution_throttle;
++      uint8_t  retry_count;
++      uint8_t  retry_delay;                   /* unused */
++      uint8_t  port_name[WWN_SIZE];           /* Big endian. */
++      uint16_t hard_address;
++      uint8_t  inquiry_data;
++      uint8_t  login_timeout;
++      uint8_t  node_name[WWN_SIZE];           /* Big endian. */
++
++      /*
++       * LSB BIT 0 = Timer Operation mode bit 0
++       * LSB BIT 1 = Timer Operation mode bit 1
++       * LSB BIT 2 = Timer Operation mode bit 2
++       * LSB BIT 3 = Timer Operation mode bit 3
++       * LSB BIT 4 = Init Config Mode bit 0
++       * LSB BIT 5 = Init Config Mode bit 1
++       * LSB BIT 6 = Init Config Mode bit 2
++       * LSB BIT 7 = Enable Non part on LIHA failure
++       *
++       * MSB BIT 0 = Enable class 2
++       * MSB BIT 1 = Enable ACK0
++       * MSB BIT 2 =
++       * MSB BIT 3 =
++       * MSB BIT 4 = FC Tape Enable
++       * MSB BIT 5 = Enable FC Confirm
++       * MSB BIT 6 = Enable command queuing in target mode
++       * MSB BIT 7 = No Logo On Link Down
++       */
++      uint8_t  add_firmware_options[2];
++
++      uint8_t  response_accumulation_timer;
++      uint8_t  interrupt_delay_timer;
++
++      /*
++       * LSB BIT 0 = Enable Read xfr_rdy
++       * LSB BIT 1 = Soft ID only
++       * LSB BIT 2 =
++       * LSB BIT 3 =
++       * LSB BIT 4 = FCP RSP Payload [0]
++       * LSB BIT 5 = FCP RSP Payload [1] / Sbus enable - 2200
++       * LSB BIT 6 = Enable Out-of-Order frame handling
++       * LSB BIT 7 = Disable Automatic PLOGI on Local Loop
++       *
++       * MSB BIT 0 = Sbus enable - 2300
++       * MSB BIT 1 =
++       * MSB BIT 2 =
++       * MSB BIT 3 =
++       * MSB BIT 4 =
++       * MSB BIT 5 = enable 50 ohm termination
++       * MSB BIT 6 = Data Rate (2300 only)
++       * MSB BIT 7 = Data Rate (2300 only)
++       */
++      uint8_t  special_options[2];
++
++      /* Reserved for expanded RISC parameter block */
++      uint8_t reserved_2[24];
++
++      /*
++       * LSB BIT 0 = Output Swing 1G bit 0
++       * LSB BIT 1 = Output Swing 1G bit 1
++       * LSB BIT 2 = Output Swing 1G bit 2
++       * LSB BIT 3 = Output Emphasis 1G bit 0
++       * LSB BIT 4 = Output Emphasis 1G bit 1
++       * LSB BIT 5 = Output Swing 2G bit 0
++       * LSB BIT 6 = Output Swing 2G bit 1
++       * LSB BIT 7 = Output Swing 2G bit 2
++       *            
++       * MSB BIT 0 = Output Emphasis 2G bit 0
++       * MSB BIT 1 = Output Emphasis 2G bit 1
++       * MSB BIT 2 = Output Enable
++       * MSB BIT 3 =
++       * MSB BIT 4 =
++       * MSB BIT 5 =
++       * MSB BIT 6 =
++       * MSB BIT 7 =
++       */
++      uint8_t seriallink_options[2];
++
++      /*
++       * NVRAM host parameter block
++       *
++       * LSB BIT 0 = Enable spinup delay
++       * LSB BIT 1 = Disable BIOS
++       * LSB BIT 2 = Enable Memory Map BIOS
++       * LSB BIT 3 = Enable Selectable Boot
++       * LSB BIT 4 = Disable RISC code load
++       * LSB BIT 5 = Set cache line size 1
++       * LSB BIT 6 = PCI Parity Disable
++       * LSB BIT 7 = Enable extended logging
++       *
++       * MSB BIT 0 = Enable 64bit addressing
++       * MSB BIT 1 = Enable lip reset
++       * MSB BIT 2 = Enable lip full login
++       * MSB BIT 3 = Enable target reset
++       * MSB BIT 4 = Enable database storage
++       * MSB BIT 5 = Enable cache flush read
++       * MSB BIT 6 = Enable database load
++       * MSB BIT 7 = Enable alternate WWN
++       */
++      uint8_t host_p[2];
++
++      uint8_t boot_node_name[WWN_SIZE];
++      uint8_t boot_lun_number;
++      uint8_t reset_delay;
++      uint8_t port_down_retry_count;
++      uint8_t boot_id_number;
++      uint16_t max_luns_per_target;
++      uint8_t fcode_boot_port_name[WWN_SIZE];
++      uint8_t alternate_port_name[WWN_SIZE];
++      uint8_t alternate_node_name[WWN_SIZE];
++
++      /*
++       * BIT 0 = Boot Zoning
++       * BIT 1 = Alt-Boot Enable
++       * BIT 2 = Report SCSI Path
++       * BIT 3 = unused
++       * BIT 4 = unused
++       * BIT 5 = unused
++       * BIT 6 = unused
++       * BIT 7 = unused
++       */
++      uint8_t efi_parameters;
++
++      uint8_t link_down_timeout;
++
++      uint8_t adapter_id_0[4];
++      uint8_t adapter_id_1[4];
++      uint8_t adapter_id_2[4];
++      uint8_t adapter_id_3[4];
++
++      uint8_t alt1_boot_node_name[WWN_SIZE];
++      uint16_t alt1_boot_lun_number;
++      uint8_t alt2_boot_node_name[WWN_SIZE];
++      uint16_t alt2_boot_lun_number;
++      uint8_t alt3_boot_node_name[WWN_SIZE];
++      uint16_t alt3_boot_lun_number;
++      uint8_t alt4_boot_node_name[WWN_SIZE];
++      uint16_t alt4_boot_lun_number;
++      uint8_t alt5_boot_node_name[WWN_SIZE];
++      uint16_t alt5_boot_lun_number;
++      uint8_t alt6_boot_node_name[WWN_SIZE];
++      uint16_t alt6_boot_lun_number;
++      uint8_t alt7_boot_node_name[WWN_SIZE];
++      uint16_t alt7_boot_lun_number;
++
++      uint8_t reserved_3[2];
++
++      uint8_t oem_id;
++      uint8_t oem_specific[31];
++
++      /*
++       * NVRAM Adapter Features offset 232-239
++       *
++       * LSB BIT 0 = External GBIC
++       * LSB BIT 1 = Risc RAM parity
++       * LSB BIT 2 = Buffer Plus Module
++       * LSB BIT 3 = Multi Chip Adapter
++       * LSB BIT 4 = Internal connector
++       * LSB BIT 5 =
++       * LSB BIT 6 =
++       * LSB BIT 7 =
++       *
++       * MSB BIT 0 =
++       * MSB BIT 1 =
++       * MSB BIT 2 =
++       * MSB BIT 3 =
++       * MSB BIT 4 =
++       * MSB BIT 5 =
++       * MSB BIT 6 =
++       * MSB BIT 7 =
++       */
++      uint8_t adapter_features[2];
++
++      uint8_t reserved_4[16];
++
++      /* Subsystem vendor ID for ISP2200 */
++      uint16_t subsystem_vendor_id_2200;
++
++      /* Subsystem device ID for ISP2200 */
++      uint16_t subsystem_device_id_2200;
++
++      uint8_t  reserved_5;
++      uint8_t  checksum;
++} nvram_t;
++
++
++/*
++ * ISP queue - command entry structure definition.
++ */
++#define MAX_CMDSZ   16                        /* SCSI maximum CDB size. */
++typedef struct {
++      uint8_t         entry_type;     /* Entry type. */
++#define COMMAND_TYPE  0x11            /* Command entry */
++      uint8_t         entry_count;    /* Entry count. */
++      uint8_t         sys_define;     /* System defined. */
++      uint8_t         entry_status;   /* Entry Status. */
++      uint32_t        handle;         /* System handle. */
++#if defined(EXTENDED_IDS)
++      uint16_t        target;         /* SCSI ID */
++#else
++      uint8_t         reserved;
++      uint8_t         target;         /* SCSI ID */
++#endif
++      uint16_t        lun;            /* SCSI LUN */
++      uint16_t        control_flags;  /* Control flags. */
++#define CF_HEAD_TAG   BIT_1
++#define CF_ORDERED_TAG        BIT_2
++#define CF_SIMPLE_TAG BIT_3
++#define CF_READ               BIT_5
++#define CF_WRITE      BIT_6
++      uint16_t        reserved_1;
++      uint16_t        timeout;        /* Command timeout. */
++      uint16_t        dseg_count;     /* Data segment count. */
++      uint8_t         scsi_cdb[MAX_CMDSZ];    /* SCSI command words. */
++      uint32_t        byte_count;     /* Total byte count. */
++      uint32_t        dseg_0_address; /* Data segment 0 address. */
++      uint32_t        dseg_0_length;  /* Data segment 0 length. */
++      uint32_t        dseg_1_address; /* Data segment 1 address. */
++      uint32_t        dseg_1_length;  /* Data segment 1 length. */
++      uint32_t        dseg_2_address; /* Data segment 2 address. */
++      uint32_t        dseg_2_length;  /* Data segment 2 length. */
++} cmd_entry_t;
++
++/*
++ * ISP queue - 64-Bit addressing, command entry structure definition.
++ */
++#define COMMAND_A64_TYPE      0x19    /* Command A64 entry */
++typedef struct {
++      uint8_t         entry_type;     /* Entry type. */
++      uint8_t         entry_count;    /* Entry count. */
++      uint8_t         sys_define;     /* System defined. */
++      uint8_t         entry_status;   /* Entry Status. */
++      uint32_t        handle;         /* System handle. */
++#if defined(EXTENDED_IDS)
++      uint16_t        target;         /* SCSI ID */
++#else
++      uint8_t         reserved;
++      uint8_t         target;         /* SCSI ID */
++#endif
++      uint16_t        lun;            /* SCSI LUN */
++      uint16_t        control_flags;  /* Control flags. */
++      uint16_t        reserved_1;
++      uint16_t        timeout;        /* Command timeout. */
++      uint16_t        dseg_count;     /* Data segment count. */
++      uint8_t         scsi_cdb[MAX_CMDSZ];    /* SCSI command words. */
++      uint32_t        byte_count;     /* Total byte count. */
++      uint32_t        dseg_0_address[2];      /* Data segment 0 address. */
++      uint32_t        dseg_0_length;          /* Data segment 0 length. */
++      uint32_t        dseg_1_address[2];      /* Data segment 1 address. */
++      uint32_t        dseg_1_length;          /* Data segment 1 length. */
++} cmd_a64_entry_t, request_t;
++
++/*
++ * ISP queue - continuation entry structure definition.
++ */
++#define CONTINUE_TYPE         0x02    /* Continuation entry. */
++typedef struct {
++      uint8_t         entry_type;     /* Entry type. */
++      uint8_t         entry_count;    /* Entry count. */
++      uint8_t         sys_define;     /* System defined. */
++      uint8_t         entry_status;   /* Entry Status. */
++      uint32_t        reserved;
++      uint32_t        dseg_0_address; /* Data segment 0 address. */
++      uint32_t        dseg_0_length;  /* Data segment 0 length. */
++      uint32_t        dseg_1_address; /* Data segment 1 address. */
++      uint32_t        dseg_1_length;  /* Data segment 1 length. */
++      uint32_t        dseg_2_address; /* Data segment 2 address. */
++      uint32_t        dseg_2_length;  /* Data segment 2 length. */
++      uint32_t        dseg_3_address; /* Data segment 3 address. */
++      uint32_t        dseg_3_length;  /* Data segment 3 length. */
++      uint32_t        dseg_4_address; /* Data segment 4 address. */
++      uint32_t        dseg_4_length;  /* Data segment 4 length. */
++      uint32_t        dseg_5_address; /* Data segment 5 address. */
++      uint32_t        dseg_5_length;  /* Data segment 5 length. */
++      uint32_t        dseg_6_address; /* Data segment 6 address. */
++      uint32_t        dseg_6_length;  /* Data segment 6 length. */
++} cont_entry_t;
++
++/*
++ * ISP queue - 64-Bit addressing, continuation entry structure definition.
++ */
++#define CONTINUE_A64_TYPE     0x0A    /* Continuation A64 entry. */
++typedef struct {
++      uint8_t         entry_type;     /* Entry type. */
++      uint8_t         entry_count;    /* Entry count. */
++      uint8_t         sys_define;     /* System defined. */
++      uint8_t         entry_status;   /* Entry Status. */
++      uint32_t        dseg_0_address[2]; /* Data segment 0 address. */
++      uint32_t        dseg_0_length;  /* Data segment 0 length. */
++      uint32_t        dseg_1_address[2]; /* Data segment 1 address. */
++      uint32_t        dseg_1_length;  /* Data segment 1 length. */
++      uint32_t        dseg_2_address[2]; /* Data segment 2 address. */
++      uint32_t        dseg_2_length;  /* Data segment 2 length. */
++      uint32_t        dseg_3_address[2]; /* Data segment 3 address. */
++      uint32_t        dseg_3_length;  /* Data segment 3 length. */
++      uint32_t        dseg_4_address[2]; /* Data segment 4 address. */
++      uint32_t        dseg_4_length;  /* Data segment 4 length. */
++} cont_a64_entry_t;
++
++/*
++ * ISP queue - status entry structure definition.
++ */
++#define STATUS_TYPE           0x03    /* Status entry. */
++#define STS_SENSE_BUF_LEN     32
++typedef struct {
++      uint8_t         entry_type;     /* Entry type. */
++      uint8_t         entry_count;    /* Entry count. */
++      uint8_t         sys_define;     /* System defined. */
++      uint8_t         entry_status;   /* Entry Status. */
++#define RF_INV_E_ORDER        BIT_5           /* Invalid entry order. */
++#define RF_INV_E_COUNT        BIT_4           /* Invalid entry count. */
++#define RF_INV_E_PARAM        BIT_3           /* Invalid entry parameter. */
++#define RF_INV_E_TYPE BIT_2           /* Invalid entry type. */
++#define RF_BUSY               BIT_1           /* Busy */
++      uint32_t        handle;         /* System handle. */
++      uint16_t        scsi_status;    /* SCSI status. */
++      uint16_t        comp_status;    /* Completion status. */
++      uint16_t        state_flags;    /* State flags. */
++      uint16_t        status_flags;   /* Status flags. */
++#define IOCBSTAT_SF_LOGO BIT_13               /* Logo after 2 abts w/no */
++                                      /* response (2 sec) */
++      uint16_t        rsp_info_len;   /* Response Info Length. */
++      uint16_t        req_sense_length; /* Request sense data length. */
++      uint32_t        residual_length;  /* Residual transfer length. */
++      uint8_t         rsp_info[8];    /* FCP response information. */
++                                      /* Request sense data. */
++      uint8_t         req_sense_data[STS_SENSE_BUF_LEN];
++} sts_entry_t, response_t;
++
++/*
++ * ISP queue - marker entry structure definition.
++ */
++#define MARKER_TYPE   0x04            /* Marker entry. */
++typedef struct {
++      uint8_t         entry_type;     /* Entry type. */
++      uint8_t         entry_count;    /* Entry count. */
++      uint8_t         sys_define;     /* System defined. */
++      uint8_t         entry_status;   /* Entry Status. */
++      uint32_t        sys_define_2;   /* System defined. */
++#if defined(EXTENDED_IDS)
++      uint16_t        target;         /* SCSI ID */
++#else
++      uint8_t         reserved;
++      uint8_t         target;         /* SCSI ID */
++#endif
++      uint8_t         modifier;       /* Modifier (7-0). */
++#define MK_SYNC_ID_LUN        0               /* Synchronize ID/LUN */
++#define MK_SYNC_ID    1               /* Synchronize ID */
++#define MK_SYNC_ALL   2               /* Synchronize all ID/LUN */
++#define MK_SYNC_LIP   3               /* Synchronize all ID/LUN, */
++                                      /* clear port changed, */
++                                      /* use sequence number. */
++      uint8_t         reserved_1;
++      uint16_t        sequence_number; /* Sequence number of event */
++      uint16_t        lun;            /* SCSI LUN */
++      uint8_t         reserved_2[48];
++} mrk_entry_t;
++
++/*
++ * ISP queue - Status Contination entry structure definition.
++ */
++#define STATUS_CONT_TYPE      0x10    /* Status contination entry */
++#define EXT_STS_SENSE_BUF_LEN 60
++typedef struct {
++      uint8_t         entry_type;     /* Entry type. */
++      uint8_t         entry_count;    /* Entry count. */
++      uint8_t         reserved;
++      uint8_t         entry_status;   /* Entry Status. */
++                                      /* Extended sense data. */
++      uint8_t         req_sense_data[EXT_STS_SENSE_BUF_LEN];   
++} sts_cont_entry_t;
++
++/*
++ * ISP queue - Management Server entry structure definition.
++ */
++#define MS_IOCB_TYPE          0x29    /* Management Server IOCB entry */
++typedef struct {
++      uint8_t         entry_type;     /* Entry type. */
++      uint8_t         entry_count;    /* Entry count. */
++      uint8_t         sys_define;     /* System defined. */
++      uint8_t         entry_status;   /* Entry Status. */
++      uint32_t        handle1;        /* System handle. */
++#if defined(EXTENDED_IDS)
++      uint16_t        loop_id;
++#else
++      uint8_t         reserved;
++      uint8_t         loop_id;
++#endif
++      uint16_t        status;
++      uint16_t        control_flags;  /* Control flags. */
++      uint16_t        reserved2;
++      uint16_t        timeout;
++      uint16_t        cmd_dsd_count;
++      uint16_t        total_dsd_count;
++      uint8_t         type;
++      uint8_t         r_ctl;
++      uint16_t        rx_id;
++      uint16_t        reserved3;
++      uint32_t        handle2;
++      uint32_t        rsp_bytecount;
++      uint32_t        req_bytecount;
++      uint32_t        dseg_req_address[2]; /* Data segment 0 address. */
++      uint32_t        dseg_req_length;     /* Data segment 0 length. */
++      uint32_t        dseg_rsp_address[2]; /* Data segment 1 address. */
++      uint32_t        dseg_rsp_length;     /* Data segment 1 length. */
++} ms_iocb_entry_t;
++
++
++/*
++ * ISP queue - Mailbox Command entry structure definition.
++ */
++#define ET_MAILBOX_COMMAND    0x39
++struct mbx_entry {
++      uint8_t         entry_type;
++
++      uint8_t         entry_count;
++      uint8_t         sys_define1;
++      /* Use sys_define1 for source type */
++#define SOURCE_SCSI   0x00
++#define SOURCE_IP     0x01
++#define SOURCE_VI     0x02
++#define SOURCE_SCTP   0x03
++#define SOURCE_MP     0x04
++#define SOURCE_MPIOCTL        0x05
++
++      uint8_t         entry_status;
++
++      uint32_t        handle;
++#if defined(EXTENDED_IDS)
++      uint16_t        loop_id;
++#else
++      uint8_t         reserved_1;
++      uint8_t         loop_id;
++#endif
++
++      uint16_t        status;
++      uint16_t        state_flags;
++      uint16_t        status_flags;
++      uint16_t        sys_define2[4];
++      uint16_t        mb0;
++      /* Mailbox command completion status */
++#define MBS_PORT_ID_IN_USE            0x4007
++#define MBS_LOOP_ID_IN_USE            0x4008
++#define MBS_ALL_LOOP_IDS_IN_USE               0x4009
++#define MBS_NAME_SERVER_NOT_LOGGED_IN 0x400A
++
++      uint16_t        mb1;
++      /* Fabric login mailbox command option bits */
++#define MBC_NO_PLOGI_IF_LOGGED_IN     0x01
++#define MBC_NO_PROCESS_LOGIN          0x02
++
++      uint16_t        mb2;
++      uint16_t        mb3;
++      uint16_t        mb6;
++      uint16_t        mb7;
++#if defined(EXTENDED_IDS)
++      uint16_t        mb9;
++      uint16_t        mb10;
++      uint32_t        reserved_2[6];
++#else
++      uint32_t        reserved_2[7];
++#endif
++};
++
++/*
++ * ISP request and response queue entry sizes
++ */
++#define RESPONSE_ENTRY_SIZE   (sizeof(response_t))
++#define REQUEST_ENTRY_SIZE    (sizeof(request_t))
++
++/*
++ * ISP status entry - completion status definitions.
++ */
++#define CS_COMPLETE           0x0     /* No errors */
++#define CS_INCOMPLETE         0x1     /* Incomplete transfer of cmd. */
++#define CS_DMA                        0x2     /* A DMA direction error. */
++#define CS_TRANSPORT          0x3     /* Transport error. */
++#define CS_RESET              0x4     /* SCSI bus reset occurred */
++#define CS_ABORTED            0x5     /* System aborted command. */
++#define CS_TIMEOUT            0x6     /* Timeout error. */
++#define CS_DATA_OVERRUN               0x7     /* Data overrun. */
++#define CS_DATA_UNDERRUN      0x15    /* Data Underrun. */
++#define CS_ABORT_MSG          0xE     /* Target rejected abort msg. */
++#define CS_DEV_RESET_MSG      0x12    /* Target rejected dev rst msg. */
++#define CS_PORT_UNAVAILABLE   0x28    /* Port unavailable (selection timeout) */
++#define CS_PORT_LOGGED_OUT    0x29    /* Port Logged Out */
++#define CS_PORT_CONFIG_CHG    0x2A    /* Port Configuration Changed */
++#define CS_PORT_BUSY          0x2B    /* Port Busy */
++#define CS_BAD_PAYLOAD                0x80    /* Driver defined */
++#define CS_UNKNOWN            0x81    /* Driver defined */
++#define CS_RETRY              0x82    /* Driver defined */
++#define CS_QUEUE_FULL         0x1c    /* Target queue full*/
++
++/*
++ * ISP status entry - SCSI status byte bit definitions.
++ */
++#define SS_MASK                       0xfff /* Mask off reserved bits BIT_12-BIT_15*/
++#define SS_RESIDUAL_UNDER     BIT_11
++#define SS_RESIDUAL_OVER      BIT_10
++#define SS_SENSE_LEN_VALID    BIT_9
++#if defined(ISP2100)
++#define SS_RESIDUAL_LEN_VALID BIT_8
++#else
++#define SS_RESPONSE_INFO_LEN_VALID    BIT_8
++#endif
++
++#define SS_RESERVE_CONFLICT   (BIT_4 | BIT_3)
++#define SS_BUSY_CONDITION     BIT_3
++#define SS_CONDITION_MET      BIT_2
++#define SS_CHECK_CONDITION    BIT_1
++
++/*
++ * 24 bit port ID type definition.
++ */
++typedef union {
++      uint32_t        b24 : 24;
++
++      struct {
++              uint8_t d_id[3];
++              uint8_t rsvd_1;
++      } r;
++
++      struct {
++              uint8_t al_pa;
++              uint8_t area;
++              uint8_t domain;
++              uint8_t rsvd_1;
++      } b;
++} port_id_t;
++
++/*
++ * Switch info gathering structure.
++ */
++typedef struct {
++      port_id_t       d_id;
++      uint8_t         node_name[WWN_SIZE];
++      uint8_t         port_name[WWN_SIZE];
++      uint32_t        type;
++#define SW_TYPE_SCSI  BIT_0
++#define SW_TYPE_IP    BIT_1
++} sw_info_t;
++
++//TODO This should be removed (simplified fcport list)
++typedef struct
++{
++    port_id_t d_id;
++    uint8_t   name[WWN_SIZE];
++    uint8_t   wwn[WWN_SIZE];          /* port name */
++    uint16_t  loop_id;
++    uint16_t   flag;
++  /* flags bits defined as follows */
++#define DEV_PUBLIC          BIT_0
++#define DEV_LUNMASK_SET     BIT_1  /* some LUNs masked for this device */
++#define       DEV_TAPE_DEVICE         BIT_2
++#define       DEV_RELOGIN             BIT_3
++#define       DEV_PORT_DOWN       BIT_4
++#define       DEV_CONFIGURED          BIT_5
++#define       DEV_ABSENCE             BIT_6
++#define       DEV_RETURN              BIT_7
++#define       DEV_INITIATOR           BIT_8
++#define       DEV_FLAG_VSA            BIT_9
++      int                     port_login_retry_count;
++    uint8_t  port_timer;
++}fcdev_t;
++
++/* New device name list struct; used in configure_fabric. */
++struct new_dev {
++    port_id_t  d_id;
++    uint8_t    name[WWN_SIZE];
++    uint8_t    wwn[WWN_SIZE];          /* port name */
++};
++#define LOGOUT_PERFORMED  0x01
++
++
++/*
++ * Inquiry command structure.
++ */
++#define INQ_SCSI_OPCODE               0x12
++#define       INQ_DATA_SIZE           36
++
++/*
++ * Inquiry mailbox IOCB packet definition.
++ */
++typedef struct {
++      union {
++              cmd_a64_entry_t cmd;
++              sts_entry_t     rsp;
++      } p;
++      uint8_t         inq[INQ_DATA_SIZE];
++} inq_cmd_rsp_t;
++
++/*
++ * Report LUN command structure.
++ */
++#define RPT_LUN_SCSI_OPCODE   0xA0
++#define CHAR_TO_SHORT(a, b)   (uint16_t)((uint8_t)b << 8 | (uint8_t)a)
++
++typedef struct {
++      uint32_t        len;
++      uint32_t        rsrv;
++} rpt_hdr_t;
++
++typedef struct {
++      struct {
++              uint8_t b : 6;
++              uint8_t address_method : 2;
++      } msb;
++      uint8_t         lsb;
++      uint8_t         unused[6];
++} rpt_lun_t;
++
++typedef struct {
++      rpt_hdr_t       hdr;
++      rpt_lun_t       lst[MAX_LUNS];
++} rpt_lun_lst_t;
++
++/*
++ * Report Lun mailbox IOCB packet definition.
++ */
++typedef struct {
++      union {
++              cmd_a64_entry_t cmd;
++              sts_entry_t rsp;
++      } p;
++      rpt_lun_lst_t list;
++} rpt_lun_cmd_rsp_t;
++
++//TODO Continue formatting
++/*
++ * SCSI Target Queue structure
++ */
++typedef struct os_tgt {
++      struct os_lun           *olun[MAX_LUNS]; /* LUN context pointer. */
++      uint8_t                 port_down_retry_count;
++      struct scsi_qla_host    *ha;
++      uint32_t                down_timer;
++
++      /* Persistent binding information */
++      port_id_t               d_id;
++      uint8_t                 node_name[WWN_SIZE];
++      uint8_t                 port_name[WWN_SIZE];
++      struct fc_port          *vis_port;
++
++      uint8_t                 flags;
++#define       TGT_BUSY                BIT_0           /* Reached hi-water mark */
++#define       TGT_TAGGED_QUEUE        BIT_1           /* Tagged queuing. */
++} os_tgt_t;
++
++/*
++ * SCSI LUN Queue structure
++ */
++typedef struct os_lun {
++      struct fc_lun   *fclun;         /* FC LUN context pointer. */
++      spinlock_t      q_lock;       /* Lun Lock */
++
++      u_long          io_cnt;     /* total xfer count since boot */
++      u_long          out_cnt;    /* total outstanding IO count */
++      u_long          w_cnt;      /* total writes */
++      u_long          r_cnt;      /* total reads */
++      u_long          avg_time;      /*  */
++
++      unsigned long   q_flag;
++#define       LUN_MPIO_BUSY           2       /* Lun is changing paths  */
++#define       LUN_SCSI_SCAN_DONE      BIT_3   /* indicates the scsi scan is done */
++#define       LUN_EXEC_DELAYED        7       /* Lun execution is delayed */
++
++      u_long          q_timeout;           /* total command timeouts */
++      atomic_t        q_timer;  /* suspend timer */
++      uint32_t        q_count;        /* current count */
++      uint32_t        q_max;          /* maxmum count lun can be suspended */
++      uint8_t         q_state;        /* lun State */
++#define       LUN_STATE_READY 1       /* indicates the lun is ready for i/o */
++#define       LUN_STATE_RUN   2       /* indicates the lun has a timer running */
++#define       LUN_STATE_WAIT  3       /* indicates the lun is suspended */
++#define       LUN_STATE_TIMEOUT  4    /* indicates the lun has timed out */
++
++} os_lun_t;
++
++
++/* LUN BitMask structure definition, array of 32bit words,
++ * 1 bit per lun.  When bit == 1, the lun is masked.
++ * Most significant bit of mask[0] is lun 0, bit 24 is lun 7.
++ */
++typedef struct lun_bit_mask {
++      /* Must allocate at least enough bits to accomodate all LUNs */
++#if ((MAX_FIBRE_LUNS & 0x7) == 0)
++      UINT8   mask[MAX_FIBRE_LUNS >> 3];
++#else
++      uint8_t mask[(MAX_FIBRE_LUNS + 8) >> 3];
++#endif
++} lun_bit_mask_t;
++
++/*
++ * Fibre channel port structure.
++ */
++typedef struct fc_port {
++      struct list_head        list;
++
++      struct list_head        fcluns;
++
++      struct scsi_qla_host    *ha;
++      struct scsi_qla_host    *vis_ha; /* only used when suspending lun */
++      port_id_t               d_id;
++      uint16_t                loop_id;
++      uint16_t                old_loop_id;
++      int16_t                 lun_cnt;
++      int16_t                 dev_id; /* index in fc_dev table */
++#define FC_NO_LOOP_ID         0x100
++      uint8_t                 node_name[WWN_SIZE];    /* Big Endian. */
++      uint8_t                 port_name[WWN_SIZE];    /* Big Endian. */
++      uint8_t                 mp_byte;        /* multi-path byte (not used) */
++      uint8_t         cur_path;               /* current path id */
++      int                     port_login_retry_count;
++      int             login_retry;
++      atomic_t                state;          /* port state */
++#define FC_DEVICE_DEAD                1
++#define FC_DEVICE_LOST                2
++#define FC_ONLINE             3
++#define FC_LOGIN_NEEDED               4
++
++      uint8_t                 flags;
++#define       FC_FABRIC_DEVICE        BIT_0
++#define       FC_TAPE_DEVICE          BIT_1
++#define       FC_INITIATOR_DEVICE     BIT_2
++#define       FC_CONFIG               BIT_3
++#define       FC_VSA                  BIT_4
++#define       FC_HD_DEVICE            BIT_5
++#define       FC_SUPPORT_RPT_LUNS     BIT_6
++      atomic_t        port_down_timer;
++      lun_bit_mask_t  lun_mask;
++} fc_port_t;
++
++/*
++ * Fibre channel LUN structure.
++ */
++typedef struct fc_lun {
++        struct list_head      list;
++
++      fc_port_t               *fcport;
++      uint16_t                lun;
++      uint8_t                 max_path_retries;
++      uint8_t                 flags;
++#define       FC_DISCON_LUN           BIT_0
++} fc_lun_t;
++
++typedef struct
++{
++    uint8_t   in_use;
++}fabricid_t;
++
++typedef struct {
++      struct list_head        list;
++
++      uint8_t         node_name[WWN_SIZE];
++      uint8_t         port_name[WWN_SIZE];
++      port_id_t       d_id;
++      uint16_t        loop_id;
++} fc_initiator_t;
++
++/*
++ * Registered State Change Notification structures.
++ */
++typedef struct {
++    port_id_t d_id;
++    uint8_t format;
++} rscn_t;
++
++/*
++ * Flash Database structures.
++ */
++#define FLASH_DATABASE_0        0x1c000
++#define FLASH_DATABASE_1        0x18000
++#define FLASH_DATABASE_VERSION  1
++
++typedef struct
++{
++    uint32_t seq;
++    uint8_t  version;
++    uint8_t  checksum;
++    uint16_t size;
++    uint8_t  spares[8];
++}flash_hdr_t;
++
++typedef struct
++{
++    uint8_t name[WWN_SIZE];
++    uint8_t  spares[8];
++}flash_node_t;
++
++typedef struct
++{
++    flash_hdr_t  hdr;
++    flash_node_t node[MAX_FIBRE_DEVICES];
++}flash_database_t;
++//TODO End formatting
++
++/*
++ * FC-CT interface
++ *
++ * NOTE: All structures are in big-endian in form.
++ */
++
++#define CT_REJECT_RESPONSE    0x8001
++#define CT_ACCEPT_RESPONSE    0x8002
++
++#define NS_N_PORT_TYPE        0x01
++#define NS_NL_PORT_TYPE       0x02
++#define NS_NX_PORT_TYPE       0x7F
++
++#define       GA_NXT_CMD      0x100
++#define       GA_NXT_REQ_SIZE (16 + 4)
++#define       GA_NXT_RSP_SIZE (16 + 620)
++
++#define       GID_PT_CMD      0x1A1
++#define       GID_PT_REQ_SIZE (16 + 4)
++#define       GID_PT_RSP_SIZE (16 + (MAX_FIBRE_DEVICES * 4))
++
++#define       GPN_ID_CMD      0x112
++#define       GPN_ID_REQ_SIZE (16 + 4)
++#define       GPN_ID_RSP_SIZE (16 + 8)
++
++#define       GNN_ID_CMD      0x113
++#define       GNN_ID_REQ_SIZE (16 + 4)
++#define       GNN_ID_RSP_SIZE (16 + 8)
++
++#define       GFT_ID_CMD      0x117
++#define       GFT_ID_REQ_SIZE (16 + 4)
++#define       GFT_ID_RSP_SIZE (16 + 32)
++
++#define       RFT_ID_CMD      0x217
++#define       RFT_ID_REQ_SIZE (16 + 4 + 32)
++#define       RFT_ID_RSP_SIZE 16
++
++#define       RFF_ID_CMD      0x21F
++#define       RFF_ID_REQ_SIZE (16 + 4 + 2 + 1 + 1)
++#define       RFF_ID_RSP_SIZE 16
++
++#define       RNN_ID_CMD      0x213
++#define       RNN_ID_REQ_SIZE (16 + 4 + 8)
++#define       RNN_ID_RSP_SIZE 16
++
++#define       RSNN_NN_CMD      0x239
++#define       RSNN_NN_REQ_SIZE (16 + 8 + 1 + 255)
++#define       RSNN_NN_RSP_SIZE 16
++
++/* CT command header -- request/response common fields */
++struct ct_cmd_hdr {
++      uint8_t revision;
++      uint8_t in_id[3];
++      uint8_t gs_type;
++      uint8_t gs_subtype;
++      uint8_t options;
++      uint8_t reserved;
++};
++
++/* CT command request */
++struct ct_sns_req {
++      struct ct_cmd_hdr header;
++      uint16_t        command;
++      uint16_t        max_rsp_size;
++      uint32_t        reserved;
++
++      union {
++              /* GA_NXT, GPN_ID, GNN_ID, GFT_ID */
++              struct {
++                      uint8_t reserved;
++                      uint8_t port_id[3];
++              } port_id;
++
++              struct {
++                      uint8_t port_type;
++                      uint8_t domain;
++                      uint8_t area;
++                      uint8_t reserved;
++              } gid_pt;
++
++              struct {
++                      uint8_t reserved;
++                      uint8_t port_id[3];
++                      uint8_t fc4_types[32];
++              } rft_id;
++
++              struct {
++                      uint8_t reserved;
++                      uint8_t port_id[3];
++                      uint16_t reserved2;
++                      uint8_t fc4_feature;
++                      uint8_t fc4_type;
++              } rff_id;
++
++              struct {
++                      uint8_t reserved;
++                      uint8_t port_id[3];
++                      uint8_t node_name[8];
++              } rnn_id;
++
++              struct {
++                      uint8_t node_name[8];
++                      uint8_t name_len;
++                      uint8_t sym_node_name[255];
++              } rsnn_nn;
++      } req;
++};
++
++/* CT command response header */
++struct ct_rsp_hdr {
++      struct ct_cmd_hdr header;
++      uint16_t        response;
++      uint16_t        residual;
++      uint8_t         reserved;
++      uint8_t         reason_code;
++      uint8_t         explanation_code;
++      uint8_t         vendor_unique;
++};
++
++struct ct_sns_gid_pt_data {
++      uint8_t control_byte;
++      uint8_t port_id[3];
++};
++
++struct ct_sns_rsp {
++      struct ct_rsp_hdr header;
++
++      union {
++              struct {
++                      uint8_t port_type;
++                      uint8_t port_id[3];
++                      uint8_t port_name[8];
++                      uint8_t sym_port_name_len;
++                      uint8_t sym_port_name[255];
++                      uint8_t node_name[8];
++                      uint8_t sym_node_name_len;
++                      uint8_t sym_node_name[255];
++                      uint8_t init_proc_assoc[8];
++                      uint8_t node_ip_addr[16];
++                      uint8_t class_of_service[4];
++                      uint8_t fc4_types[32];
++                      uint8_t ip_address[16];
++                      uint8_t fabric_port_name[8];
++                      uint8_t reserved;
++                      uint8_t hard_address[3];
++              } ga_nxt;
++
++              struct {
++                      struct ct_sns_gid_pt_data entries[MAX_FIBRE_DEVICES];
++              } gid_pt;
++
++              struct {
++                      uint8_t port_name[8];
++              } gpn_id;
++
++              struct {
++                      uint8_t node_name[8];
++              } gnn_id;
++
++              struct {
++                      uint8_t fc4_types[32];
++              } gft_id;
++      } rsp;
++};
++
++struct ct_sns_pkt {
++      union {
++              struct ct_sns_req req;
++              struct ct_sns_rsp rsp;
++      } p;
++};
++
++#if defined(ISP2100)
++#define GN_LIST_LENGTH  126 * sizeof(port_list_entry_t)
++#else
++#define GN_LIST_LENGTH  256 * sizeof(port_list_entry_t)
++#endif
++
++/*
++ * Structure used in Get Port List mailbox command (0x75).
++ */
++typedef struct {
++      uint8_t         name[WWN_SIZE];
++      uint16_t        loop_id;
++} port_list_entry_t;
++
++/*
++ * Structure used for device info.
++ */
++typedef struct {
++      uint8_t         name[WWN_SIZE];
++      uint8_t         wwn[WWN_SIZE];
++      uint16_t                loop_id;
++      uint8_t         port_id[3];
++} device_data_t;
++
++//TODO Complete Formatting...
++
++/* Mailbox command completion status */
++#define MBS_PORT_ID_IN_USE              0x4007
++#define MBS_LOOP_ID_IN_USE              0x4008
++#define MBS_ALL_LOOP_IDS_IN_USE         0x4009
++#define MBS_NAME_SERVER_NOT_LOGGED_IN   0x400A
++
++
++#define MAX_IOCTL_WAIT_THREADS        32
++typedef struct _wait_q_t {
++      uint8_t                 flags;
++#define WQ_IN_USE     0x1
++
++      struct semaphore        wait_q_sem;
++      struct _wait_q_t        *pnext;
++} wait_q_t;
++
++typedef struct hba_ioctl{
++
++      /* Ioctl cmd serialization */
++      uint16_t        access_bits; /* bits should be used atomically */
++#define IOCTL_ACTIVE  1 /* first bit */
++#define IOCTL_WANT    2 /* 2nd bit */
++
++      spinlock_t      wait_q_lock; /* IOCTL wait_q Queue Lock */
++      wait_q_t        wait_q_arr[MAX_IOCTL_WAIT_THREADS];
++      wait_q_t        *wait_q_head;
++      wait_q_t        *wait_q_tail;
++
++      /* Passthru cmd/completion */
++      struct semaphore        cmpl_sem;
++      struct timer_list       cmpl_timer;
++      uint8_t         ioctl_tov;
++      uint8_t         SCSIPT_InProgress;
++      uint8_t         MSIOCB_InProgress;
++
++      os_tgt_t        *ioctl_tq;
++      os_lun_t        *ioctl_lq;
++
++      /* AEN queue */
++      void            *aen_tracking_queue;/* points to async events buffer */
++      uint8_t         aen_q_head;     /* index to the current head of q */
++      uint8_t         aen_q_tail;     /* index to the current tail of q */
++
++      /* Misc. */
++      uint32_t        flags;
++#define       IOCTL_OPEN                      BIT_0
++#define       IOCTL_AEN_TRACKING_ENABLE       BIT_1
++      uint8_t         *scrap_mem;     /* per ha scrap buf for ioctl usage */
++      uint32_t        scrap_mem_size; /* total size */
++      uint32_t        scrap_mem_used; /* portion used */
++
++} hba_ioctl_context;
++
++/* Mailbox command semaphore queue for command serialization */
++typedef struct _mbx_cmdq_t {
++      struct semaphore        cmd_sem;
++      struct _mbx_cmdq_t      *pnext;
++} mbx_cmdq_t;
++
++/*
++ * Linux Host Adapter structure
++ */
++typedef struct scsi_qla_host
++{
++      struct list_head        list;
++
++      /* Linux adapter configuration data */
++      struct Scsi_Host *host;             /* pointer to host data */
++      struct pci_dev   *pdev;
++
++      u_long            host_no;
++      u_long            instance;
++
++      device_reg_t     *iobase;           /* Base Memory-mapped I/O address */
++      volatile unsigned char  *mmpbase;      /* memory mapped address */
++
++      struct qla_board_info   *brd_info;
++      uint16_t                fw_major_version;
++      uint16_t                fw_minor_version;
++      uint16_t                fw_subminor_version;
++      uint16_t                fw_attributes;
++      uint32_t                fw_transfer_size;
++
++      uint16_t                fw_options1;
++      uint16_t                fw_options2;
++      uint16_t                fw_options3;
++      uint8_t                 fw_seriallink_options[2];
++
++      ms_iocb_entry_t         *ms_iocb;
++      dma_addr_t              ms_iocb_dma;
++      struct ct_sns_pkt       *ct_sns;
++      dma_addr_t              ct_sns_dma;
++
++      uint16_t                isp_ctrl_status;
++
++      uint16_t           revision;
++      uint8_t           ports;
++      u_long            actthreads;
++      u_long            ipreq_cnt;
++      u_long            qthreads;
++      u_long            spurious_int;
++      uint32_t        total_isr_cnt;          /* Interrupt count */
++      uint32_t        total_isp_aborts;       /* controller err cnt */
++      uint32_t        total_lip_cnt;          /* LIP cnt */
++      uint32_t        total_dev_errs;         /* device error cnt */
++      uint32_t        total_ios;              /* IO cnt */
++      uint64_t        total_bytes;            /* xfr byte cnt */
++
++      /* Adapter I/O statistics for failover */
++      uint64_t        IosRequested;
++      uint64_t        BytesRequested;
++      uint64_t        IosExecuted;
++      uint64_t        BytesExecuted;
++
++      /* ISP connection configuration data */
++      uint16_t         max_public_loop_ids;
++      uint16_t         min_external_loopid; /* First external loop Id */
++      uint8_t          current_topology; /* Current ISP configuration */
++      uint8_t          prev_topology;    /* Previous ISP configuration */
++                     #define ISP_CFG_NL     1
++                     #define ISP_CFG_N      2
++                     #define ISP_CFG_FL     4
++                     #define ISP_CFG_F      8
++      uint8_t         id;                 /* Host adapter SCSI id */
++      uint16_t        loop_id;       /* Host adapter loop id */
++      port_id_t       d_id;           /* Host adapter port id */
++
++      uint8_t         operating_mode;  /* current F/W operating mode */
++              #define LOOP      0
++              #define P2P       1
++              #define LOOP_P2P  2
++              #define P2P_LOOP  3
++
++      uint8_t         active_fc4_types;/* active fc4 types */
++      uint8_t         current_speed;   /* current F/W operating speed */
++
++      /* NVRAM configuration data */
++      uint16_t        loop_reset_delay;   /* Loop reset delay. */
++      uint16_t        hiwat;              /* High water mark per device. */
++      uint16_t        execution_throttle; /* queue depth */ 
++      uint16_t        minimum_timeout;    /* Minimum timeout. */
++      uint8_t         retry_count;
++      uint8_t         login_timeout;
++      int             port_down_retry_count;
++      uint8_t         loop_down_timeout;
++      uint16_t        max_probe_luns;
++      uint16_t        max_luns;
++      uint16_t        max_targets;
++      
++      /* Fibre Channel Device List. */
++        struct list_head      fcports;
++
++      /* OS target queue pointers. */
++      os_tgt_t                *otgt[MAX_FIBRE_DEVICES];
++
++      /* Fibre Channel Device Database and LIP sequence. */
++      fcdev_t           fc_db[MAX_FIBRE_DEVICES]; /* Driver database. */
++      uint32_t          flash_db;         /* Flash database address in use. */
++      fabricid_t        fabricid[MAX_FIBRE_DEVICES]; /* Fabric ids table . */
++      uint32_t          flash_seq;        /* Flash database seq # in use. */
++      volatile uint16_t lip_seq;          /* LIP sequence number. */
++      
++      /* Tracks host adapters we find */      
++      struct list_head        fcinitiators;   /* Initiator database */
++    
++        /* RSCN queue. */
++      rscn_t rscn_queue[MAX_RSCN_COUNT];
++      uint8_t rscn_in_ptr;
++      uint8_t rscn_out_ptr;
++
++      /* Doneq bottom half handler */
++      struct work_struct run_qla_task;
++
++      /* __get_free_pages() srb_t pool */
++      srb_t   *srb_pool;
++      int     srb_pool_order;
++
++      /*
++       * Need to hold the list_lock with irq's disabled in order to
++       * access the following list.
++       * This list_lock is of lower priority than the io_request_lock.
++       */
++      /*********************************************************/
++        spinlock_t              list_lock;      /* lock to guard lists which 
++                                                 hold srb_t's*/
++        struct list_head        retry_queue;    /* watchdog queue */
++        struct list_head        done_queue;     /* job on done queue */
++        struct list_head        failover_queue; /* failover list link. */
++      struct list_head        free_queue;     /* SRB free queue */
++      struct list_head        scsi_retry_queue;     /* SCSI retry queue */
++      
++      struct list_head        pending_queue;  /* SCSI command pending queue */
++
++        /*********************************************************/
++
++      /* This spinlock is used to protect "io transactions", you must 
++       * aquire it before doing any IO to the card, eg with RD_REG*() and
++       * WRT_REG*() for the duration of your entire commandtransaction.
++       *
++       * This spinlock is of lower priority than the io request lock.
++       */
++
++      spinlock_t              hardware_lock;
++
++      /* Linux kernel thread */
++#if 0
++      struct task_struct  *dpc_handler;     /* kernel thread */
++      struct semaphore    *dpc_notify;     /* requester waits for DPC on this semaphore */
++      struct semaphore    dpc_sem;       /* DPC's semaphore */
++#endif
++      pid_t                   dpc_pid;
++      int                     dpc_should_die;
++      struct completion       dpc_inited;
++      struct completion       dpc_exited;
++      struct semaphore        *dpc_wait;
++
++      uint8_t dpc_active;                  /* DPC routine is active */
++
++      /* Received ISP mailbox data. */
++      volatile uint16_t mailbox_out[MAILBOX_REGISTER_COUNT];
++
++      /* Outstandings ISP commands. */
++      srb_t           *outstanding_cmds[MAX_OUTSTANDING_COMMANDS];
++      uint32_t current_outstanding_cmd; 
++
++      /* ISP ring lock, rings, and indexes */
++      dma_addr_t      request_dma;        /* Physical address. */
++      request_t       *request_ring;      /* Base virtual address */
++      request_t       *request_ring_ptr;  /* Current address. */
++      uint16_t        req_ring_index;     /* Current index. */
++      uint16_t        req_q_cnt;          /* Number of available entries. */
++
++      dma_addr_t      response_dma;       /* Physical address. */
++      response_t      *response_ring;     /* Base virtual address */
++      response_t      *response_ring_ptr; /* Current address. */
++      uint16_t        rsp_ring_index;     /* Current index. */
++    
++#if defined(FC_IP_SUPPORT)
++      /* Data for IP support */
++      uint8_t         ip_port_name[WWN_SIZE];
++
++      struct risc_rec_entry *risc_rec_q;      /* RISC receive queue */
++      dma_addr_t      risc_rec_q_dma;         /*  physical address */
++      uint16_t        rec_entries_in;
++      uint16_t        rec_entries_out;
++
++      struct send_cb  *active_scb_q[MAX_SEND_PACKETS];
++      uint32_t        current_scb_q_idx;
++
++      uint32_t        mtu;
++      uint16_t        header_size;
++      uint16_t        max_receive_buffers;
++      struct buffer_cb *receive_buffers;
++      uint32_t        receive_buff_data_size;
++
++      void            (*send_completion_routine)
++                              (struct send_cb *scb);
++      void            *receive_packets_context;
++      void            (*receive_packets_routine)
++                              (void *context, struct buffer_cb *bcb);
++      void            *notify_context;
++      void            (*notify_routine)
++                              (void *context, uint32_t type);
++
++      struct ip_device ipdev_db[QLLAN_MAX_IP_DEVICES];
++      struct ip_device *ipdev_db_next_free;
++      struct ip_device *ipdev_db_top;
++      struct ip_device *ipdev_db_bottom;
++#endif
++
++      /* Firmware Initialization Control Block data */
++      dma_addr_t      init_cb_dma;         /* Physical address. */
++      init_cb_t       *init_cb;
++  
++      /* Timeout timers. */
++      uint8_t         queue_restart_timer;   
++      atomic_t         loop_down_timer;         /* loop down timer */
++      uint8_t         loop_down_abort_time;    /* port down timer */
++      uint32_t        timer_active;
++      uint32_t        forceLip;
++      struct timer_list        timer;
++
++      /* These are used by mailbox operations. */
++      mbx_cmd_t       *mcp;
++      unsigned long   mbx_cmd_flags;
++#define MBX_CMD_ACTIVE        1 /* first bit */
++#define MBX_CMD_WANT  2 /* 2nd bit */
++#define MBX_INTERRUPT 3 /* 3rd bit */
++#define MBX_INTR_WAIT   4 /* 4rd bit */
++
++      spinlock_t      mbx_reg_lock;   /* Mbx Cmd Register Lock */
++      spinlock_t      mbx_q_lock;     /* Mbx Active Cmd Queue Lock */
++      spinlock_t      mbx_bits_lock;  /* Mailbox access bits Lock */
++
++      uint32_t        mbx_lock_bits;  /* controlled by mbx_bits_lock */
++#define MBX_CMD_LOCK  1 /* first bit */
++#define MBX_CMD_WANT  2 /* 2nd bit */
++
++      struct semaphore  mbx_intr_sem;  /* Used for completion notification */
++
++      mbx_cmdq_t      *mbx_sem_pool_head;  /* Head Pointer to a list of
++                                            * recyclable mbx semaphore pool
++                                            * to be used during run time.
++                                            */
++      mbx_cmdq_t      *mbx_sem_pool_tail;  /* Tail Pointer to semaphore pool*/
++#define MBQ_INIT_LEN  16 /* initial mbx sem pool q len. actual len may vary */
++
++      mbx_cmdq_t      *mbx_q_head; /* Head Pointer to sem q for active cmds */
++      mbx_cmdq_t      *mbx_q_tail; /* Tail Pointer to sem q for active cmds */
++
++
++        uint32_t      retry_q_cnt; 
++        uint32_t      scsi_retry_q_cnt; 
++        uint32_t      failover_cnt; 
++
++      uint8_t *cmdline;
++
++        uint32_t      login_retry_count; 
++    
++      volatile struct
++      {
++              uint32_t     online                  :1;   /* 0 */
++              uint32_t     enable_64bit_addressing :1;   /* 1 */
++              uint32_t     mbox_int                :1;   /* 2 */
++              uint32_t     mbox_busy               :1;   /* 3 */
++              // UNUSED and UNASSIGNED
++              uint32_t     port_name_used          :1;   /* 4 */
++              uint32_t     failover_enabled        :1;   /* 5 */
++              uint32_t     watchdog_enabled        :1;   /* 6 */
++              uint32_t     cfg_suspended           :1;   /* 7 */
++
++              uint32_t     disable_host_adapter    :1;   /* 8 */
++              uint32_t     rscn_queue_overflow     :1;   /* 9 */
++              uint32_t     reset_active            :1;   /* 10 */
++              uint32_t     link_down_error_enable  :1;   /* 11 */
++
++              uint32_t     disable_risc_code_load  :1;   /* 12 */
++              uint32_t     set_cache_line_size_1   :1;   /* 13 */
++              uint32_t     enable_target_mode      :1;   /* 14 */
++              uint32_t     disable_luns            :1;   /* 15 */
++
++              uint32_t     enable_lip_reset        :1;   /* 16 */
++              uint32_t     enable_lip_full_login   :1;   /* 17 */
++              uint32_t     enable_target_reset     :1;   /* 18 */
++              uint32_t     updated_fc_db           :1;   /* 19 */
++
++              uint32_t     enable_flash_db_update  :1;   /* 20 */
++              uint32_t     in_isr                  :1;   /* 21 */
++              uint32_t     dpc_sched               :1;   /* 23 */
++
++              uint32_t     nvram_config_done       :1;   /* 24 */
++              uint32_t     update_config_needed    :1;   /* 25 */
++              uint32_t     management_server_logged_in    :1; /* 26 */
++#if defined(FC_IP_SUPPORT)
++                uint32_t     enable_ip               :1;   /* 27 */
++#endif
++
++      } flags;
++
++      uint32_t     device_flags;
++#define DFLG_LOCAL_DEVICES            BIT_0
++#define DFLG_RETRY_LOCAL_DEVICES      BIT_1
++#define DFLG_FABRIC_DEVICES           BIT_2
++#define       SWITCH_FOUND                    BIT_3
++#define       DFLG_NO_CABLE                   BIT_4
++
++      unsigned long   cpu_flags;
++
++        uint8_t               marker_needed; 
++      uint8_t         missing_targets;
++      uint8_t         sns_retry_cnt;
++      uint8_t         cmd_wait_cnt;
++      uint8_t         mem_err;
++
++      unsigned long   dpc_flags;
++#define       RESET_MARKER_NEEDED     0       /* initiate sending a marker to ISP */
++#define       RESET_ACTIVE            1
++#define       ISP_ABORT_NEEDED        2       /* initiate ISP Abort */
++#define       ABORT_ISP_ACTIVE        3       /* isp abort in progress */
++
++#define       LOOP_RESYNC_NEEDED      4       /* initiate a configure fabric sequence */
++#define       LOOP_RESYNC_ACTIVE      5
++#define       COMMAND_WAIT_NEEDED     6
++#define       COMMAND_WAIT_ACTIVE     7
++
++#define LOCAL_LOOP_UPDATE       8     /* Perform a local loop update */
++#define RSCN_UPDATE             9     /* Perform a RSCN update */
++#define MAILBOX_RETRY           10
++#define ISP_RESET_NEEDED        11    /* Initiate a ISP reset ??? */
++
++#define FAILOVER_EVENT_NEEDED   12
++#define FAILOVER_EVENT                13
++#define FAILOVER_NEEDED       14
++#define LOOP_RESET_NEEDED     15
++
++#define DEVICE_RESET_NEEDED   16
++#define DEVICE_ABORT_NEEDED   17
++#define SCSI_RESTART_NEEDED   18      /* Processes any requests in scsi retry queue */
++#define PORT_RESTART_NEEDED   19      /* Processes any requests in retry queue */
++
++#define RESTART_QUEUES_NEEDED 20      /* Restarts requeusts in the lun queue */
++#define ABORT_QUEUES_NEEDED   21
++#define RELOGIN_NEEDED                22
++#define LOGIN_RETRY_NEEDED    23      /* initiates any fabric logins that are required */ 
++#define REGISTER_FC4_NEEDED   24      /* set when need to register again.*/
++
++#define TASKLET_SCHED         25      /* Tasklet is scheduled.  */ 
++#define DONE_RUNNING          26      /* Done task is running. */
++#define ISP_ABORT_RETRY         27      /* ISP aborted. */
++
++
++/* macro for timer to start dpc for handling mailbox commands */
++#define MAILBOX_CMD_NEEDED    (LOOP_RESET_NEEDED|DEVICE_RESET_NEEDED|   \
++    DEVICE_ABORT_NEEDED|ISP_ABORT_NEEDED)
++
++      /* These 3 fields are used by the reset done in dpc thread */
++      uint16_t        reset_bus_id;
++      uint16_t        reset_tgt_id;
++      uint16_t        reset_lun;
++
++      uint8_t         interrupts_on;
++      uint8_t         init_done;
++
++      volatile uint16_t loop_state;
++#define LOOP_TIMEOUT 0x01
++#define LOOP_DOWN    0x02
++#define LOOP_UP      0x04
++#define LOOP_UPDATE  0x08
++#define LOOP_READY   0x10
++
++      mbx_cmd_t       mc;
++      uint32_t        mbx_flags;
++#define  MBX_IN_PROGRESS  BIT_0
++#define  MBX_BUSY       BIT_1 /* Got the Access */
++#define  MBX_SLEEPING_ON_SEM  BIT_2 
++#define  MBX_POLLING_FOR_COMP  BIT_3
++#define  MBX_COMPLETED      BIT_4
++#define  MBX_TIMEDOUT       BIT_5 
++#define  MBX_ACCESS_TIMEDOUT BIT_6
++
++/* following are new and needed for IOCTL support */
++      hba_ioctl_context *ioctl;
++      uint8_t     node_name[WWN_SIZE];
++
++      uint8_t     optrom_major; 
++      uint8_t     optrom_minor; 
++
++      uint8_t     nvram_version; 
++
++      void        *ioctl_mem;
++      dma_addr_t  ioctl_mem_phys;
++      uint32_t    ioctl_mem_size;
++      uint32_t    isp_abort_cnt;
++
++      /* HBA serial number */
++      uint8_t     serial0;
++      uint8_t     serial1;
++      uint8_t     serial2;
++
++      /* oem related items */
++      uint8_t oem_id;
++      uint8_t oem_specific[31];
++
++      uint32_t    dump_done;
++      unsigned long    done_q_cnt;
++      unsigned long    pending_in_q;
++
++      uint32_t failover_type;
++      uint32_t failback_delay;
++      unsigned long   cfg_flags;
++#define       CFG_ACTIVE      0       /* CFG during a failover, event update, or ioctl */
++      /* uint8_t      cfg_active; */
++      int     eh_start;
++
++#if defined(IOCB_THROLLE_USAGE)
++      uint32_t         iocb_hiwat;
++      uint32_t         iocb_cnt;
++      uint32_t         iocb_overflow_cnt;
++#endif
++      
++      int     srb_cnt;
++      int     srb_alloc_cnt;  /*Number of allocated SRBs  */
++
++      uint32_t mbox_trace;
++
++      uint32_t        binding_type;
++#define BIND_BY_PORT_NAME     0
++#define BIND_BY_PORT_ID               1
++#define BIND_BY_NODE_NAME     2
++
++      srb_t   *status_srb;    /* Keep track of Status Continuation Entries */
++
++      uint32_t        dropped_frame_error_cnt;
++} scsi_qla_host_t;
++
++#if defined(__BIG_ENDIAN)
++/* Big endian machine correction defines. */
++#define       LITTLE_ENDIAN_16(x)     qla2x00_chg_endian((uint8_t *)&(x), 2)
++#define       LITTLE_ENDIAN_24(x)     qla2x00_chg_endian((uint8_t *)&(x), 3)
++#define       LITTLE_ENDIAN_32(x)     qla2x00_chg_endian((uint8_t *)&(x), 4)
++#define       LITTLE_ENDIAN_64(x)     qla2x00_chg_endian((uint8_t *)&(x), 8)
++#define       BIG_ENDIAN_16(x)
++#define       BIG_ENDIAN_24(x)
++#define       BIG_ENDIAN_32(x)
++#define       BIG_ENDIAN_64(x)
++
++#else
++/* Little endian machine correction defines. */
++#define       LITTLE_ENDIAN_16(x)
++#define       LITTLE_ENDIAN_24(x)
++#define       LITTLE_ENDIAN_32(x)
++#define       LITTLE_ENDIAN_64(x)
++#define       BIG_ENDIAN_16(x)        qla2x00_chg_endian((uint8_t *)&(x), 2)
++#define       BIG_ENDIAN_24(x)        qla2x00_chg_endian((uint8_t *)&(x), 3)
++#define       BIG_ENDIAN_32(x)        qla2x00_chg_endian((uint8_t *)&(x), 4)
++#define       BIG_ENDIAN_64(x)        qla2x00_chg_endian((uint8_t *)&(x), 8)
++
++#endif
++
++/*
++ * Macros to help code, maintain, etc.
++ */
++#define       LOOP_TRANSITION(ha)     ( test_bit(ISP_ABORT_NEEDED, &ha->dpc_flags) || \
++                                test_bit(LOOP_RESYNC_NEEDED, &ha->dpc_flags) )
++
++#define       LOOP_NOT_READY(ha)       ( (test_bit(ISP_ABORT_NEEDED, &ha->dpc_flags) || \
++                                  test_bit(ABORT_ISP_ACTIVE, &ha->dpc_flags) || \
++                                    test_bit(LOOP_RESYNC_NEEDED, &ha->dpc_flags) || \
++                                  test_bit(LOOP_RESYNC_ACTIVE, &ha->dpc_flags) || \
++                                  test_bit(COMMAND_WAIT_NEEDED, &ha->dpc_flags) || \
++                                    test_bit(COMMAND_WAIT_ACTIVE, &ha->dpc_flags)) ||  \
++                               ha->loop_state == LOOP_DOWN)
++                               
++#define       LOOP_RDY(ha)     ( !LOOP_NOT_READY(ha) )
++
++#define       TGT_Q(ha, t)            (ha->otgt[t])
++#define       LUN_Q(ha, t, l)         (TGT_Q(ha, t)->olun[l])
++#define GET_LU_Q(ha, t, l)  ( (TGT_Q(ha,t) != NULL)? TGT_Q(ha, t)->olun[l] : NULL)
++#define PORT_DOWN_TIMER(ha, t)    ((ha)->fc_db[(t)].port_timer)
++#define PORT(ha, t)                   ((ha)->fc_db[(t)])
++#define PORT_LOGIN_RETRY(fcport)    ((fcport)->port_login_retry_count)
++
++#define MBOX_TRACE(ha,b)              {(ha)->mbox_trace |= (b);}
++
++#define       MBS_MASK                        0x3fff
++#define       MBS_END                         0x100
++#define       QLA2X00_SUCCESS         (MBS_COMMAND_COMPLETE & MBS_MASK)
++#define       QLA2X00_FAILED          (MBS_END + 2)
++#define       QLA2X00_FUNCTION_FAILED         (MBS_END + 2)
++
++#define  KMEM_ZALLOC(siz,id)  qla2x00_kmem_zalloc((siz), GFP_ATOMIC, (id))
++#define  KMEM_FREE(ip,siz)    kfree((ip))
++
++/*
++ * LOCK MACROS
++ */
++#define QLA_MBX_REG_LOCK(ha)  \
++    spin_lock_irqsave(&(ha)->mbx_reg_lock, mbx_flags);
++#define QLA_MBX_REG_UNLOCK(ha)        \
++    spin_unlock_irqrestore(&(ha)->mbx_reg_lock, mbx_flags);
++
++/*
++* Stat info for all adpaters
++*/
++struct _qla2x00stats  {
++        unsigned long   mboxtout;            /* mailbox timeouts */
++        unsigned long   mboxerr;             /* mailbox errors */
++        unsigned long   ispAbort;            /* ISP aborts */
++        unsigned long   debugNo;
++        unsigned long   loop_resync;
++        unsigned long   outarray_full;
++        unsigned long   retry_q_cnt;
++};
++
++#define SYS_DELAY(x)          udelay(x);barrier()
++#define QLA2100_DELAY(sec)    mdelay(sec * HZ)
++#define NVRAM_DELAY()         udelay(10)
++#define UDELAY(x)             udelay(x)
++
++#define  CACHE_FLUSH(a) (RD_REG_WORD(a))
++#define  INVALID_HANDLE    (MAX_OUTSTANDING_COMMANDS+1)
++
++#define  ABORTS_ACTIVE  ((test_bit(LOOP_RESET_NEEDED, &ha->dpc_flags)) || \
++                      (test_bit(DEVICE_RESET_NEEDED, &ha->dpc_flags)) || \
++                      (test_bit(DEVICE_ABORT_NEEDED, &ha->dpc_flags)) || \
++                      (test_bit(ISP_ABORT_NEEDED, &ha->dpc_flags)))
++
++/*
++ * Flash support definitions
++ */
++#define FLASH_IMAGE_SIZE      131072
++
++#include "qla_fo.h"
++#include "qla_cfg.h"
++#include "qla_gbl.h"
++#include "qla_dbg.h"
++#include "qla_inline.h"
++#include "qla_listops.h"
++
++#endif
+--- /dev/null  Thu Apr 11 07:25:15 2002
++++ linux-2.5.73-n9560/drivers/scsi/qla2xxx/qla_fo.c   Thu Jul  3 15:34:42 2003
+@@ -0,0 +1,1681 @@
++/********************************************************************************
++*                  QLOGIC LINUX SOFTWARE
++*
++* QLogic ISP2x00 device driver for Linux 2.5.x
++* Copyright (C) 2003 Qlogic Corporation
++* (www.qlogic.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, 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.
++*
++******************************************************************************
++* Failover include file
++******************************************************************************/
++
++#include "qla_os.h"
++#include "qla_def.h"
++
++#include "qlfo.h"
++#include "qlfolimits.h"
++
++//TODO Why??
++#include "qla_fo.cfg"
++
++/*
++ * Global variables
++ */
++SysFoParams_t qla_fo_params;
++
++/*
++ * Local routines
++ */
++#if !defined(linux)
++static int qla2x00_sdm_setup(EXT_IOCTL *cmd_stp, void *arg, int mode);
++#endif
++static uint32_t qla2x00_fo_get_params(PFO_PARAMS pp);
++static uint32_t qla2x00_fo_set_params(PFO_PARAMS pp);
++static uint8_t qla2x00_fo_count_retries(scsi_qla_host_t *ha, srb_t *sp);
++static int qla2x00_fo_get_lun_data(EXT_IOCTL *pext,
++              FO_LUN_DATA_INPUT *bp, int mode);
++static int qla2x00_fo_set_lun_data(EXT_IOCTL *pext,
++              FO_LUN_DATA_INPUT *bp, int mode);
++static uint32_t qla2x00_fo_stats(FO_HBA_STAT *stat_p, uint8_t reset);
++static int qla2x00_fo_set_target_data(EXT_IOCTL *pext,
++              FO_TARGET_DATA_INPUT *bp, int mode);
++static int qla2x00_fo_get_target_data(EXT_IOCTL *pext,
++              FO_TARGET_DATA_INPUT *bp, int mode);
++
++/*
++ * qla2x00_get_hba
++ *    Searches the hba structure chain for the requested instance
++ *      aquires the mutex and returns a pointer to the hba structure.
++ *
++ * Input:
++ *    inst = adapter instance number.
++ *
++ * Returns:
++ *    Return value is a pointer to the adapter structure or
++ *      NULL if instance not found.
++ *
++ * Context:
++ *    Kernel context.
++ */
++scsi_qla_host_t *
++qla2x00_get_hba(int instance)
++{
++      int     found;
++      struct list_head *hal;
++      scsi_qla_host_t *ha;
++
++      ha = NULL;
++      found = 0;
++      read_lock(&qla_hostlist_lock);
++      list_for_each(hal, &qla_hostlist) {
++              ha = list_entry(hal, scsi_qla_host_t, list);
++
++              if (ha->instance == instance) {
++                      found++;
++                      break;
++              }
++      }
++      read_unlock(&qla_hostlist_lock);
++
++      return (found ? ha : NULL);
++}
++
++/*
++ * qla2x00_fo_stats
++ *    Searches the hba structure chan for the requested instance
++ *      aquires the mutex and returns a pointer to the hba structure.
++ *
++ * Input:
++ *    stat_p = Pointer to FO_HBA_STAT union.
++ *      reset  = Flag, TRUE = reset statistics.
++ *                     FALSE = return statistics values.
++ *
++ * Returns:
++ *    0 = success
++ *
++ * Context:
++ *    Kernel context.
++ */
++static uint32_t
++qla2x00_fo_stats(FO_HBA_STAT *stat_p, uint8_t reset)
++{
++      int32_t inst, idx;
++      uint32_t rval = 0;
++      struct list_head *hal;
++      scsi_qla_host_t *ha;
++
++      DEBUG9(printk("%s: entered.\n", __func__);)
++
++      inst = stat_p->input.HbaInstance;
++      stat_p->info.HbaCount = 0;
++
++      ha = NULL;
++
++      read_lock(&qla_hostlist_lock);
++      list_for_each(hal, &qla_hostlist) {
++              ha = list_entry(hal, scsi_qla_host_t, list);
++
++              if (inst == FO_ADAPTER_ALL) {
++                      stat_p->info.HbaCount++;
++                      idx = ha->instance;
++              } else if (ha->instance == inst) {
++                      stat_p->info.HbaCount = 1;
++                      idx = inst;
++              }
++              if (reset == TRUE) {
++                      DEBUG9(printk("%s: reset stats.\n", __func__);)
++                      ha->IosRequested = 0;
++                      ha->BytesRequested = 0;
++                      ha->IosExecuted = 0;
++                      ha->BytesExecuted = 0;
++              } else {
++                      DEBUG9(printk("%s: get stats for inst %d.\n",
++                          __func__, inst);)
++ 
++#if 0
++                      stat_p->info.StatEntry[idx].IosRequested =
++                              ha->IosRequested;
++                      stat_p->info.StatEntry[idx].BytesRequested =
++                              ha->BytesRequested;
++                      stat_p->info.StatEntry[idx].IosExecuted =
++                              ha->IosExecuted;
++                      stat_p->info.StatEntry[idx].BytesExecuted =
++                              ha->BytesExecuted;
++#endif
++              }
++              if (inst != FO_ADAPTER_ALL)
++                      break;
++      }
++      read_unlock(&qla_hostlist_lock);
++ 
++      DEBUG9(printk("%s: exiting.\n", __func__);)
++ 
++      return rval;
++}
++
++/*
++ * qla2x00_fo_get_lun_data
++ *      Get lun data from all devices attached to a HBA (FO_GET_LUN_DATA).
++ *      Gets lun mask if failover not enabled.
++ *
++ * Input:
++ *      ha = pointer to adapter
++ *      bp = pointer to buffer
++ *
++ * Return;
++ *      0 on success or errno.
++ *
++ * Context:
++ *      Kernel context.
++ */
++static int
++qla2x00_fo_get_lun_data(EXT_IOCTL *pext, FO_LUN_DATA_INPUT *bp, int mode)
++{
++      scsi_qla_host_t  *ha;
++      struct list_head        *fcports, *fcpl;
++      fc_port_t        *fcport;
++      int              ret = 0;
++      mp_host_t        *host = NULL;
++      mp_device_t      *dp;
++      mp_path_t        *path;
++      mp_path_list_t   *pathlist;
++      os_tgt_t         *ostgt;
++      uint8_t          path_id;
++      uint16_t         dev_no;
++      uint16_t         cnt;
++      uint16_t         lun;
++      FO_EXTERNAL_LUN_DATA_ENTRY *u_entry, *entry;
++      FO_LUN_DATA_LIST *u_list, *list;
++
++
++      DEBUG9(printk("%s: entered.\n", __func__);)
++
++      ha = qla2x00_get_hba((int)bp->HbaInstance);
++
++      if (!ha) {
++              DEBUG2_9_10(printk("%s: no ha matching inst %d.\n",
++                  __func__, bp->HbaInstance);)
++
++              pext->Status = EXT_STATUS_DEV_NOT_FOUND;
++              return (ret);
++      }
++
++      DEBUG9(printk("%s: ha inst %ld, buff %p.\n",
++          __func__, ha->instance, bp);)
++      DEBUG4(printk("%s: hba %p, buff %p bp->HbaInstance(%x).\n",
++          __func__, ha, bp, (int)bp->HbaInstance));
++
++      if (ha->flags.failover_enabled)
++              if ((host = qla2x00_cfg_find_host(ha)) == NULL) {
++                      DEBUG2_9_10(printk("%s: no HOST for ha inst %ld.\n",
++                          __func__, ha->instance);)
++                      pext->Status = EXT_STATUS_DEV_NOT_FOUND;
++                      return (ret);
++              }
++
++      list = (FO_LUN_DATA_LIST *)qla2x00_kmem_zalloc(
++          sizeof(FO_LUN_DATA_LIST), GFP_ATOMIC, 12);
++      if (list == NULL) {
++              DEBUG2_9_10(printk("%s: failed to alloc memory of size (%d)\n",
++                  __func__, (int)sizeof(FO_LUN_DATA_LIST));)
++              pext->Status = EXT_STATUS_NO_MEMORY;
++              return (-ENOMEM);
++      }
++
++      entry = &list->DataEntry[0];
++
++      u_list = (FO_LUN_DATA_LIST *)pext->ResponseAdr;
++      u_entry = &u_list->DataEntry[0];
++
++      /* find the correct fcport list */
++      if (!ha->flags.failover_enabled)
++              fcports = &ha->fcports;
++      else
++              fcports = host->fcports;
++
++      /* Check thru this adapter's fcport list */
++      fcport = NULL;
++      list_for_each(fcpl, fcports) {
++              fcport = list_entry(fcpl, fc_port_t, list);
++
++              memcpy(entry->NodeName,
++                  fcport->node_name, EXT_DEF_WWN_NAME_SIZE);
++              memcpy(entry->PortName,
++                  fcport->port_name, EXT_DEF_WWN_NAME_SIZE);
++
++              if (!ha->flags.failover_enabled) {
++                      /*
++                       * Failover disabled. Just return LUN mask info
++                       * in lun data entry of this port.
++                       */
++                      entry->TargetId = 0;
++                      for (cnt = 0; cnt < MAX_FIBRE_DEVICES; cnt++) {
++                              if (!(ostgt = ha->otgt[cnt])) {
++                                      continue;
++                              }
++
++                              if (ostgt->vis_port == fcport) {
++                                      entry->TargetId = cnt;
++                                      break;
++                              }
++                      }
++                      if (cnt == MAX_FIBRE_DEVICES) {
++                              /* Not found?  For now just go to next port. */
++#if defined(QL_DEBUG_LEVEL_2) || defined(QL_DEBUG_LEVEL_10)
++                              uint8_t          *tmp_name;
++
++                              tmp_name = fcport->port_name;
++
++                              printk("%s(%ld): ERROR - port "
++                                  "%02x%02x%02x%02x%02x%02x%02x%02x "
++                                  "not configured.\n",
++                                  __func__, ha->host_no,
++                                  tmp_name[0], tmp_name[1], tmp_name[2],
++                                  tmp_name[3], tmp_name[4], tmp_name[5],
++                                  tmp_name[6], tmp_name[7]);
++#endif /* DEBUG */
++
++                              continue;
++                      }
++
++                      /* Got a valid port */
++                      list->EntryCount++;
++
++                      for (lun = 0; lun < MAX_LUNS; lun++) {
++                              /* set MSB if masked */
++                              entry->Data[lun] = LUN_DATA_PREFERRED_PATH;
++                              if (!EXT_IS_LUN_BIT_SET(&(fcport->lun_mask),
++                                  lun)) {
++                                      entry->Data[lun] |= LUN_DATA_ENABLED;
++                              }
++                      }
++
++                      DEBUG9(printk("%s: got lun_mask for tgt %d\n",
++                          __func__, cnt);)
++                      DEBUG9(qla2x00_dump_buffer((char *)&(fcport->lun_mask),
++                          sizeof(lun_bit_mask_t));)
++ 
++                      ret = verify_area(VERIFY_WRITE, (void *)u_entry,
++                          sizeof(FO_EXTERNAL_LUN_DATA_ENTRY));
++                      if (ret) {
++                              /* error */
++                              DEBUG9_10(printk("%s: u_entry %p verify write"
++                                  " error. list->EntryCount=%d.\n",
++                                  __func__, u_entry, list->EntryCount);)
++                              pext->Status = EXT_STATUS_COPY_ERR;
++                              break;
++                      }
++ 
++                      ret = copy_to_user(u_entry, entry,
++                          sizeof(FO_EXTERNAL_LUN_DATA_ENTRY));
++ 
++                      if (ret) {
++                              /* error */
++                              DEBUG9_10(printk("%s: u_entry %p copy "
++                                  "error. list->EntryCount=%d.\n",
++                                  __func__, u_entry, list->EntryCount);)
++                              pext->Status = EXT_STATUS_COPY_ERR;
++                              break;
++                      }
++
++                      copy_to_user(u_entry, entry,
++                                      sizeof(FO_EXTERNAL_LUN_DATA_ENTRY));
++
++                      /* Go to next port */
++                      u_entry++;
++                      continue;
++              }
++
++              /*
++               * Failover is enabled. Go through the mp_devs list and return
++               * lun data in configured path.
++               */
++              for (dev_no = 0; dev_no < MAX_MP_DEVICES; dev_no++) {
++                      dp = host->mp_devs[dev_no];
++
++                      if (dp == NULL)
++                              continue;
++
++                      /* Lookup entry name */
++                      if (!qla2x00_is_portname_in_device(dp, entry->PortName))
++                              continue;
++
++                      if ((pathlist = dp->path_list) == NULL)
++                              continue;
++
++                      path = pathlist->last;
++                      for (path_id = 0; path_id < pathlist->path_cnt;
++                          path_id++, path = path->next) {
++
++                              if (path->host != host)
++                                      continue;
++
++                              if (!qla2x00_is_portname_equal(path->portname,
++                                  entry->PortName))
++                                      continue;
++
++                              /* Got an entry */
++                              entry->TargetId = dp->dev_id;
++                              entry->Dev_No = path->id;
++                              list->EntryCount++;
++
++                              for (lun = 0; lun < MAX_LUNS; lun++) {
++                                      entry->Data[lun] =
++                                          path->lun_data.data[lun];
++                              }
++
++                              ret = verify_area(VERIFY_WRITE, (void *)u_entry,
++                                  sizeof(FO_EXTERNAL_LUN_DATA_ENTRY));
++                              if (ret) {
++                                      /* error */
++                                      DEBUG2_9_10(printk("%s: u_entry %p "
++                                          "verify wrt err. EntryCount=%d.\n",
++                                          __func__, u_entry, list->EntryCount);)
++                                      pext->Status = EXT_STATUS_COPY_ERR;
++                                      break;
++                              }
++
++                              ret = copy_to_user(u_entry, entry,
++                                  sizeof(FO_EXTERNAL_LUN_DATA_ENTRY));
++                              if (ret) {
++                                      /* error */
++                                      DEBUG2_9_10(printk("%s: u_entry %p "
++                                          "copy out err. EntryCount=%d.\n",
++                                          __func__, u_entry, list->EntryCount);)
++                                      pext->Status = EXT_STATUS_COPY_ERR;
++                                      break;
++                              }
++
++                              u_entry++;
++
++                              DEBUG9(printk("%s: (output) get_lun_data - "
++                                  "u_entry(%p) - lun entry[%d] :\n",
++                                  __func__, u_entry,list->EntryCount - 1);)
++
++                              DEBUG9(qla2x00_dump_buffer((void *)entry, 64);)
++
++                              /*
++                               * We found the right path for this port.
++                               * Continue with next port.
++                               */
++                              break;
++                      }
++
++                      /* Continue with next port. */
++                      break;
++              }
++      }
++
++      DEBUG9(printk("%s: get_lun_data - entry count = [%d]\n",
++          __func__, list->EntryCount);)
++      DEBUG4(printk("%s: get_lun_data - entry count = [%d]\n",
++          __func__, list->EntryCount);)
++
++      if (ret == 0) {
++              ret = verify_area(VERIFY_WRITE, (void *)&u_list->EntryCount,
++                  sizeof(list->EntryCount));
++              if (ret) {
++                      /* error */
++                      DEBUG2_9_10(printk("%s: u_list->EntryCount %p verify "
++                          " write error. list->EntryCount=%d.\n",
++                          __func__, u_entry, list->EntryCount);)
++                      pext->Status = EXT_STATUS_COPY_ERR;
++              } else {
++                      /* copy number of entries */
++                      ret = copy_to_user(&u_list->EntryCount, &list->EntryCount,
++                          sizeof(list->EntryCount));
++                      pext->ResponseLen = FO_LUN_DATA_LIST_MAX_SIZE;
++              }
++      }
++
++      KMEM_FREE(list, sizeof(FO_LUN_DATA_LIST));
++
++      DEBUG9(printk("%s: exiting. ret=%d.\n", __func__, ret);)
++
++      return ret;
++}
++
++/*
++ * qla2x00_fo_set_lun_data
++ *      Set lun data for the specified device on the attached hba
++ *      (FO_SET_LUN_DATA).
++ *      Sets lun mask if failover not enabled.
++ *
++ * Input:
++ *      bp = pointer to buffer
++ *
++ * Return;
++ *      0 on success or errno.
++ *
++ * Context:
++ *      Kernel context.
++ */
++static int
++qla2x00_fo_set_lun_data(EXT_IOCTL *pext, FO_LUN_DATA_INPUT  *bp, int mode)
++{
++      scsi_qla_host_t  *ha;
++      fc_port_t        *fcport;
++      int              i;
++      int              ret = 0;
++      mp_host_t        *host = NULL;
++      mp_device_t      *dp;
++      mp_path_t        *path;
++      mp_path_list_t   *pathlist;
++      os_tgt_t         *ostgt;
++      uint8_t          path_id;
++      uint16_t         dev_no;
++      uint16_t         lun;
++      FO_LUN_DATA_LIST *u_list, *list;
++      FO_EXTERNAL_LUN_DATA_ENTRY *u_entry, *entry;
++
++      typedef struct _tagStruct {
++              FO_LUN_DATA_INPUT   foLunDataInput;
++              FO_LUN_DATA_LIST    foLunDataList;
++      }
++      com_struc;
++      com_struc *com_iter;
++
++
++      DEBUG9(printk("%s: entered.\n", __func__);)
++
++      ha = qla2x00_get_hba((int)bp->HbaInstance);
++
++      if (!ha) {
++              DEBUG2_9_10(printk("%s: no ha matching inst %d.\n",
++                  __func__, bp->HbaInstance);)
++
++              pext->Status = EXT_STATUS_DEV_NOT_FOUND;
++              return (ret);
++      }
++
++      DEBUG9(printk("%s: ha inst %ld, buff %p.\n",
++          __func__, ha->instance, bp);)
++
++      if (ha->flags.failover_enabled)
++              if ((host = qla2x00_cfg_find_host(ha)) == NULL) {
++                      DEBUG2_9_10(printk("%s: no HOST for ha inst %ld.\n",
++                          __func__, ha->instance);)
++                      pext->Status = EXT_STATUS_DEV_NOT_FOUND;
++                      return (ret);
++              }
++
++      list = (FO_LUN_DATA_LIST *)qla2x00_kmem_zalloc(
++          sizeof(FO_LUN_DATA_LIST), GFP_ATOMIC, 13);
++      if (list == NULL) {
++              DEBUG2_9_10(printk("%s: failed to alloc memory of size (%d)\n",
++                  __func__, (int)sizeof(FO_LUN_DATA_LIST));)
++              pext->Status = EXT_STATUS_NO_MEMORY;
++              return (-ENOMEM);
++      }
++
++      entry = &list->DataEntry[0];
++
++      /* get lun data list from user */
++      com_iter = (com_struc *)pext->RequestAdr;
++      u_list = &(com_iter->foLunDataList);
++      u_entry = &u_list->DataEntry[0];
++
++      ret = verify_area(VERIFY_READ, (void *)u_list,
++          sizeof(FO_LUN_DATA_LIST));
++      if (ret) {
++              /* error */
++              DEBUG2_9_10(printk("%s: u_list %p verify read error.\n",
++                  __func__, u_list);)
++              pext->Status = EXT_STATUS_COPY_ERR;
++              KMEM_FREE(list, FO_LUN_DATA_LIST);
++              return (ret);
++      }
++
++      ret = copy_from_user(list, u_list, sizeof(FO_LUN_DATA_LIST));
++      if (ret) {
++              /* error */
++              DEBUG2_9_10(printk("%s: u_list %p copy error.\n",
++                  __func__, u_list);)
++              pext->Status = EXT_STATUS_COPY_ERR;
++              KMEM_FREE(list, FO_LUN_DATA_LIST);
++              return (ret);
++      }
++
++      DEBUG2(printk("qla_fo_set_lun_data: pext->RequestAdr(%p) u_list (%p) "
++                      "sizeof(FO_LUN_DATA_INPUT) =(%d) and 64 bytes...\n",
++                      pext->RequestAdr, u_list,
++                      (int)sizeof(FO_LUN_DATA_INPUT));)
++      DEBUG2(qla2x00_dump_buffer((void *)u_list, 64);)
++
++      for (i = 0; i < list->EntryCount; i++, u_entry++) {
++
++              ret = verify_area(VERIFY_READ, (void *)u_entry,
++                  sizeof(FO_EXTERNAL_LUN_DATA_ENTRY));
++              if (ret) {
++                      /* error */
++                      DEBUG2_9_10(printk("%s: u_entry %p verify "
++                          " read error.\n",
++                          __func__, u_entry);)
++                      pext->Status = EXT_STATUS_COPY_ERR;
++                      break;
++              }
++              ret = copy_from_user(entry, u_entry,
++                  sizeof(FO_EXTERNAL_LUN_DATA_ENTRY));
++              if (ret) {
++                      /* error */
++                      DEBUG2_9_10(printk("%s: u_entry %p copy error.\n",
++                          __func__, u_entry);)
++                      pext->Status = EXT_STATUS_COPY_ERR;
++                      break;
++              }
++
++              if (!ha->flags.failover_enabled) {
++                      /*
++                       * Failover disabled. Just find the port and set
++                       * LUN mask values in lun_mask field of this port.
++                       */
++
++                      if (entry->TargetId >= MAX_FIBRE_DEVICES)
++                              /* ERROR */
++                              continue;
++
++                      if (!(ostgt = ha->otgt[entry->TargetId]))
++                              /* ERROR */
++                              continue;
++
++                      if (!(fcport = ostgt->vis_port))
++                              /* ERROR */
++                              continue;
++
++                      for (lun = 0; lun < MAX_LUNS; lun++) {
++                              /* set MSB if masked */
++                              if (entry->Data[lun] | LUN_DATA_ENABLED) {
++                                      EXT_CLR_LUN_BIT(&(fcport->lun_mask),
++                                                              lun);
++                              } else {
++                                      EXT_SET_LUN_BIT(&(fcport->lun_mask),
++                                                              lun);
++                              }
++                      }
++
++                      /* Go to next entry */
++                      continue;
++              }
++
++              /*
++               * Failover is enabled. Go through the mp_devs list and set lun
++               * data in configured path.
++               */
++              for (dev_no = 0; dev_no < MAX_MP_DEVICES; dev_no++) {
++                      dp = host->mp_devs[dev_no];
++
++                      if (dp == NULL)
++                              continue;
++
++                      /* Lookup entry name */
++                      if (!qla2x00_is_portname_in_device(dp, entry->PortName))
++                                      continue;
++
++                      if ((pathlist = dp->path_list) == NULL)
++                                      continue;
++
++                      path = pathlist->last;
++                      for (path_id = 0; path_id < pathlist->path_cnt;
++                          path_id++, path = path->next) {
++
++                              if (path->host != host)
++                                      continue;
++
++                              if (!qla2x00_is_portname_equal(path->portname,
++                                  entry->PortName))
++                                      continue;
++
++                              for (lun = 0; lun < MAX_LUNS; lun++) {
++                                      path->lun_data.data[lun] =
++                                          entry->Data[lun];
++                                      DEBUG4(printk("cfg_set_lun_data: lun "
++                                          "data[%d] = 0x%x \n", lun,
++                                          path->lun_data.data[lun]);)
++                              }
++
++                              break;
++                      }
++                      break;
++              }
++      }
++
++      KMEM_FREE(list, FO_LUN_DATA_LIST);
++
++      DEBUG9(printk("%s: exiting. ret = %d.\n", __func__, ret);)
++
++      return ret;
++}
++
++/*
++ * qla2x00_fo_get_target_data
++ *      Get the target control byte for all devices attached to a HBA.
++ *
++ * Input:
++ *      bp = pointer to buffer
++ *
++ * Return;
++ *      0 on success or errno.
++ *
++ * Context:
++ *      Kernel context.
++ */
++static int
++qla2x00_fo_get_target_data(EXT_IOCTL *pext, FO_TARGET_DATA_INPUT *bp, int mode)
++{
++      scsi_qla_host_t  *ha;
++      struct list_head        *fcports, *fcpl;
++      fc_port_t        *fcport;
++      int              ret = 0;
++      mp_host_t        *host = NULL;
++      mp_device_t      *dp;
++      mp_path_t        *path;
++      mp_path_list_t   *pathlist;
++      os_tgt_t         *ostgt;
++      uint8_t          i, cnt;
++      uint8_t          path_id;
++      uint16_t         dev_no;
++      FO_DEVICE_DATA   *entry, *u_entry;
++      uint32_t        b;
++
++
++      DEBUG9(printk("%s: entered.\n", __func__);)
++
++      ha = qla2x00_get_hba((int)bp->HbaInstance);
++
++      if (!ha) {
++              DEBUG2_9_10(printk("%s: no ha matching inst %d.\n",
++                  __func__, bp->HbaInstance);)
++
++              pext->Status = EXT_STATUS_DEV_NOT_FOUND;
++              return (ret);
++      }
++
++      DEBUG9(printk("%s: ha inst %ld, buff %p.\n",
++          __func__, ha->instance, bp);)
++
++      if (ha->flags.failover_enabled)
++              if ((host = qla2x00_cfg_find_host(ha)) == NULL) {
++                      DEBUG2_9_10(printk("%s: no HOST for ha inst %ld.\n",
++                          __func__, ha->instance);)
++                      pext->Status = EXT_STATUS_DEV_NOT_FOUND;
++                      return (ret);
++              }
++
++      entry = (FO_DEVICE_DATA *)qla2x00_kmem_zalloc(
++          sizeof(FO_DEVICE_DATA), GFP_ATOMIC, 14);
++      if (entry == NULL) {
++              DEBUG2_9_10(printk("%s: failed to alloc memory of size (%d)\n",
++                  __func__, (int)sizeof(FO_DEVICE_DATA));)
++              pext->Status = EXT_STATUS_NO_MEMORY;
++              return (-ENOMEM);
++      }
++
++      u_entry = (FO_DEVICE_DATA *) pext->ResponseAdr;
++
++      /* find the correct fcport list */
++      if (!ha->flags.failover_enabled)
++              fcports = &ha->fcports;
++      else
++              fcports = host->fcports;
++
++      /* Check thru this adapter's fcport list */
++      i = 0;
++      fcport = NULL;
++      list_for_each(fcpl, fcports) {
++              fcport = list_entry(fcpl, fc_port_t, list);
++
++              if (i >= MAX_TARGETS)
++                      break;
++
++              memcpy(entry->WorldWideName,
++                  fcport->node_name, EXT_DEF_WWN_NAME_SIZE);
++              memcpy(entry->PortName,
++                  fcport->port_name, EXT_DEF_WWN_NAME_SIZE);
++
++              for (b = 0; b < 3 ; b++)
++                      entry->PortId[b] = fcport->d_id.r.d_id[2-b];
++
++              if (!ha->flags.failover_enabled) {
++                      /*
++                       * Failover disabled. Just find the port and return
++                       * target info.
++                       */
++                      for (cnt = 0; cnt < MAX_FIBRE_DEVICES; cnt++) {
++                              if (!(ostgt = ha->otgt[cnt])) {
++                                      continue;
++                              }
++
++                              if (ostgt->vis_port == fcport) {
++                                      entry->TargetId = cnt;
++                                      break;
++                              }
++                      }
++                      if (cnt == MAX_FIBRE_DEVICES) {
++                              /* Not found?  For now just go to next port. */
++#if defined(QL_DEBUG_LEVEL_2) || defined(QL_DEBUG_LEVEL_10)
++                              uint8_t          *tmp_name;
++
++                              tmp_name = fcport->port_name;
++
++                              printk("fo_get_target_data(%ld): ERROR "
++                                  "port %02x%02x%02x%02x%02x%02x%02x%02x "
++                                  "not configured.\n", ha->host_no,
++                                  tmp_name[0], tmp_name[1], tmp_name[2],
++                                  tmp_name[3], tmp_name[4], tmp_name[5],
++                                  tmp_name[6], tmp_name[7]);
++#endif /* DEBUG */
++
++                              continue;
++                      }
++
++                      entry->MultipathControl = 0; /* always configured */
++
++                      ret = verify_area(VERIFY_WRITE, (void *)u_entry,
++                          sizeof(FO_DEVICE_DATA));
++                      if (ret) {
++                              /* error */
++                              DEBUG2_9_10(printk("%s: u_entry %p verify "
++                                  " wrt err. tgt id=%d.\n",
++                                  __func__, u_entry, cnt);)
++                              pext->Status = EXT_STATUS_COPY_ERR;
++                              break;
++                      }
++
++                      ret = copy_to_user(u_entry, entry,
++                          sizeof(FO_DEVICE_DATA));
++                      if (ret) {
++                              /* error */
++                              DEBUG2_9_10(printk("%s: u_entry %p copy "
++                                  "out err. tgt id=%d.\n",
++                                  __func__, u_entry, cnt);)
++                              pext->Status = EXT_STATUS_COPY_ERR;
++                              break;
++                      }
++
++                      u_entry++;
++
++                      i++;
++                      continue;
++              }
++
++              /*
++               * Failover is enabled. Go through the mp_devs list and
++               * get target data in configured path.
++               */
++              for (dev_no = 0; dev_no < MAX_MP_DEVICES; dev_no++) {
++                      dp = host->mp_devs[dev_no];
++
++                      if (dp == NULL)
++                              continue;
++
++                      /* Lookup entry name */
++                      if (!qla2x00_is_portname_in_device(dp, entry->PortName))
++                              continue;
++
++                      if ((pathlist = dp->path_list) == NULL)
++                              continue;
++
++                      path = pathlist->last;
++                      for (path_id = 0; path_id < pathlist->path_cnt;
++                          path_id++, path= path->next) {
++
++                              if (path->host != host)
++                                      continue;
++
++                              if (!qla2x00_is_portname_equal(path->portname,
++                                  entry->PortName))
++                                      continue;
++
++                              entry->TargetId = dp->dev_id;
++                              entry->Dev_No = path->id;
++                              entry->MultipathControl = path->mp_byte;
++
++                              DEBUG9(printk("cfg_get_target_data: path->id "
++                                  "= %d, target data = 0x%x \n",
++                                  path->id, path->mp_byte);)
++
++                              ret = verify_area(VERIFY_WRITE, (void *)u_entry,
++                                  sizeof(FO_DEVICE_DATA));
++                              if (ret) {
++                                      /* error */
++                                      DEBUG2_9_10(printk("%s: u_entry %p "
++                                          "verify wrt err. tgt id=%d.\n",
++                                          __func__, u_entry, dp->dev_id);)
++                                      pext->Status = EXT_STATUS_COPY_ERR;
++                                      break;
++                              }
++
++                              ret = copy_to_user(u_entry, entry,
++                                  sizeof(FO_DEVICE_DATA));
++                              if (ret) {
++                                      /* error */
++                                      DEBUG2_9_10(printk("%s: u_entry %p "
++                                          "copy out err. tgt id=%d.\n",
++                                          __func__, u_entry, dp->dev_id);)
++                                      pext->Status = EXT_STATUS_COPY_ERR;
++                                      break;
++                              }
++
++                              u_entry++;
++
++                              /* Path found. Continue with next fcport */
++                              break;
++                      }
++                      break;
++              }
++              i++;
++      }
++
++      if (ret == 0) {
++              pext->ResponseLen = sizeof(FO_DEVICE_DATABASE);
++      }
++
++      KMEM_FREE(entry, sizeof(FO_DEVICE_DATA));
++
++      DEBUG9(printk("%s: exiting. ret = %d.\n", __func__, ret);)
++
++      return (ret);
++}
++
++/*
++ * qla2x00_fo_set_target_data
++ *      Set multipath control byte for all devices on the attached hba
++ *
++ * Input:
++ *      bp = pointer to buffer
++ *
++ * Return;
++ *      0 on success or errno.
++ *
++ * Context:
++ *      Kernel context.
++ */
++static int
++qla2x00_fo_set_target_data(EXT_IOCTL *pext, FO_TARGET_DATA_INPUT  *bp, int mode)
++{
++      scsi_qla_host_t  *ha;
++      int              i;
++      int              ret = 0;
++      mp_host_t        *host;
++      mp_device_t      *dp;
++      mp_path_t        *path;
++      mp_path_list_t   *pathlist;
++      uint16_t         dev_no;
++      uint8_t          path_id;
++      FO_DEVICE_DATA *entry, *u_entry;
++
++      DEBUG9(printk("%s: entered.\n", __func__);)
++
++      ha = qla2x00_get_hba((int)bp->HbaInstance);
++
++      if (!ha) {
++              DEBUG2_9_10(printk("%s: no ha matching inst %d.\n",
++                  __func__, bp->HbaInstance);)
++
++              pext->Status = EXT_STATUS_DEV_NOT_FOUND;
++              return (ret);
++      }
++
++      DEBUG9(printk("%s: ha inst %ld, buff %p.\n",
++          __func__, ha->instance, bp);)
++
++      if (!ha->flags.failover_enabled)
++              /* non-failover mode. nothing to be done. */
++              return 0;
++
++      if ((host = qla2x00_cfg_find_host(ha)) == NULL) {
++              DEBUG2_9_10(printk("%s: no HOST for ha inst %ld.\n",
++                  __func__, ha->instance);)
++              pext->Status = EXT_STATUS_DEV_NOT_FOUND;
++              return (ret);
++      }
++
++      entry = (FO_DEVICE_DATA *)qla2x00_kmem_zalloc(
++          sizeof(FO_DEVICE_DATA), GFP_ATOMIC, 15);
++      if (entry == NULL) {
++              DEBUG2_9_10(printk("%s: failed to alloc memory of size (%d)\n",
++                  __func__, (int)sizeof(FO_DEVICE_DATA));)
++              pext->Status = EXT_STATUS_NO_MEMORY;
++              return (-ENOMEM);
++      }
++
++      u_entry = (FO_DEVICE_DATA *)(pext->RequestAdr +
++          sizeof(FO_TARGET_DATA_INPUT));
++
++      for (i = 0; i < MAX_TARGETS; i++, u_entry++) {
++              ret = verify_area(VERIFY_READ, (void *)u_entry,
++                  sizeof(FO_DEVICE_DATA));
++              if (ret) {
++                      /* error */
++                      DEBUG2_9_10(printk("%s: u_entry %p verify read err.\n",
++                          __func__, u_entry);)
++                      pext->Status = EXT_STATUS_COPY_ERR;
++                      break;
++              }
++
++              ret = copy_from_user(entry, u_entry, sizeof(FO_DEVICE_DATA));
++
++              if (ret) {
++                      /* error */
++                      DEBUG2_9_10(printk("%s: u_entry %p copy error.\n",
++                          __func__, u_entry);)
++                      pext->Status = EXT_STATUS_COPY_ERR;
++                      break;
++              }
++
++              for (dev_no = 0; dev_no < MAX_MP_DEVICES; dev_no++) {
++                      dp = host->mp_devs[dev_no];
++
++                      if (dp == NULL)
++                              continue;
++
++                      /* Lookup entry name */
++                      if (!qla2x00_is_portname_in_device(dp, entry->PortName))
++                              continue;
++
++                      if ((pathlist = dp->path_list) == NULL)
++                              continue;
++
++                      path = pathlist->last;
++                      for (path_id = 0; path_id < pathlist->path_cnt;
++                          path_id++, path= path->next) {
++
++                              if (path->host != host)
++                                      continue;
++
++                              if (!qla2x00_is_portname_equal(path->portname,
++                                  entry->PortName))
++                                      continue;
++
++                              path->mp_byte = entry->MultipathControl;
++
++                              DEBUG9(printk("cfg_set_target_data: %d target "
++                                  "data = 0x%x \n",
++                                  path->id,path->mp_byte);)
++
++                              /*
++                               * If this is the visible path, then make it
++                               * available on next reboot.
++                               */
++                              if (!((path->mp_byte & MP_MASK_HIDDEN) ||
++                                  (path->mp_byte & MP_MASK_UNCONFIGURED))) {
++                                      pathlist->visible = path->id;
++                              }
++
++                              /* Found path. Go to next entry. */
++                              break;
++                      }
++                      break;
++              }
++      }
++
++      KMEM_FREE(entry, sizeof(FO_DEVICE_DATA));
++
++      DEBUG9(printk("%s: exiting. ret = %d.\n", __func__, ret);)
++
++      return (ret);
++
++}
++
++/*
++ * qla2x00_fo_ioctl
++ *    Provides functions for failover ioctl() calls.
++ *
++ * Input:
++ *    ha = adapter state pointer.
++ *    ioctl_code = ioctl function to perform
++ *    arg = Address of application EXT_IOCTL cmd data
++ *    mode = flags
++ *
++ * Returns:
++ *    Return value is the ioctl rval_p return value.
++ *    0 = success
++ *
++ * Context:
++ *    Kernel context.
++ */
++/* ARGSUSED */
++int
++qla2x00_fo_ioctl(scsi_qla_host_t *ha, int ioctl_code, void *ret_arg, int mode)
++{
++      static EXT_IOCTL cmd_struct;
++      int    rval = 0;
++      size_t  in_size, out_size;
++      static  union {
++              FO_PARAMS params;
++              FO_GET_PATHS path;
++              FO_SET_CURRENT_PATH set_path;
++              /* FO_HBA_STAT_INPUT stat; */
++              FO_HBA_STAT stat;
++              FO_LUN_DATA_INPUT lun_data;
++              FO_TARGET_DATA_INPUT target_data;
++      } buff;
++
++
++      ENTER("qla2x00_fo_ioctl");
++      DEBUG9(printk("%s: entered. arg (%p):\n", __func__, ret_arg);)
++
++      memcpy(&cmd_struct, ret_arg, sizeof(cmd_struct));
++
++      /*
++       * default case for this switch not needed,
++       * ioctl_code validated by caller.
++       */
++      in_size = out_size = 0;
++      switch (ioctl_code) {
++              case FO_CC_GET_PARAMS:
++                      out_size = sizeof(FO_PARAMS);
++                      break;
++              case FO_CC_SET_PARAMS:
++                      in_size = sizeof(FO_PARAMS);
++                      break;
++              case FO_CC_GET_PATHS:
++                      in_size = sizeof(FO_GET_PATHS);
++                      break;
++              case FO_CC_SET_CURRENT_PATH:
++                      in_size = sizeof(FO_SET_CURRENT_PATH);
++                      break;
++              case FO_CC_GET_HBA_STAT:
++              case FO_CC_RESET_HBA_STAT:
++                      in_size = sizeof(FO_HBA_STAT_INPUT);
++                      break;
++              case FO_CC_GET_LUN_DATA:
++                      in_size = sizeof(FO_LUN_DATA_INPUT);
++                      break;
++              case FO_CC_SET_LUN_DATA:
++                      in_size = sizeof(FO_LUN_DATA_INPUT);
++                      break;
++              case FO_CC_GET_TARGET_DATA:
++                      in_size = sizeof(FO_TARGET_DATA_INPUT);
++                      break;
++              case FO_CC_SET_TARGET_DATA:
++                      in_size = sizeof(FO_TARGET_DATA_INPUT);
++                      break;
++
++      }
++      if (in_size != 0) {
++              if ((int)cmd_struct.RequestLen < in_size) {
++                      cmd_struct.Status = EXT_STATUS_INVALID_PARAM;
++                      cmd_struct.DetailStatus = EXT_DSTATUS_REQUEST_LEN;
++                      DEBUG10(printk("%s: got invalie req len (%d).\n",
++                          __func__, cmd_struct.RequestLen);)
++
++              } else {
++
++                      rval = verify_area(VERIFY_READ,
++                          (void *)cmd_struct.RequestAdr, in_size);
++                      if (rval) {
++                              /* error */
++                              DEBUG2_9_10(printk("%s: req buf verify read "
++                                  "error. size=%d.\n",
++                                  __func__, in_size);)
++                              cmd_struct.Status = EXT_STATUS_COPY_ERR;
++                      }
++                      rval = copy_from_user(&buff,
++                          (void *)cmd_struct.RequestAdr, in_size);
++
++                      if (rval) {
++                              DEBUG2_9_10(printk("%s: req buf copy error. "
++                                  "size=%d.\n",
++                                  __func__, in_size);)
++
++                              cmd_struct.Status = EXT_STATUS_COPY_ERR;
++                      } else {
++                              DEBUG9(printk("qla2x00_fo_ioctl: req buf "
++                                  "copied ok.\n"));
++                      }
++              }
++      } else if (out_size != 0 && (int)cmd_struct.ResponseLen < out_size) {
++              cmd_struct.Status = EXT_STATUS_BUFFER_TOO_SMALL;
++              cmd_struct.DetailStatus = out_size;
++              DEBUG10(printk("%s: got invalie resp len (%d).\n",
++                  __func__, cmd_struct.ResponseLen);)
++      }
++
++      if (rval != 0 || cmd_struct.Status != 0)
++              goto done_fo_ioctl;
++
++      cmd_struct.Status = EXT_STATUS_OK;
++      cmd_struct.DetailStatus = EXT_STATUS_OK;
++
++      switch (ioctl_code) {
++              case FO_CC_GET_PARAMS:
++                      rval = qla2x00_fo_get_params(&buff.params);
++                      break;
++              case FO_CC_SET_PARAMS:
++                      rval = qla2x00_fo_set_params(&buff.params);
++                      break;
++              case FO_CC_GET_PATHS:
++                      rval = qla2x00_cfg_get_paths(&cmd_struct,
++                                      &buff.path,mode);
++                      if (rval != 0)
++                              out_size = 0;
++                      break;
++              case FO_CC_SET_CURRENT_PATH:
++                      rval = qla2x00_cfg_set_current_path(&cmd_struct,
++                                      &buff.set_path,mode);
++                      break;
++              case FO_CC_RESET_HBA_STAT:
++                      rval = qla2x00_fo_stats(&buff.stat, TRUE);
++                      break;
++              case FO_CC_GET_HBA_STAT:
++                      rval = qla2x00_fo_stats(&buff.stat, FALSE);
++                      break;
++              case FO_CC_GET_LUN_DATA:
++
++                      DEBUG4(printk("calling qla2x00_fo_get_lun_data\n");)
++                      DEBUG4(printk("cmd_struct.RequestAdr (%p):\n",
++                                      cmd_struct.RequestAdr);)
++
++                      rval = qla2x00_fo_get_lun_data(&cmd_struct,
++                          &buff.lun_data, mode);
++
++                      if (rval != 0)
++                              out_size = 0;
++                      break;
++              case FO_CC_SET_LUN_DATA:
++
++                      DEBUG4(printk("calling qla2x00_fo_set_lun_data\n");)
++                      DEBUG4(printk(" cmd_struct.RequestAdr (%p):\n",
++                          cmd_struct.RequestAdr);)
++
++                      rval = qla2x00_fo_set_lun_data(&cmd_struct,
++                          &buff.lun_data, mode);
++                      break;
++              case FO_CC_GET_TARGET_DATA:
++                      DEBUG4(printk("calling qla2x00_fo_get_target_data\n");)
++                      DEBUG4(printk("cmd_struct.RequestAdr (%p):\n",
++                          cmd_struct.RequestAdr);)
++
++                      rval = qla2x00_fo_get_target_data(&cmd_struct,
++                          &buff.target_data, mode);
++
++                      if (rval != 0) {
++                              out_size = 0;
++                      }
++                      break;
++              case FO_CC_SET_TARGET_DATA:
++                      DEBUG4(printk("calling qla2x00_fo_set_target_data\n");)
++                      DEBUG4(printk(" cmd_struct.RequestAdr (%p):\n",
++                          cmd_struct.RequestAdr);)
++                      rval = qla2x00_fo_set_target_data(&cmd_struct,
++                          &buff.target_data, mode);
++                      break;
++
++      }
++
++      if (rval == 0 && (cmd_struct.ResponseLen = out_size) != 0) {
++              rval = verify_area(VERIFY_WRITE, (void *)cmd_struct.ResponseAdr,
++                  out_size);
++              if (rval != 0) {
++                      DEBUG10(printk("%s: resp buf very write error.\n",
++                          __func__);)
++                      cmd_struct.Status = EXT_STATUS_COPY_ERR;
++              }
++      }
++
++      if (rval == 0) {
++              rval = copy_to_user((void *)cmd_struct.ResponseAdr,
++                  &buff, out_size);
++
++              if (rval != 0) {
++                      DEBUG10(printk("%s: resp buf copy error. size=%d.\n",
++                          __func__, out_size);)
++                      cmd_struct.Status = EXT_STATUS_COPY_ERR;
++              }
++      }
++
++done_fo_ioctl:
++
++      /* Set Status and DetailStatus fields in application EXT_IOCTL */
++      (((EXT_IOCTL*)ret_arg)->Status)         = cmd_struct.Status;
++      (((EXT_IOCTL*)ret_arg)->DetailStatus)   = cmd_struct.DetailStatus;
++      (((EXT_IOCTL*)ret_arg)->ResponseLen)    = cmd_struct.ResponseLen;
++
++      if (rval != 0) {
++              /*EMPTY*/
++              DEBUG10(printk("%s: **** FAILED ****\n", __func__);)
++      } else {
++              /*EMPTY*/
++              DEBUG9(printk("%s: exiting normally\n", __func__);)
++      }
++
++      return rval;
++}
++
++
++/*
++ * qla2x00_fo_count_retries
++ *    Increment the retry counter for the command.
++ *      Set or reset the SRB_RETRY flag.
++ *
++ * Input:
++ *    sp = Pointer to command.
++ *
++ * Returns:
++ *    TRUE -- retry
++ *    FALSE -- don't retry
++ *
++ * Context:
++ *    Kernel context.
++ */
++static uint8_t
++qla2x00_fo_count_retries(scsi_qla_host_t *ha, srb_t *sp)
++{
++      uint8_t         retry = TRUE;
++      os_lun_t        *lq;
++      os_tgt_t        *tq;
++
++      DEBUG9(printk("%s: entered.\n", __func__);)
++
++      if (++sp->fo_retry_cnt >  qla_fo_params.MaxRetriesPerIo) {
++              /* no more failovers for this request */
++              retry = FALSE;
++              sp->fo_retry_cnt = 0;
++              printk(KERN_INFO
++                  "qla2x00: no more failovers for request - "
++                  "pid= %ld\n", sp->cmd->serial_number);
++      } else {
++              /*
++               * We haven't exceeded the max retries for this request, check
++               * max retries this path
++               */
++              if ((sp->fo_retry_cnt % qla_fo_params.MaxRetriesPerPath) == 0) {
++                      DEBUG(printk(" qla2x00_fo_count_retries: FAILOVER - "
++                          "queuing ha=%ld, sp=%p, pid =%ld, "
++                          "fo retry= %d \n",
++                          ha->host_no,
++                          sp, sp->cmd->serial_number,
++                          sp->fo_retry_cnt);)
++
++                      /*
++                       * Note: we don't want it to timeout, so it is
++                       * recycling on the retry queue and the fialover queue.
++                       */
++                      lq = sp->lun_queue;
++                      tq = sp->tgt_queue;
++                      set_bit(LUN_MPIO_BUSY, &lq->q_flag);
++
++                      /*
++                       * ??? We can get a path error on any ha, but always
++                       * queue failover on originating ha. This will allow us
++                       * to syncronized the requests for a given lun.
++                       */
++                      sp->f_start=jiffies;/*ra 10/29/01*/
++                      /* Now queue it on to be failover */
++                      sp->ha = ha;
++                      add_to_failover_queue(ha,sp);
++              }
++      }
++
++      DEBUG9(printk("%s: exiting. retry = %d.\n", __func__, retry);)
++
++      return retry ;
++}
++
++
++/*
++ * qla2x00_fo_check
++ *    This function is called from the done routine to see if
++ *  the SRB requires a failover.
++ *
++ *    This function examines the available os returned status and
++ *  if meets condition, the command(srb) is placed ont the failover
++ *  queue for processing.
++ *
++ * Input:
++ *    sp  = Pointer to the SCSI Request Block
++ *
++ * Output:
++ *      sp->flags SRB_RETRY bit id command is to
++ *      be retried otherwise bit is reset.
++ *
++ * Returns:
++ *      None.
++ *
++ * Context:
++ *    Kernel/Interrupt context.
++ */
++uint8_t
++qla2x00_fo_check(scsi_qla_host_t *ha, srb_t *sp)
++{
++      uint8_t         retry = FALSE;
++      int host_status;
++#if DEBUG_QLA2100
++      static char *reason[] = {
++              "DID_OK",
++              "DID_NO_CONNECT",
++              "DID_BUS_BUSY",
++              "DID_TIME_OUT",
++              "DID_BAD_TARGET",
++              "DID_ABORT",
++              "DID_PARITY",
++              "DID_ERROR",
++              "DID_RESET",
++              "DID_BAD_INTR"
++      };
++#endif
++
++      DEBUG9(printk("%s: entered.\n", __func__);)
++
++      /* we failover on selction timeouts only */
++      host_status = CMD_RESULT(sp->cmd) >>16;
++      if( host_status == DID_NO_CONNECT) {
++              if( qla2x00_fo_count_retries(ha,sp) ) {
++                      /* Force a retry  on this request, it will
++                       * cause the LINUX timer to get reset, while we
++                       * we are processing the failover.
++                       */
++                      CMD_RESULT(sp->cmd) = DID_BUS_BUSY << 16;
++                      retry = TRUE;
++              }
++              DEBUG(printk("qla2x00_fo_check: pid= %ld sp %p "
++                              "retry count=%d, retry flag = %d, "
++                              "host status (%s)\n\r",
++                              sp->cmd->serial_number,
++                              sp, sp->fo_retry_cnt,
++                              retry, reason[host_status]);)
++      }
++
++      DEBUG9(printk("%s: exiting. retry = %d.\n", __func__, retry);)
++
++      return retry;
++}
++
++/*
++ * qla2x00_fo_path_change
++ *    This function is called from configuration mgr to notify
++ *    of a path change.
++ *
++ * Input:
++ *      type    = Failover notify type, FO_NOTIFY_LUN_RESET or FO_NOTIFY_LOGOUT
++ *      newlunp = Pointer to the fc_lun struct for current path.
++ *      oldlunp = Pointer to fc_lun struct for previous path.
++ *
++ * Returns:
++ *
++ * Context:
++ *    Kernel context.
++ */
++uint32_t
++qla2x00_fo_path_change(uint32_t type, fc_lun_t *newlunp, fc_lun_t *oldlunp)
++{
++      uint32_t        ret = QLA2X00_SUCCESS;
++
++      newlunp->max_path_retries = 0;
++      return ret;
++}
++
++/*
++ * qla2x00_fo_get_params
++ *    Process an ioctl request to get system wide failover parameters.
++ *
++ * Input:
++ *    pp = Pointer to FO_PARAMS structure.
++ *
++ * Returns:
++ *    EXT_STATUS code.
++ *
++ * Context:
++ *    Kernel context.
++ */
++static uint32_t
++qla2x00_fo_get_params(PFO_PARAMS pp)
++{
++      DEBUG9(printk("%s: entered.\n", __func__);)
++
++      pp->MaxPathsPerDevice = qla_fo_params.MaxPathsPerDevice;
++      pp->MaxRetriesPerPath = qla_fo_params.MaxRetriesPerPath;
++      pp->MaxRetriesPerIo = qla_fo_params.MaxRetriesPerIo;
++      pp->Flags = qla_fo_params.Flags;
++      pp->FailoverNotifyType = qla_fo_params.FailoverNotifyType;
++      pp->FailoverNotifyCdbLength = qla_fo_params.FailoverNotifyCdbLength;
++      memset(pp->FailoverNotifyCdb, 0, sizeof(pp->FailoverNotifyCdb));
++      memcpy(pp->FailoverNotifyCdb,
++          &qla_fo_params.FailoverNotifyCdb[0], sizeof(pp->FailoverNotifyCdb));
++
++      DEBUG9(printk("%s: exiting.\n", __func__);)
++
++      return EXT_STATUS_OK;
++}
++
++/*
++ * qla2x00_fo_set_params
++ *    Process an ioctl request to set system wide failover parameters.
++ *
++ * Input:
++ *    pp = Pointer to FO_PARAMS structure.
++ *
++ * Returns:
++ *    EXT_STATUS code.
++ *
++ * Context:
++ *    Kernel context.
++ */
++static uint32_t
++qla2x00_fo_set_params(PFO_PARAMS pp)
++{
++      DEBUG9(printk("%s: entered.\n", __func__);)
++
++      /* Check values for defined MIN and MAX */
++      if ((pp->MaxPathsPerDevice > SDM_DEF_MAX_PATHS_PER_DEVICE) ||
++          (pp->MaxRetriesPerPath < FO_MAX_RETRIES_PER_PATH_MIN) ||
++          (pp->MaxRetriesPerPath > FO_MAX_RETRIES_PER_PATH_MAX) ||
++          (pp->MaxRetriesPerIo < FO_MAX_RETRIES_PER_IO_MIN) ||
++          (pp->MaxRetriesPerPath > FO_MAX_RETRIES_PER_IO_MAX)) {
++              DEBUG2_9_10(printk("%s: got invalid params.\n", __func__);)
++              return EXT_STATUS_INVALID_PARAM;
++      }
++
++      /* Update the global structure. */
++      qla_fo_params.MaxPathsPerDevice = pp->MaxPathsPerDevice;
++      qla_fo_params.MaxRetriesPerPath = pp->MaxRetriesPerPath;
++      qla_fo_params.MaxRetriesPerIo = pp->MaxRetriesPerIo;
++      qla_fo_params.Flags = pp->Flags;
++      qla_fo_params.FailoverNotifyType = pp->FailoverNotifyType;
++      qla_fo_params.FailoverNotifyCdbLength = pp->FailoverNotifyCdbLength;
++      if (pp->FailoverNotifyType & FO_NOTIFY_TYPE_CDB) {
++              if (pp->FailoverNotifyCdbLength >
++                  sizeof(qla_fo_params.FailoverNotifyCdb)) {
++                      DEBUG2_9_10(printk("%s: got invalid cdb length.\n",
++                          __func__);)
++                      return EXT_STATUS_INVALID_PARAM;
++              }
++
++              memcpy(qla_fo_params.FailoverNotifyCdb,
++                  pp->FailoverNotifyCdb,
++                  sizeof(qla_fo_params.FailoverNotifyCdb));
++      }
++
++      DEBUG9(printk("%s: exiting.\n", __func__);)
++
++      return EXT_STATUS_OK;
++}
++
++
++/*
++ * qla2x00_fo_init_params
++ *    Gets driver configuration file failover properties to initalize
++ *    the global failover parameters structure.
++ *
++ * Input:
++ *    ha = adapter block pointer.
++ *
++ * Context:
++ *    Kernel context.
++ */
++void
++qla2x00_fo_init_params(scsi_qla_host_t *ha)
++{
++      DEBUG3(printk("%s: entered.\n", __func__);)
++
++      /* For parameters that are not completely implemented yet, */
++
++      memset(&qla_fo_params, 0, sizeof(qla_fo_params));
++
++      if(MaxPathsPerDevice) {
++              qla_fo_params.MaxPathsPerDevice = MaxPathsPerDevice;
++      } else
++              qla_fo_params.MaxPathsPerDevice =FO_MAX_PATHS_PER_DEVICE_DEF ;
++      if(MaxRetriesPerPath) {
++              qla_fo_params.MaxRetriesPerPath = MaxRetriesPerPath;
++      } else
++              qla_fo_params.MaxRetriesPerPath =FO_MAX_RETRIES_PER_PATH_DEF;
++      if(MaxRetriesPerIo) {
++              qla_fo_params.MaxRetriesPerIo =MaxRetriesPerIo;
++      } else
++              qla_fo_params.MaxRetriesPerIo =FO_MAX_RETRIES_PER_IO_DEF;
++
++      qla_fo_params.Flags =  0;
++      qla_fo_params.FailoverNotifyType = FO_NOTIFY_TYPE_NONE;
++
++      DEBUG3(printk("%s: exiting.\n", __func__);)
++
++}
++
++/*
++ * qla2x00_send_fo_notification
++ *      Sends failover notification if needed.  Change the fc_lun pointer
++ *      in the old path lun queue.
++ *
++ * Input:
++ *      old_lp = Pointer to old fc_lun.
++ *      new_lp = Pointer to new fc_lun.
++ *
++ * Returns:
++ *      Local function status code.
++ *
++ * Context:
++ *      Kernel context.
++ */
++uint32_t
++qla2x00_send_fo_notification(fc_lun_t *old_lp, fc_lun_t *new_lp)
++{
++      scsi_qla_host_t *old_ha = old_lp->fcport->ha;
++      int             rval = QLA2X00_SUCCESS;
++      inq_cmd_rsp_t   *pkt;
++      uint16_t        loop_id, lun;
++      dma_addr_t      phys_address;
++
++
++      ENTER("qla2x00_send_fo_notification");
++      DEBUG3(printk("%s: entered.\n", __func__);)
++
++      loop_id = old_lp->fcport->loop_id;
++      lun = old_lp->lun;
++
++      if (qla_fo_params.FailoverNotifyType == FO_NOTIFY_TYPE_LUN_RESET) {
++              rval = qla2x00_lun_reset(old_ha, loop_id, lun);
++              if (rval == QLA2X00_SUCCESS) {
++                      DEBUG4(printk("qla2x00_send_fo_notification: LUN "
++                          "reset succeded\n");)
++              } else {
++                      DEBUG4(printk("qla2x00_send_fo_notification: LUN "
++                          "reset failed\n");)
++              }
++
++      }
++      if ( (qla_fo_params.FailoverNotifyType ==
++           FO_NOTIFY_TYPE_LOGOUT_OR_LUN_RESET) ||
++          (qla_fo_params.FailoverNotifyType ==
++           FO_NOTIFY_TYPE_LOGOUT_OR_CDB) )  {
++
++              rval = qla2x00_fabric_logout(old_ha, loop_id);
++              if (rval == QLA2X00_SUCCESS) {
++                      DEBUG4(printk("qla2x00_send_fo_failover_notify: "
++                          "logout succeded\n");)
++              } else {
++                      DEBUG4(printk("qla2x00_send_fo_failover_notify: "
++                          "logout failed\n");)
++              }
++
++      }
++
++      if (qla_fo_params.FailoverNotifyType == FO_NOTIFY_TYPE_CDB) {
++              pkt = pci_alloc_consistent(old_ha->pdev,
++                  sizeof(inq_cmd_rsp_t), &phys_address);
++              if (pkt == NULL) {
++                      DEBUG4(printk("qla2x00_send_fo_failover_notify: "
++                          "memory allocation failed\n");)
++
++                      return(QLA2X00_FUNCTION_FAILED);
++              }
++
++              memset(pkt,0, sizeof(inq_cmd_rsp_t));
++              pkt->p.cmd.entry_type = COMMAND_A64_TYPE;
++              pkt->p.cmd.entry_count = 1;
++              pkt->p.cmd.lun = lun;
++              pkt->p.cmd.target = (uint8_t)loop_id;
++              pkt->p.cmd.control_flags = CF_SIMPLE_TAG;
++              memcpy(pkt->p.cmd.scsi_cdb,
++                  qla_fo_params.FailoverNotifyCdb,
++                  qla_fo_params.FailoverNotifyCdbLength);
++              /* FIXME This setup needs to be verified with Dennis. */
++              pkt->p.cmd.dseg_count = __constant_cpu_to_le16(1);
++              pkt->p.cmd.byte_count = __constant_cpu_to_le32(0);
++              pkt->p.cmd.dseg_0_address[0] = cpu_to_le32(
++                  LSD(phys_address + sizeof (sts_entry_t)));
++              pkt->p.cmd.dseg_0_address[1] = cpu_to_le32(
++                  MSD(phys_address + sizeof (sts_entry_t)));
++              pkt->p.cmd.dseg_0_length = __constant_cpu_to_le32(0);
++
++              rval = qla2x00_issue_iocb(old_ha,
++                  pkt, phys_address, sizeof (inq_cmd_rsp_t));
++
++              if (rval != QLA2X00_SUCCESS ||
++                  pkt->p.rsp.comp_status != CS_COMPLETE ||
++                  pkt->p.rsp.scsi_status & SS_CHECK_CONDITION ||
++                  pkt->inq[0] == 0x7f) {
++
++                      DEBUG4(printk("qla2x00_fo_notification: send CDB "
++                          "failed: comp_status = %x"
++                          "scsi_status = %x inq[0] = %x\n",
++                          pkt->p.rsp.comp_status,
++                          pkt->p.rsp.scsi_status,
++                          pkt->inq[0]);)
++              }
++
++              pci_free_consistent(old_ha->pdev,
++                  sizeof(inq_cmd_rsp_t), pkt, phys_address);
++      }
++
++      DEBUG3(printk("%s: exiting. rval = %d.\n", __func__, rval);)
++
++      return rval;
++}
++
++
++/*
++ * qla2100_fo_enabled
++ *      Reads and validates the failover enabled property.
++ *
++ * Input:
++ *      ha = adapter state pointer.
++ *      instance = HBA number.
++ *
++ * Returns:
++ *      TRUE when failover is authorized else FALSE
++ *
++ * Context:
++ *      Kernel context.
++ */
++uint8_t
++qla2x00_fo_enabled(scsi_qla_host_t *ha, int instance)
++{
++      uint8_t enable = FALSE;
++
++      if (ha->flags.failover_enabled)
++              enable = TRUE;
++
++      return enable;
++}
+--- /dev/null  Thu Apr 11 07:25:15 2002
++++ linux-2.5.73-n9560/drivers/scsi/qla2xxx/qla_fo.cfg Thu Jul  3 15:34:42 2003
+@@ -0,0 +1,31 @@
++/******************************************************************************
++ *                  QLOGIC LINUX SOFTWARE
++ *
++ * QLogic ISP2x00 device driver for Linux 2.4.x
++ * Copyright (C) 2003 Qlogic Corporation
++ * (www.qlogic.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, 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.
++ *
++ ******************************************************************************/
++
++/*
++ * QLogic ISP2x00 Multi-path LUN Support Driver
++ */
++int   MaxPathsPerDevice = 0;
++int   MaxRetriesPerPath =0 ;
++int   MaxRetriesPerIo =0;
++#if defined(MODULE)
++/* insmod qla2100 <options> ql2xopts=<string> */
++MODULE_PARM(MaxPathsPerDevice, "i");
++MODULE_PARM(MaxRetriesPerPath, "i");
++MODULE_PARM(MaxRetriesPerIo, "i");
++#endif
+--- /dev/null  Thu Apr 11 07:25:15 2002
++++ linux-2.5.73-n9560/drivers/scsi/qla2xxx/qla_fo.h   Thu Jul  3 15:34:42 2003
+@@ -0,0 +1,75 @@
++/******************************************************************************
++ *                  QLOGIC LINUX SOFTWARE
++ *
++ * QLogic ISP2x00 device driver for Linux 2.5.x
++ * Copyright (C) 2003 Qlogic Corporation
++ * (www.qlogic.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, 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.
++ *
++ ******************************************************************************/
++
++/*
++ * QLogic ISP2x00 Failover Header 
++ *
++ */
++#ifndef _QLA_FO_H
++#define _QLA_FO_H
++
++#if defined(__cplusplus)
++extern "C"
++{
++#endif
++
++#include "qlfo.h"
++        /*
++         * This structure definition is for a scsi I/O request NOT subject to
++         * failover re-routing.  It is for the use of configuration operations
++         * and diagnostics functions as definted in ExIoct.h
++         */
++        typedef struct scsi_cdb_request {
++                struct adapter_state          *ha;
++                uint16_t      target;
++                uint16_t      lun;
++                uint8_t               *cdb_ptr;       /* Pointer to cdb to be sent */
++                uint8_t               cdb_len;        /* cdb length */
++                uint8_t               direction;      /* Direction of I/O for buffer */
++                uint8_t               scb_len;        /* Scsi completion block length */
++                uint8_t               *scb_ptr;       /* Scsi completion block pointer */
++                uint8_t               *buf_ptr;       /* Pointer to I/O buffer */
++                uint16_t      buf_len;        /* Buffer size */
++        }
++        SCSI_REQ_t, *SCSI_REQ_p;
++
++
++        /*
++        * Special defines
++        */
++        typedef       union   _FO_HBA_STAT {
++                FO_HBA_STAT_INPUT     input;
++                FO_HBA_STAT_INFO      info;
++        } FO_HBA_STAT;
++
++        typedef       union   _FO_LUN_DATA {
++                FO_LUN_DATA_INPUT     input;
++                FO_LUN_DATA_LIST      list;
++        } FO_LUN_DATA;
++
++        typedef union _FO_TARGET_DATA {
++                FO_TARGET_DATA_INPUT    input;
++                FO_DEVICE_DATABASE    list;
++        } FO_TARGET_DATA;
++
++#if defined(__cplusplus)
++}
++#endif
++
++#endif        /* ifndef _QLA_FO_H */
+--- /dev/null  Thu Apr 11 07:25:15 2002
++++ linux-2.5.73-n9560/drivers/scsi/qla2xxx/qla_gbl.h  Thu Jul  3 15:34:42 2003
+@@ -0,0 +1,395 @@
++/********************************************************************************
++*                  QLOGIC LINUX SOFTWARE
++*
++* QLogic ISP2x00 device driver for Linux 2.5.x
++* Copyright (C) 2003 Qlogic Corporation
++* (www.qlogic.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, 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.
++*
++******************************************************************************
++* Global include file.
++******************************************************************************/
++
++
++#ifndef __QLA_GBL_H
++#define       __QLA_GBL_H
++
++/*
++ * Global Data in FW files.
++ */
++extern unsigned char  fw2100tp_version[];
++extern unsigned char  fw2100tp_version_str[];
++extern unsigned short fw2100tp_addr01;
++extern unsigned short fw2100tp_code01[];
++extern unsigned short fw2100tp_length01;
++
++extern unsigned char  fw2200ip_version[];
++extern unsigned char  fw2200ip_version_str[];
++extern unsigned short fw2200ip_addr01;
++extern unsigned short fw2200ip_code01[];
++extern unsigned short fw2200ip_length01;
++
++extern unsigned char  fw2300tpx_version[];
++extern unsigned char  fw2300tpx_version_str[];
++extern unsigned short fw2300tpx_addr01;
++extern unsigned short fw2300tpx_code01[];
++extern unsigned short fw2300tpx_length01;
++
++extern unsigned char  fw2300ipx_version[];
++extern unsigned char  fw2300ipx_version_str[];
++extern unsigned short fw2300ipx_addr01;
++extern unsigned short fw2300ipx_code01[];
++extern unsigned short fw2300ipx_length01;
++
++#if defined(ISP2322)
++extern unsigned char  fw2322tpx_version[];
++extern unsigned char  fw2322tpx_version_str[];
++extern unsigned short fw2322tpx_addr01;
++extern unsigned short fw2322tpx_code01[];
++extern unsigned short fw2322tpx_length01;
++extern unsigned long rseqtpx_code_addr01;
++extern unsigned short rseqtpx_code01[];
++extern unsigned short rseqtpx_code_length01;
++extern unsigned long xseqtpx_code_addr01;
++extern unsigned short xseqtpx_code01[];
++extern unsigned short xseqtpx_code_length01;
++
++extern unsigned char  fw2322ipx_version[];
++extern unsigned char  fw2322ipx_version_str[];
++extern unsigned short fw2322ipx_addr01;
++extern unsigned short fw2322ipx_code01[];
++extern unsigned short fw2322ipx_length01;
++extern unsigned long rseqipx_code_addr01;
++extern unsigned short rseqipx_code01[];
++extern unsigned short rseqipx_code_length01;
++extern unsigned long xseqipx_code_addr01;
++extern unsigned short xseqipx_code01[];
++extern unsigned short xseqipx_code_length01;
++#endif
++
++/*
++ * Global Function Prototypes in qla_init.c source file.
++ */
++extern uint8_t qla2x00_initialize_adapter(scsi_qla_host_t *);
++extern uint8_t qla2x00_loop_resync(scsi_qla_host_t *);
++extern void qla2x00_tgt_free(scsi_qla_host_t *ha, uint16_t t);
++extern uint8_t qla2x00_fabric_login(scsi_qla_host_t *, fcdev_t *);
++extern uint8_t qla2x00_local_device_login(scsi_qla_host_t *, uint16_t);
++
++extern void qla2x00_restart_queues(scsi_qla_host_t *, uint8_t);
++
++extern os_tgt_t *qla2x00_tgt_alloc(scsi_qla_host_t *, uint16_t);
++extern os_lun_t * qla2x00_lun_alloc(scsi_qla_host_t *, uint16_t, uint16_t);
++
++extern uint8_t qla2x00_abort_isp(scsi_qla_host_t *, uint8_t);
++
++
++/*
++ * Global Data in qla_os.c source file.
++ */
++extern char qla2x00_version_str[];
++extern unsigned long qla2x00_verbose;
++extern unsigned long qla2x00_quiet;
++extern unsigned long qla2x00_reinit;
++extern unsigned long qla2x00_req_dmp;
++
++extern int num_hosts;
++extern int apiHBAInstance;
++
++extern struct _qla2x00stats qla2x00_stats;
++extern char *ql2xdevconf;
++extern int ql2xretrycount;
++extern int qla2xenbinq;
++extern int max_srbs;
++#if defined(ISP2200) || defined(ISP2300)
++extern int ql2xlogintimeout;
++extern int qlport_down_retry;
++#endif
++extern int ql2xmaxqdepth;
++extern int displayConfig;
++
++extern int ql2xfailover;
++
++extern int ConfigRequired;
++extern int recoveryTime;
++extern int failbackTime;
++
++extern int Bind;
++extern int ql2xsuspendcount;
++extern int qla2x00_retryq_dmp;
++#if defined(MODULE)
++extern char *ql2xopts;
++#endif
++extern struct list_head qla_hostlist;
++extern rwlock_t qla_hostlist_lock;
++
++extern int qla2x00_queuecommand(Scsi_Cmnd *, void (*)(Scsi_Cmnd *));
++
++extern uint8_t 
++__qla2x00_suspend_lun(scsi_qla_host_t *, os_lun_t *, int, int, int);
++
++extern int qla2x00_done(scsi_qla_host_t *);
++extern void qla2x00_next(scsi_qla_host_t *);
++extern void qla2x00_flush_failover_q(scsi_qla_host_t *, os_lun_t *);
++extern void qla2x00_reset_lun_fo_counts(scsi_qla_host_t *, os_lun_t *);
++
++extern uint8_t qla2x00_check_tgt_status(scsi_qla_host_t *, Scsi_Cmnd *);
++extern uint8_t qla2x00_check_port_status(scsi_qla_host_t *, fc_port_t *);
++
++extern void qla2x00_extend_timeout(Scsi_Cmnd *, int);
++extern srb_t * qla2x00_get_new_sp (scsi_qla_host_t *ha);
++
++extern void qla2x00_mark_device_lost(scsi_qla_host_t *, fc_port_t *);
++extern void qla2x00_mark_all_devices_lost(scsi_qla_host_t *);
++
++extern int qla2x00_get_prop_xstr(scsi_qla_host_t *, char *, uint8_t *, int);
++
++extern void qla2x00_abort_queues(scsi_qla_host_t *, uint8_t);
++
++/*
++ * Global Function Prototypes in qla_iocb.c source file.
++ */
++extern request_t *qla2x00_req_pkt(scsi_qla_host_t *);
++extern request_t *qla2x00_ms_req_pkt(scsi_qla_host_t *, srb_t *);
++extern void qla2x00_isp_cmd(scsi_qla_host_t *);
++extern int qla2x00_start_scsi(srb_t *sp);
++int qla2x00_marker(scsi_qla_host_t *, uint16_t, uint16_t, uint8_t);
++int __qla2x00_marker(scsi_qla_host_t *, uint16_t, uint16_t, uint8_t);
++
++/*
++ * Global Function Prototypes in qla_mbx.c source file.
++ */
++extern uint8_t
++qla2x00_mailbox_command(scsi_qla_host_t *, mbx_cmd_t *);
++
++extern int
++qla2x00_load_ram(scsi_qla_host_t *, dma_addr_t, uint16_t, uint16_t);
++
++extern int
++qla2x00_load_ram_ext(scsi_qla_host_t *, dma_addr_t, uint32_t, uint16_t);
++
++extern int
++qla2x00_execute_fw(scsi_qla_host_t *);
++
++extern void
++qla2x00_get_fw_version(scsi_qla_host_t *, uint16_t *,
++    uint16_t *, uint16_t *, uint16_t *);
++
++extern int
++qla2x00_get_fw_options(scsi_qla_host_t *, uint16_t *, uint16_t *, uint16_t *);
++
++extern int
++qla2x00_set_fw_options(scsi_qla_host_t *,
++    uint16_t, uint16_t, uint16_t, uint16_t, uint16_t);
++
++extern int
++qla2x00_read_ram_word(scsi_qla_host_t *, uint16_t, uint16_t *);
++extern int
++qla2x00_write_ram_word(scsi_qla_host_t *, uint16_t, uint16_t);
++extern int
++qla2x00_write_ram_word_ext(scsi_qla_host_t *, uint32_t, uint16_t);
++
++extern int
++qla2x00_mbx_reg_test(scsi_qla_host_t *);
++
++extern int
++qla2x00_verify_checksum(scsi_qla_host_t *);
++
++extern int
++qla2x00_issue_iocb(scsi_qla_host_t *, void *, dma_addr_t, size_t);
++
++extern int
++qla2x00_abort_command(scsi_qla_host_t *, srb_t *);
++
++extern int
++qla2x00_abort_device(scsi_qla_host_t *, uint16_t, uint16_t);
++
++#if USE_ABORT_TGT
++extern int
++qla2x00_abort_target(fc_port_t *fcport);
++#endif
++
++extern int
++qla2x00_target_reset(scsi_qla_host_t *, uint16_t, uint16_t);
++
++extern int
++qla2x00_get_adapter_id(scsi_qla_host_t *, uint16_t *, uint8_t *, uint8_t *,
++    uint8_t *, uint16_t *);
++
++extern int
++qla2x00_get_retry_cnt(scsi_qla_host_t *, uint8_t *, uint8_t *);
++
++int
++qla2x00_loopback_test(scsi_qla_host_t *, INT_LOOPBACK_REQ *, uint16_t *);
++
++extern int
++qla2x00_init_firmware(scsi_qla_host_t *, uint16_t);
++
++extern int
++qla2x00_get_port_database(scsi_qla_host_t *, fcdev_t *, uint8_t);
++
++extern int
++qla2x00_get_firmware_state(scsi_qla_host_t *, uint16_t *);
++
++extern int
++qla2x00_get_port_name(scsi_qla_host_t *, uint16_t, uint8_t *, uint8_t);
++
++extern uint8_t
++qla2x00_get_link_status(scsi_qla_host_t *, uint8_t, void *, uint16_t *);
++
++extern int
++qla2x00_lip_reset(scsi_qla_host_t *);
++
++extern int
++qla2x00_send_sns(scsi_qla_host_t *, dma_addr_t, uint16_t, size_t);
++
++extern int
++qla2x00_login_fabric(scsi_qla_host_t *, uint16_t, uint8_t, uint8_t, uint8_t,
++    uint16_t *, uint8_t);
++
++extern int
++qla2x00_login_local_device(scsi_qla_host_t *, uint16_t, uint16_t *, uint8_t);
++
++extern int
++qla2x00_fabric_logout(scsi_qla_host_t *ha, uint16_t loop_id);
++
++extern int
++qla2x00_full_login_lip(scsi_qla_host_t *ha);
++
++extern int
++qla2x00_get_port_list(scsi_qla_host_t *, port_list_entry_t *, dma_addr_t,
++    uint16_t, uint16_t *);
++
++#if 0 /* not yet needed */
++extern int
++qla2x00_dump_ram(scsi_qla_host_t *, uint32_t, dma_addr_t, uint32_t);
++#endif
++
++extern int
++qla2x00_lun_reset(scsi_qla_host_t *, uint16_t, uint16_t);
++
++extern int
++qla2x00_send_rnid_mbx(scsi_qla_host_t *, uint16_t, uint8_t, dma_addr_t,
++    size_t, uint16_t *);
++
++extern int
++qla2x00_set_rnid_params_mbx(scsi_qla_host_t *, dma_addr_t, size_t, uint16_t *);
++
++extern int
++qla2x00_get_rnid_params_mbx(scsi_qla_host_t *, dma_addr_t, size_t, uint16_t *);
++
++#if defined(QL_DEBUG_LEVEL_3)
++extern int
++qla2x00_get_fcal_position_map(scsi_qla_host_t *ha, char *pos_map);
++#endif
++
++/*
++ * Global Data in qla_fo.c source file.
++ */
++extern SysFoParams_t qla_fo_params;
++
++/*
++ * Global Function Prototypes in qla_fo.c source file.
++ */
++extern scsi_qla_host_t *qla2x00_get_hba(int);
++extern uint32_t qla2x00_send_fo_notification(fc_lun_t *fclun_p, fc_lun_t *olun_p);
++extern void qla2x00_fo_init_params(scsi_qla_host_t *ha);
++extern uint8_t qla2x00_fo_enabled(scsi_qla_host_t *ha, int instance);
++
++/*
++ * Global Data in qla_cfg.c source file.
++ */
++extern mp_host_t  *mp_hosts_base;
++extern uint8_t   mp_config_required;
++/*
++ * Global Function Prototypes in qla_cfg.c source file.
++ */
++extern mp_host_t * qla2x00_cfg_find_host(scsi_qla_host_t *);
++extern uint8_t qla2x00_is_portname_in_device(mp_device_t *, uint8_t *);
++extern int qla2x00_cfg_init (scsi_qla_host_t *ha);
++extern int qla2x00_cfg_path_discovery(scsi_qla_host_t *ha);
++extern int qla2x00_cfg_event_notify(scsi_qla_host_t *ha, uint32_t i_type);
++extern fc_lun_t *qla2x00_cfg_failover(scsi_qla_host_t *ha, fc_lun_t *fp,
++                                            os_tgt_t *tgt, srb_t *sp);
++extern int qla2x00_cfg_get_paths( EXT_IOCTL *, FO_GET_PATHS *, int);
++extern int qla2x00_cfg_set_current_path( EXT_IOCTL *,
++                      FO_SET_CURRENT_PATH *, int);
++extern void qla2x00_fo_properties(scsi_qla_host_t *ha);
++extern mp_host_t * qla2x00_add_mp_host(uint8_t *);
++extern void qla2x00_cfg_mem_free(scsi_qla_host_t *ha);
++extern mp_host_t * qla2x00_alloc_host(scsi_qla_host_t *);
++extern uint8_t qla2x00_fo_check(scsi_qla_host_t *ha, srb_t *sp);
++extern mp_path_t *qla2x00_find_path_by_name(mp_host_t *, mp_path_list_t *,
++                      uint8_t *name);
++
++/*
++ * Global Function Prototypes in qla_cfgln.c source file.
++ */
++extern void qla2x00_cfg_build_path_tree( scsi_qla_host_t *ha);
++extern uint8_t qla2x00_update_mp_device(mp_host_t *,
++                                           fc_port_t  *, uint16_t     );
++extern void qla2x00_cfg_display_devices(void);
++
++/*
++ * Global Function Prototypes in qla_xioctl.c source file.
++ */
++extern void qla2x00_enqueue_aen(scsi_qla_host_t *, uint16_t, void *);
++extern int qla2x00_fo_ioctl(scsi_qla_host_t *, int, void *, int);
++extern int qla2x00_alloc_ioctl_mem(scsi_qla_host_t *);
++extern void qla2x00_free_ioctl_mem(scsi_qla_host_t *);
++extern int qla2x00_get_ioctl_scrap_mem(scsi_qla_host_t *, void **, uint32_t);
++extern void qla2x00_free_ioctl_scrap_mem(scsi_qla_host_t *);
++
++/*
++ * Global Function Prototypes in qla_inioctl.c source file.
++ */
++extern int qla2x00_read_nvram(scsi_qla_host_t *, EXT_IOCTL *, int);
++extern int qla2x00_update_nvram(scsi_qla_host_t *, EXT_IOCTL *, int);
++extern int qla2x00_write_nvram_word(scsi_qla_host_t *, uint8_t, uint16_t);
++extern int qla2x00_send_loopback(scsi_qla_host_t *, EXT_IOCTL *, int);
++extern int qla2x00_read_option_rom(scsi_qla_host_t *, EXT_IOCTL *, int);
++extern int qla2x00_update_option_rom(scsi_qla_host_t *, EXT_IOCTL *, int);
++
++
++/*
++ * Global Function Prototypes in qla_isr.c source file.
++ */
++extern irqreturn_t qla2x00_intr_handler(int, void *, struct pt_regs *);
++
++
++/*
++ * Global Function Prototypes in qla_sup.c source file.
++ */
++extern uint16_t qla2x00_get_nvram_word(scsi_qla_host_t *, uint32_t);
++extern void qla2x00_nv_write(scsi_qla_host_t *, uint16_t);
++extern void qla2x00_nv_deselect(scsi_qla_host_t *);
++extern uint8_t qla2x00_read_flash_byte(scsi_qla_host_t *, uint32_t);
++extern uint8_t qla2x00_get_flash_manufacturer(scsi_qla_host_t *);
++extern uint16_t qla2x00_get_flash_version(scsi_qla_host_t *);
++extern uint16_t qla2x00_get_flash_image(scsi_qla_host_t *, uint8_t *);
++extern uint16_t qla2x00_set_flash_image(scsi_qla_host_t *, uint8_t *);
++
++/*
++ * Global Function Prototypes in qla_vendor.c source file.
++ */
++void qla2x00_set_vend_direction(scsi_qla_host_t *, Scsi_Cmnd *, cmd_entry_t *);
++
++/*
++ * Global Function Prototypes in qla_dbg.c source file.
++ */
++extern void qla2x00_dump_isp(scsi_qla_host_t *, int);
++extern void qla2x00_dump_regs(struct Scsi_Host *);
++extern void qla2x00_dump_buffer(uint8_t *, uint32_t);
++extern void qla2x00_print_scsi_cmd(Scsi_Cmnd *);
++extern void qla2x00_print_q_info(struct os_lun *);
++
++#endif /* _QLA_GBL_H */
+--- /dev/null  Thu Apr 11 07:25:15 2002
++++ linux-2.5.73-n9560/drivers/scsi/qla2xxx/qla_inioct.c       Thu Jul  3 15:34:42 2003
+@@ -0,0 +1,495 @@
++/******************************************************************************
++ *                  QLOGIC LINUX SOFTWARE
++ *
++ * QLogic ISP2x00 device driver for Linux 2.5.x
++ * Copyright (C) 2003 Qlogic Corporation
++ * (www.qlogic.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, 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 "qla_os.h"
++#include "qla_def.h"
++
++#include "inioct.h"
++
++extern int qla2x00_loopback_test(scsi_qla_host_t *ha, INT_LOOPBACK_REQ *req,
++    uint16_t *ret_mb);
++
++int qla2x00_read_nvram(scsi_qla_host_t *, EXT_IOCTL *, int);
++int qla2x00_update_nvram(scsi_qla_host_t *, EXT_IOCTL *, int);
++int qla2x00_write_nvram_word(scsi_qla_host_t *, uint8_t, uint16_t);
++int qla2x00_send_loopback(scsi_qla_host_t *, EXT_IOCTL *, int);
++int qla2x00_read_option_rom(scsi_qla_host_t *, EXT_IOCTL *, int);
++int qla2x00_update_option_rom(scsi_qla_host_t *, EXT_IOCTL *, int);
++
++int
++qla2x00_read_nvram(scsi_qla_host_t *ha, EXT_IOCTL *pext, int mode)
++{
++      uint8_t  *usr_temp, *kernel_tmp;
++      uint16_t data;
++      uint32_t i, cnt;
++      uint32_t transfer_size;
++
++      DEBUG9(printk("qla2x00_read_nvram: entered.\n");)
++
++      if (pext->ResponseLen < sizeof(nvram_t))
++              transfer_size = pext->ResponseLen / 2;
++      else
++              transfer_size = sizeof(nvram_t) / 2;
++
++      /* Dump NVRAM. */
++      usr_temp = (uint8_t *)pext->ResponseAdr;
++      for (i = 0, cnt = 0; cnt < transfer_size; cnt++, i++) {
++              data = cpu_to_le16(qla2x00_get_nvram_word(ha, cnt));
++
++              kernel_tmp = (uint8_t *)&data;
++
++              __put_user(*kernel_tmp, usr_temp);
++
++              /* next byte */
++              usr_temp++;
++              kernel_tmp++;
++
++              __put_user(*kernel_tmp, usr_temp);
++
++              usr_temp++;
++      }
++
++      pext->Status       = EXT_STATUS_OK;
++      pext->DetailStatus = EXT_STATUS_OK;
++
++      DEBUG9(printk("qla2x00_read_nvram: exiting.\n");)
++
++      return 0;
++}
++
++/*
++ * qla2x00_update_nvram
++ *    Write data to NVRAM.
++ *
++ * Input:
++ *    ha = adapter block pointer.
++ *    pext = pointer to driver internal IOCTL structure.
++ *
++ * Returns:
++ *
++ * Context:
++ *    Kernel context.
++ */
++int
++qla2x00_update_nvram(scsi_qla_host_t *ha, EXT_IOCTL *pext, int mode)
++{
++      uint8_t i, cnt;
++      uint8_t *usr_tmp, *kernel_tmp;
++      nvram_t *pnew_nv;
++      uint16_t *wptr;
++      uint16_t data;
++      uint32_t transfer_size;
++      uint8_t chksum = 0;
++      int ret = 0;
++
++      // FIXME: Endianess?
++      DEBUG9(printk("qla2x00_update_nvram: entered.\n");)
++
++      if (pext->RequestLen < sizeof(nvram_t))
++              transfer_size = pext->RequestLen;
++      else
++              transfer_size = sizeof(nvram_t);
++
++      if (qla2x00_get_ioctl_scrap_mem(ha, (void **)&pnew_nv,
++          sizeof(nvram_t))) {
++              /* not enough memory */
++              pext->Status = EXT_STATUS_NO_MEMORY;
++              DEBUG9_10(printk("%s(%ld): inst=%ld scrap not big enough. "
++                  "size requested=%d.\n",
++                  __func__, ha->host_no, ha->instance,
++                  sizeof(nvram_t));)
++              return (ret);
++      }
++
++      /* Read from user buffer */
++      kernel_tmp = (uint8_t *)pnew_nv;
++      usr_tmp = (uint8_t *)pext->RequestAdr;
++
++      ret = verify_area(VERIFY_READ, (void *)usr_tmp, transfer_size);
++      if (ret) {
++              DEBUG9_10(printk(
++                  "qla2x00_update_nvram: ERROR in buffer verify READ. "
++                  "RequestAdr=%p\n", pext->RequestAdr);)
++              qla2x00_free_ioctl_scrap_mem(ha);
++              return ret;
++      }
++
++      copy_from_user(kernel_tmp, usr_tmp, transfer_size);
++
++      kernel_tmp = (uint8_t *)pnew_nv;
++
++      /* we need to checksum the nvram */
++      for (i = 0; i < sizeof(nvram_t) - 1; i++) {
++              chksum += *kernel_tmp;
++              kernel_tmp++;
++      }
++
++      chksum = ~chksum + 1;
++
++      *kernel_tmp = chksum;
++
++      /* Write to NVRAM */
++      wptr = (uint16_t *)pnew_nv;
++      for (cnt = 0; cnt < transfer_size / 2; cnt++) {
++              data = *wptr++;
++              qla2x00_write_nvram_word(ha, cnt, data);
++      }
++
++      pext->Status       = EXT_STATUS_OK;
++      pext->DetailStatus = EXT_STATUS_OK;
++
++      DEBUG9(printk("qla2x00_update_nvram: exiting.\n");)
++
++      qla2x00_free_ioctl_scrap_mem(ha);
++      return 0;
++}
++
++int
++qla2x00_write_nvram_word(scsi_qla_host_t *ha, uint8_t addr, uint16_t data)
++{
++      int count;
++      uint16_t word;
++      uint32_t nv_cmd;
++      device_reg_t *reg = ha->iobase;
++
++      qla2x00_nv_write(ha, NVR_DATA_OUT);
++      qla2x00_nv_write(ha, 0);
++      qla2x00_nv_write(ha, 0);
++
++      for (word = 0; word < 8; word++)
++              qla2x00_nv_write(ha, NVR_DATA_OUT);
++
++      qla2x00_nv_deselect(ha);
++
++      /* Erase Location */
++      nv_cmd = (addr << 16) | NV_ERASE_OP;
++      nv_cmd <<= 5;
++      for (count = 0; count < 11; count++) {
++              if (nv_cmd & BIT_31)
++                      qla2x00_nv_write(ha, NVR_DATA_OUT);
++              else
++                      qla2x00_nv_write(ha, 0);
++
++              nv_cmd <<= 1;
++      }
++
++      qla2x00_nv_deselect(ha);
++
++      /* Wait for Erase to Finish */
++      WRT_REG_WORD(&reg->nvram, NVR_SELECT);
++      do {
++              NVRAM_DELAY();
++              word = RD_REG_WORD(&reg->nvram);
++      } while ((word & NVR_DATA_IN) == 0);
++
++      qla2x00_nv_deselect(ha);
++
++      /* Write data */
++      nv_cmd = (addr << 16) | NV_WRITE_OP;
++      nv_cmd |= data;
++      nv_cmd <<= 5;
++      for (count = 0; count < 27; count++) {
++              if (nv_cmd & BIT_31)
++                      qla2x00_nv_write(ha, NVR_DATA_OUT);
++              else
++                      qla2x00_nv_write(ha, 0);
++
++              nv_cmd <<= 1;
++      }
++
++      qla2x00_nv_deselect(ha);
++
++      /* Wait for NVRAM to become ready */
++      WRT_REG_WORD(&reg->nvram, NVR_SELECT);
++      do {
++              NVRAM_DELAY();
++              word = RD_REG_WORD(&reg->nvram);
++      } while ((word & NVR_DATA_IN) == 0);
++
++      qla2x00_nv_deselect(ha);
++
++      /* Disable writes */
++      qla2x00_nv_write(ha, NVR_DATA_OUT);
++      for (count = 0; count < 10; count++)
++              qla2x00_nv_write(ha, 0);
++
++      qla2x00_nv_deselect(ha);
++
++      DEBUG9(printk("qla2x00_write_nvram_word: exiting.\n");)
++
++      return 0;
++}
++
++int
++qla2x00_send_loopback(scsi_qla_host_t *ha, EXT_IOCTL *pext, int mode)
++{
++      int             status;
++      uint16_t        ret_mb[MAILBOX_REGISTER_COUNT];
++      INT_LOOPBACK_REQ req;
++      INT_LOOPBACK_RSP rsp;
++
++      DEBUG9(printk("qla2x00_send_loopback: entered.\n");)
++
++
++      if (pext->RequestLen != sizeof(INT_LOOPBACK_REQ)) {
++              pext->Status = EXT_STATUS_INVALID_PARAM;
++              DEBUG9_10(printk(
++                  "qla2x00_send_loopback: invalid RequestLen =%d.\n",
++                  pext->RequestLen);)
++              return pext->Status;
++      }
++
++      if (pext->ResponseLen != sizeof(INT_LOOPBACK_RSP)) {
++              pext->Status = EXT_STATUS_INVALID_PARAM;
++              DEBUG9_10(printk(
++                  "qla2x00_send_loopback: invalid ResponseLen =%d.\n",
++                  pext->ResponseLen);)
++              return pext->Status;
++      }
++
++      status = verify_area(VERIFY_READ, (void *)pext->RequestAdr,
++                      pext->RequestLen);
++      if (status) {
++              pext->Status = EXT_STATUS_COPY_ERR;
++              DEBUG9_10(printk("qla2x00_send_loopback: ERROR verify read of "
++                  "request buffer.\n");)
++              return pext->Status;
++      }
++
++      copy_from_user((uint8_t *)&req, (uint8_t *)pext->RequestAdr,
++          pext->RequestLen);
++
++      status = verify_area(VERIFY_READ, (void *)pext->ResponseAdr,
++                      pext->ResponseLen);
++      if (status) {
++              pext->Status = EXT_STATUS_COPY_ERR;
++              DEBUG9_10(printk("qla2x00_send_loopback: ERROR verify read of "
++                  "response buffer.\n");)
++              return pext->Status;
++      }
++
++      copy_from_user((uint8_t *)&rsp, (uint8_t *)pext->ResponseAdr,
++          pext->ResponseLen);
++
++      if (req.TransferCount > req.BufferLength ||
++          req.TransferCount > rsp.BufferLength) {
++
++              /* Buffer lengths not large enough. */
++              pext->Status = EXT_STATUS_INVALID_PARAM;
++
++              DEBUG9_10(printk(
++                  "qla2x00_send_loopback: invalid TransferCount =%d. "
++                  "req BufferLength =%d rspBufferLength =%d.\n",
++                  req.TransferCount, req.BufferLength, rsp.BufferLength);)
++
++              return pext->Status;
++      }
++
++      status = verify_area(VERIFY_READ, (void *)req.BufferAddress,
++          req.TransferCount);
++      if (status) {
++              pext->Status = EXT_STATUS_COPY_ERR;
++              DEBUG9_10(printk("qla2x00_send_loopback: ERROR verify read of "
++                  "user loopback data buffer.\n");)
++              return pext->Status;
++      }
++
++      copy_from_user((uint8_t *)ha->ioctl_mem, (uint8_t *)req.BufferAddress,
++          req.TransferCount);
++
++      DEBUG9(printk("qla2x00_send_loopback: req -- bufadr=%p, buflen=%x, "
++          "xfrcnt=%x, rsp -- bufadr=%p, buflen=%x.\n",
++          req.BufferAddress, req.BufferLength, req.TransferCount,
++          rsp.BufferAddress, rsp.BufferLength);)
++
++      /*
++       * AV - the caller of this IOCTL expects the FW to handle
++       * a loopdown situation and return a good status for the
++       * call function and a LOOPDOWN status for the test operations
++       */
++      /*if (ha->loop_state != LOOP_READY || */
++      if (
++          (test_bit(CFG_ACTIVE, &ha->cfg_flags)) ||
++          (test_bit(ABORT_ISP_ACTIVE, &ha->dpc_flags)) ||
++          ABORTS_ACTIVE || ha->dpc_active) {
++
++              pext->Status = EXT_STATUS_BUSY;
++              DEBUG9_10(printk("qla2x00_send_loopback(%ld): "
++                  "loop not ready.\n", ha->host_no);)
++              return pext->Status;
++      }
++
++      status = qla2x00_loopback_test(ha, &req, ret_mb);
++
++      if (status) {
++              if (status == QL_STATUS_TIMEOUT ) {
++                      pext->Status = EXT_STATUS_BUSY;
++                      DEBUG9_10(printk("qla2x00_send_loopback: ERROR "
++                          "command timed out.\n");)
++                      return pext->Status;
++              } else {
++                      /* EMPTY. Just proceed to copy back mailbox reg
++                       * values for users to interpret.
++                       */
++                      DEBUG10(printk("qla2x00_send_loopback: ERROR "
++                          "loopback command failed 0x%x.\n", ret_mb[0]);)
++              }
++      }
++
++      status = verify_area(VERIFY_WRITE, (void *)rsp.BufferAddress,
++          req.TransferCount);
++      if (status) {
++              pext->Status = EXT_STATUS_COPY_ERR;
++              DEBUG9_10(printk("qla2x00_send_loopback: ERROR verify "
++                  "write of return data buffer.\n");)
++              return pext->Status;
++      }
++
++      DEBUG9(printk("qla2x00_send_loopback: loopback mbx cmd ok. "
++          "copying data.\n");)
++
++      /* put loopback return data in user buffer */
++      copy_to_user((uint8_t *)rsp.BufferAddress,
++          (uint8_t *)ha->ioctl_mem, req.TransferCount);
++
++      rsp.CompletionStatus = ret_mb[0];
++      if (rsp.CompletionStatus == INT_DEF_LB_COMPLETE) {
++              rsp.CrcErrorCount = ret_mb[1];
++              rsp.DisparityErrorCount = ret_mb[2];
++              rsp.FrameLengthErrorCount = ret_mb[3];
++              rsp.IterationCountLastError = (ret_mb[19] << 16) | ret_mb[18];
++      }
++
++      status = verify_area(VERIFY_WRITE, (void *)pext->ResponseAdr,
++          pext->ResponseLen);
++      if (status) {
++              pext->Status = EXT_STATUS_COPY_ERR;
++              DEBUG9_10(printk("qla2x00_send_loopback: ERROR verify "
++                  "write of response buffer.\n");)
++              return pext->Status;
++      }
++
++      copy_to_user((uint8_t *)pext->ResponseAdr, (uint8_t *)&rsp,
++          pext->ResponseLen);
++
++      pext->Status       = EXT_STATUS_OK;
++      pext->DetailStatus = EXT_STATUS_OK;
++
++      DEBUG9(printk("qla2x00_send_loopback: exiting.\n");)
++
++      return pext->Status;
++}
++
++int qla2x00_read_option_rom(scsi_qla_host_t *ha, EXT_IOCTL *pext, int mode)
++{
++      uint8_t         *usr_tmp;
++      uint32_t        addr;
++      uint32_t        midpoint;
++      uint32_t        transfer_size;
++      uint8_t         data;
++      device_reg_t    *reg = ha->iobase;
++      unsigned long   cpu_flags;
++
++      DEBUG9(printk("%s: entered.\n", __func__);)
++
++      if (pext->ResponseLen != FLASH_IMAGE_SIZE) {
++              pext->Status = EXT_STATUS_BUFFER_TOO_SMALL;
++              return (1);
++      }
++
++      transfer_size = FLASH_IMAGE_SIZE;
++
++      midpoint = FLASH_IMAGE_SIZE / 2;
++      usr_tmp = (uint8_t *)pext->ResponseAdr;
++
++      /* Dump FLASH. */
++      spin_lock_irqsave(&ha->hardware_lock, cpu_flags);
++      WRT_REG_WORD(&reg->nvram, 0);
++      for (addr = 0; addr < transfer_size; addr++, usr_tmp++) {
++              if (addr == midpoint)
++                      WRT_REG_WORD(&reg->nvram, NVR_SELECT);
++
++              data = qla2x00_read_flash_byte(ha, addr);
++              __put_user(data, usr_tmp);
++      }
++      spin_unlock_irqrestore(&ha->hardware_lock, cpu_flags);
++
++      pext->Status = EXT_STATUS_OK;
++      pext->DetailStatus = EXT_STATUS_OK;
++
++      DEBUG9(printk("%s: exiting.\n", __func__);)
++
++      return (0);
++}
++
++int qla2x00_update_option_rom(scsi_qla_host_t *ha, EXT_IOCTL *pext, int mode)
++{
++      int             ret;
++      uint8_t         *usr_tmp;
++      uint8_t         *kern_tmp;
++      uint16_t        status;
++      unsigned long   cpu_flags;
++
++      DEBUG9(printk("%s: entered.\n", __func__);)
++
++      if (pext->RequestLen != FLASH_IMAGE_SIZE) {
++              pext->Status = EXT_STATUS_COPY_ERR;
++              return (1);
++      }
++
++      pext->Status = EXT_STATUS_OK;
++      pext->DetailStatus = EXT_STATUS_OK;
++
++      /* Read from user buffer */
++      usr_tmp = (uint8_t *)pext->RequestAdr;
++      ret = verify_area(VERIFY_READ, (void *)usr_tmp, FLASH_IMAGE_SIZE);
++      if (ret) {
++              pext->Status = EXT_STATUS_COPY_ERR;
++              DEBUG9_10(printk("%s: ERROR in buffer verify READ. "
++                              "RequestAdr=%p\n",
++                              __func__, pext->RequestAdr);)
++              return (ret);
++      }
++
++      kern_tmp = (uint8_t *)KMEM_ZALLOC(FLASH_IMAGE_SIZE, 30);
++      if (kern_tmp == NULL) {
++              pext->Status = EXT_STATUS_COPY_ERR;
++              printk(KERN_WARNING
++                      "%s: ERROR in flash allocation.\n", __func__);
++              return (1);
++      }
++      copy_from_user(kern_tmp, usr_tmp, FLASH_IMAGE_SIZE);
++
++      /* Go with update */
++      spin_lock_irqsave(&ha->hardware_lock, cpu_flags);
++      status = qla2x00_set_flash_image(ha, kern_tmp);
++      spin_unlock_irqrestore(&ha->hardware_lock, cpu_flags);
++
++      KMEM_FREE(kern_tmp, FLASH_IMAGE_SIZE);
++
++      if (status) {
++              ret = 1;
++              pext->Status = EXT_STATUS_COPY_ERR;
++              DEBUG9_10(printk("%s: ERROR updating flash.\n", __func__);)
++      }
++
++      DEBUG9(printk("%s: exiting.\n", __func__);)
++
++      return (ret);
++}
+--- /dev/null  Thu Apr 11 07:25:15 2002
++++ linux-2.5.73-n9560/drivers/scsi/qla2xxx/qla_init.c Thu Jul  3 15:34:42 2003
+@@ -0,0 +1,5945 @@
++/*
++ *                  QLOGIC LINUX SOFTWARE
++ *
++ * QLogic ISP2x00 device driver for Linux 2.5.x
++ * Copyright (C) 2003 Qlogic Corporation
++ * (www.qlogic.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, 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 "qla_os.h"
++
++#include "qla_def.h"
++
++/*
++*  QLogic ISP2x00 Hardware Support Function Prototypes.
++*/
++uint8_t qla2x00_initialize_adapter(scsi_qla_host_t *);
++
++static uint8_t qla2x00_isp_firmware(scsi_qla_host_t *);
++static void qla2x00_reset_chip(scsi_qla_host_t *);
++static uint8_t qla2x00_pci_config(scsi_qla_host_t *);
++static uint8_t qla2x00_set_cache_line(scsi_qla_host_t *);
++static uint8_t qla2x00_chip_diag(scsi_qla_host_t *);
++static uint8_t qla2x00_setup_chip(scsi_qla_host_t *ha);
++static uint8_t qla2x00_init_rings(scsi_qla_host_t *ha);
++static uint8_t qla2x00_fw_ready(scsi_qla_host_t *ha);
++static uint8_t qla2x00_nvram_config(scsi_qla_host_t *);
++
++static void qla2x00_init_fc_db(scsi_qla_host_t *);
++static void qla2x00_init_tgt_map(scsi_qla_host_t *);
++
++static uint8_t qla2x00_configure_loop(scsi_qla_host_t *);
++static uint8_t qla2x00_configure_local_loop(scsi_qla_host_t *, uint8_t );
++static uint8_t qla2x00_configure_fabric(scsi_qla_host_t *, uint8_t );
++static uint8_t qla2x00_find_all_fabric_devs(scsi_qla_host_t *,
++    struct new_dev *, uint16_t *, uint8_t *);
++static void qla2x00_device_resync(scsi_qla_host_t *);
++static int qla2x00_ga_nxt(scsi_qla_host_t *, sw_info_t *);
++static int qla2x00_gid_pt(scsi_qla_host_t *, sw_info_t *);
++static int qla2x00_gpn_id(scsi_qla_host_t *, sw_info_t *);
++static int qla2x00_gnn_id(scsi_qla_host_t *, sw_info_t *);
++static int qla2x00_gft_id(scsi_qla_host_t *, sw_info_t *);
++static int qla2x00_rft_id(scsi_qla_host_t *);
++static int qla2x00_rff_id(scsi_qla_host_t *);
++static int qla2x00_rnn_id(scsi_qla_host_t *);
++static int qla2x00_rsnn_nn(scsi_qla_host_t *);
++
++static int qla2x00_add_initiator_device(scsi_qla_host_t *, fcdev_t *);
++
++uint8_t qla2x00_fabric_login(scsi_qla_host_t *, fcdev_t *);
++uint8_t qla2x00_local_device_login(scsi_qla_host_t *, uint16_t);
++
++static uint8_t qla2x00_update_fc_database(scsi_qla_host_t *,
++    fcdev_t *, uint8_t);
++static int qla2x00_build_fcport_list(scsi_qla_host_t *ha);
++static void qla2x00_config_os(scsi_qla_host_t *ha);
++static uint16_t qla2x00_fcport_bind(scsi_qla_host_t *ha, fc_port_t *fcport);
++static int qla2x00_update_fcport(scsi_qla_host_t *ha, fc_port_t *fcport, int);
++static int qla2x00_lun_discovery(scsi_qla_host_t *ha, fc_port_t *fcport, int);
++static int qla2x00_rpt_lun_discovery(scsi_qla_host_t *ha, fc_port_t *fcport);
++static void qla2x00_cfg_lun(fc_port_t *fcport, uint16_t lun);
++
++static void qla2x00_lun_free(scsi_qla_host_t *, uint16_t, uint16_t);
++
++static void qla2x00_get_lun_mask_from_config(scsi_qla_host_t *,
++    fc_port_t *, uint16_t, uint16_t);
++static int qla2x00_bstr_to_hex(char *, uint8_t *, int);
++
++static uint8_t qla2x00_find_propname(scsi_qla_host_t *,
++    char *, char *, char *, int);
++static int qla2x00_get_prop_16chars(scsi_qla_host_t *,
++    char *, char *, char *);
++static void qla2x00_get_properties(scsi_qla_host_t *, char *);
++
++static void qla2x00_cfg_persistent_binding(scsi_qla_host_t *);
++
++static int qla2x00_restart_isp(scsi_qla_host_t *);
++static void qla2x00_reset_adapter(scsi_qla_host_t *);
++
++#define MAX_LOCAL_LOOP_IDS    127
++static uint8_t alpa_table[MAX_LOCAL_LOOP_IDS] = {
++      0xEF, 0xE8, 0xE4, 0xE2, 0xE1, 0xE0, 0xDC, 0xDA,
++      0xD9, 0xD6, 0xD5, 0xD4, 0xD3, 0xD2, 0xD1, 0xCE,
++      0xCD, 0xCC, 0xCB, 0xCA, 0xC9, 0xC7, 0xC6, 0xC5,
++      0xC3, 0xBC, 0xBA, 0xB9, 0xB6, 0xB5, 0xB4, 0xB3,
++      0xB2, 0xB1, 0xAE, 0xAD, 0xAC, 0xAB, 0xAA, 0xA9,
++      0xA7, 0xA6, 0xA5, 0xA3, 0x9F, 0x9E, 0x9D, 0x9B,
++      0x98, 0x97, 0x90, 0x8F, 0x88, 0x84, 0x82, 0x81,
++      0x80, 0x7C, 0x7A, 0x79, 0x76, 0x75, 0x74, 0x73,
++      0x72, 0x71, 0x6E, 0x6D, 0x6C, 0x6B, 0x6A, 0x69,
++      0x67, 0x66, 0x65, 0x63, 0x5C, 0x5A, 0x59, 0x56,
++      0x55, 0x54, 0x53, 0x52, 0x51, 0x4E, 0x4D, 0x4C,
++      0x4B, 0x4A, 0x49, 0x47, 0x46, 0x45, 0x43, 0x3C,
++      0x3A, 0x39, 0x36, 0x35, 0x34, 0x33, 0x32, 0x31,
++      0x2E, 0x2D, 0x2C, 0x2B, 0x2A, 0x29, 0x27, 0x26,
++      0x25, 0x23, 0x1F, 0x1E, 0x1D, 0x1B, 0x18, 0x17,
++      0x10, 0x0F, 0x08, 0x04, 0x02, 0x01, 0x00
++};
++
++/****************************************************************************/
++/*                QLogic ISP2x00 Hardware Support Functions.                */
++/****************************************************************************/
++
++/*
++* qla2x00_initialize_adapter
++*      Initialize board.
++*
++* Input:
++*      ha = adapter block pointer.
++*
++* Returns:
++*      0 = success
++*/
++uint8_t
++qla2x00_initialize_adapter(scsi_qla_host_t *ha)
++{
++      uint8_t status;
++      uint8_t isp_init = 0;
++      uint8_t restart_risc = 0;
++      uint8_t retry;
++      unsigned long   wait_device = 0;
++
++      ENTER(__func__);
++
++      /* Clear adapter flags. */
++      ha->forceLip = 0;
++      ha->flags.online = FALSE;
++      ha->flags.disable_host_adapter = FALSE;
++      ha->flags.reset_active = FALSE;
++      ha->flags.watchdog_enabled = FALSE;
++      atomic_set(&ha->loop_down_timer, LOOP_DOWN_TIME);
++      ha->loop_state = LOOP_DOWN;
++      ha->device_flags = 0;
++      ha->sns_retry_cnt = 0;
++      ha->device_flags = 0;
++      ha->dpc_flags = 0;
++      ha->sns_retry_cnt = 0;
++      ha->failback_delay = 0;
++#if defined(IOCB_THROLLE_USAGE)
++      ha->iocb_cnt = 0;
++      ha->iocb_overflow_cnt = 0;
++#endif
++      ha->flags.management_server_logged_in = 0;
++      ha->marker_needed = 0;
++      ha->mbx_flags = 0;
++      ha->isp_abort_cnt = 0;
++
++      if (!(status = qla2x00_pci_config(ha))) {
++
++              qla2x00_reset_chip(ha);
++
++              /* Initialize Fibre Channel database. */
++              qla2x00_init_fc_db(ha);
++
++              /* Initialize target map database. */
++              qla2x00_init_tgt_map(ha);
++
++              /* Get Flash Version */
++              qla2x00_get_flash_version(ha);
++
++              if (qla2x00_verbose)
++                      printk("scsi(%ld): Configure NVRAM parameters...\n",
++                              ha->host_no);
++
++              qla2x00_nvram_config(ha);
++
++              ha->retry_count = ql2xretrycount;
++
++              if (qla2x00_verbose)
++                      printk("scsi(%ld): Verifying loaded RISC code...\n",
++                              ha->host_no);
++
++              qla2x00_set_cache_line(ha);
++
++              /*
++               * If the user specified a device configuration on the command
++               * line then use it as the configuration.  Otherwise, we scan
++               * for all devices.
++               */
++              if (ql2xdevconf) {
++                      ha->cmdline = ql2xdevconf;
++                      if (!ha->flags.failover_enabled)
++                              qla2x00_get_properties(ha, ql2xdevconf);
++              }
++
++              retry = 10;
++              /*
++               * Try an configure the loop.
++               */
++              do {
++                      restart_risc = 0;
++                      isp_init = 0;
++
++                      /* If firmware needs to be loaded */
++                      if (qla2x00_isp_firmware(ha)) {
++                              if (qla2x00_verbose)
++                                      printk("scsi(%ld): Verifying chip...\n",
++                                              ha->host_no);
++
++                              if (!(status = qla2x00_chip_diag(ha)))
++                                      status = qla2x00_setup_chip(ha);
++
++                              if (!status) {
++                                      DEBUG(printk("scsi(%ld): Chip verified "
++                                                      "and RISC loaded...\n",
++                                                      ha->host_no));
++                              }
++                      }
++
++                      /* Retrieve firmware information */
++                      qla2x00_get_fw_version(ha, &ha->fw_major_version,
++                          &ha->fw_minor_version, &ha->fw_subminor_version,
++                          &ha->fw_attributes);
++
++                      if (!status && !(status = qla2x00_init_rings(ha))) {
++                              /* dg - 7/3/1999
++                               *
++                               * Wait for a successful LIP up to a maximum 
++                               * of (in seconds): RISC login timeout value,
++                               * RISC retry count value, and port down retry
++                               * value OR a minimum of 4 seconds OR If no 
++                               * cable, only 5 seconds.
++                               */
++                              DEBUG(printk("scsi(%ld): Init rings OK..."
++                                  "calling qla2x00_fw_ready()...\n",
++                                  ha->host_no));
++
++                              if (!qla2x00_fw_ready(ha)) {
++                                      clear_bit(RESET_MARKER_NEEDED,
++                                                      &ha->dpc_flags);
++                                      clear_bit(COMMAND_WAIT_NEEDED,
++                                                      &ha->dpc_flags);
++
++                                      /*
++                                       * Go setup flash database devices 
++                                       * with proper Loop ID's.
++                                       */
++                                      do {
++                                              clear_bit(LOOP_RESYNC_NEEDED,
++                                                              &ha->dpc_flags);
++                                              status = qla2x00_configure_loop(ha);
++
++                                              /*
++                                               * Temp code: delay a while for certain
++                                               * slower devices to become ready.
++                                               */
++                                              for ((wait_device = jiffies + HZ);
++                                                      !time_after_eq(jiffies,wait_device);) {
++                                                      qla2x00_check_fabric_devices(ha);
++
++                                                      set_current_state(TASK_INTERRUPTIBLE);
++                                                      schedule_timeout(5);
++                                              }
++
++                                      } while (!atomic_read(&ha->loop_down_timer) &&
++                                              !(test_bit(ISP_ABORT_NEEDED, &ha->dpc_flags)) &&
++                                              (test_bit(LOOP_RESYNC_NEEDED, &ha->dpc_flags)) );
++                              }
++
++                              if (ha->flags.update_config_needed) {
++                                      ha->init_cb->add_firmware_options[0] |=
++                                          ((ha->operating_mode << 4) &
++                                              (BIT_6 | BIT_5 | BIT_4));
++
++                                      restart_risc = 1;
++                              }
++
++                              if (ha->mem_err) {
++                                      restart_risc = 1;
++                              }
++                              isp_init = 1;
++
++                      }
++              } while (restart_risc && retry--);
++
++              if (isp_init) {
++                      clear_bit(RESET_MARKER_NEEDED, &ha->dpc_flags);
++                      ha->marker_needed = 1;
++                      qla2x00_marker(ha, 0, 0, MK_SYNC_ALL);
++                      ha->marker_needed = 0;
++
++                      ha->flags.online = TRUE;
++              }
++
++      }
++
++#if defined(QL_DEBUG_LEVEL_2) || defined(QL_DEBUG_LEVEL_3)
++      if (status)
++              printk("%s(): **** FAILED ****\n", __func__);
++#endif
++
++      LEAVE(__func__);
++
++      return (status);
++}
++
++/**
++ * qla2x00_isp_firmware() - Choose firmware image.
++ * @ha: HA context
++ *
++ * Returns 0 on success.
++ */
++static uint8_t
++qla2x00_isp_firmware(scsi_qla_host_t *ha)
++{
++      uint8_t  status;
++
++
++      ENTER(__func__);
++
++      /* Assume loading risc code */
++      status = 1; 
++
++      if (ha->flags.disable_risc_code_load) {
++              DEBUG2(printk("scsi(%ld): RISC CODE NOT loaded\n",
++                  ha->host_no));
++              printk(KERN_INFO
++                  "scsi(%ld): RISC CODE NOT loaded\n", ha->host_no);
++
++              /* Verify checksum of loaded RISC code. */
++              status = qla2x00_verify_checksum(ha);
++      }
++
++      if (status) {
++              DEBUG2_3(printk("scsi(%ld): **** Load RISC code ****\n",
++                  ha->host_no));
++      }
++
++      LEAVE(__func__);
++
++      return (status);
++}
++
++/**
++ * qla2x00_reset_chip() - Reset ISP chip.
++ * @ha: HA context
++ *
++ * Returns 0 on success.
++ */
++static void
++qla2x00_reset_chip(scsi_qla_host_t *ha) 
++{
++      unsigned long   flags = 0;
++      device_reg_t    *reg = ha->iobase;
++      uint32_t        cnt;
++      unsigned long   mbx_flags = 0;
++      uint16_t        cmd;
++
++      ENTER(__func__);
++
++      /* Disable ISP interrupts. */
++      qla2x00_disable_intrs(ha);
++
++      spin_lock_irqsave(&ha->hardware_lock, flags);
++
++      /* Turn off master enable */
++      cmd = 0;
++      pci_read_config_word(ha->pdev, PCI_COMMAND, &cmd);
++      cmd &= ~PCI_COMMAND_MASTER;
++      pci_write_config_word(ha->pdev, PCI_COMMAND, cmd);
++
++#if defined(ISP2200) || defined(ISP2300)
++      /* Pause RISC. */
++      WRT_REG_WORD(&reg->hccr, HCCR_PAUSE_RISC);
++      if (ha->pdev->device == QLA2312_DEVICE_ID ||
++          ha->pdev->device == QLA2322_DEVICE_ID) {
++              for (cnt = 0; cnt < 30000; cnt++) {
++                      if ((RD_REG_WORD(&reg->hccr) & HCCR_RISC_PAUSE) != 0)
++                              break;
++                      udelay(100);
++              }
++      } else {
++              udelay(10);
++      }
++
++      /* Select FPM registers. */
++      WRT_REG_WORD(&reg->ctrl_status, 0x20);
++
++      /* FPM Soft Reset. */
++      WRT_REG_WORD(&reg->fpm_diag_config, 0x100);
++
++#if defined(ISP2300)
++      /* Toggle Fpm Reset. */
++      WRT_REG_WORD(&reg->fpm_diag_config, 0x0);
++#endif
++
++      /* Select frame buffer registers. */
++      WRT_REG_WORD(&reg->ctrl_status, 0x10);
++
++      /* Reset frame buffer FIFOs. */
++#if defined(ISP2200)
++      WRT_REG_WORD(&reg->fb_cmd, 0xa000);
++#else
++      WRT_REG_WORD(&reg->fb_cmd, 0x00fc);
++
++      /* Read back fb_cmd until zero or 3 seconds max */
++      for (cnt = 0; cnt < 3000; cnt++) {
++              if ((RD_REG_WORD(&reg->fb_cmd) & 0xff) == 0)
++                      break;
++              udelay(100);
++      }
++#endif /* defined(ISP2200) */
++
++      /* Select RISC module registers. */
++      WRT_REG_WORD(&reg->ctrl_status, 0);
++
++      /* Reset RISC processor. */
++      WRT_REG_WORD(&reg->hccr, HCCR_RESET_RISC);
++
++      /* Release RISC processor. */
++      WRT_REG_WORD(&reg->hccr, HCCR_RELEASE_RISC);
++
++#endif /* defined(ISP2200) || defined(ISP2300) */
++
++      WRT_REG_WORD(&reg->hccr, HCCR_CLR_RISC_INT);
++      WRT_REG_WORD(&reg->hccr, HCCR_CLR_HOST_INT);
++
++      /* Reset ISP chip. */
++      WRT_REG_WORD(&reg->ctrl_status, CSR_ISP_SOFT_RESET);
++
++      /* Wait for RISC to recover from reset. */
++      if (ha->pdev->device == QLA2312_DEVICE_ID ||
++          ha->pdev->device == QLA2322_DEVICE_ID) {
++              udelay(10);
++      } else {
++              for (cnt = 30000; cnt; cnt--) {
++                      if ((RD_REG_WORD(&reg->ctrl_status) &
++                          CSR_ISP_SOFT_RESET) == 0)
++                              break;
++                      udelay(100);
++              }
++      }
++
++      /* Reset RISC processor. */
++      WRT_REG_WORD(&reg->hccr, HCCR_RESET_RISC);
++
++      WRT_REG_WORD(&reg->semaphore, 0);
++
++      /* Release RISC processor. */
++      WRT_REG_WORD(&reg->hccr, HCCR_RELEASE_RISC);
++
++      if (ha->pdev->device == QLA2312_DEVICE_ID ||
++          ha->pdev->device == QLA2322_DEVICE_ID) {
++              udelay(100);
++      } else {
++              for (cnt = 0; cnt < 30000; cnt++) {
++                      if (!(test_bit(ABORT_ISP_ACTIVE, &ha->dpc_flags)))
++                              QLA_MBX_REG_LOCK(ha);
++
++                      if (RD_REG_WORD(&reg->mailbox0) != MBS_BUSY) {
++                              if (!(test_bit(ABORT_ISP_ACTIVE,
++                                  &ha->dpc_flags)))
++                                      QLA_MBX_REG_UNLOCK(ha);
++                              break;
++                      }
++
++                      if (!(test_bit(ABORT_ISP_ACTIVE, &ha->dpc_flags)))
++                              QLA_MBX_REG_UNLOCK(ha);
++
++                      udelay(100);
++              }
++      }
++
++      /* Turn on master enable */
++      cmd |= PCI_COMMAND_MASTER;
++      pci_write_config_word(ha->pdev, PCI_COMMAND, cmd);
++
++#if defined(ISP2200) || defined(ISP2300)
++      /* Disable RISC pause on FPM parity error. */
++      WRT_REG_WORD(&reg->hccr, HCCR_DISABLE_PARITY_PAUSE);
++#endif
++
++      /* Save PCI information. */
++      ha->isp_ctrl_status = RD_REG_WORD(&reg->ctrl_status);
++
++      spin_unlock_irqrestore(&ha->hardware_lock, flags);
++
++      LEAVE(__func__);
++}
++
++/**
++ * qla2x00_pci_config() - Setup device PCI configuration registers.
++ * @ha: HA context
++ *
++ * Returns 0 on success.
++ */
++static uint8_t
++qla2x00_pci_config(scsi_qla_host_t *ha)
++{
++      uint8_t         status;
++      uint16_t        w;
++#if defined(ISP2300)
++      uint32_t        cnt;
++      unsigned long   flags = 0;
++#endif
++#if MEMORY_MAPPED_IO
++      uint32_t        mmapbase;
++      uint32_t        page_offset, base;
++#endif
++
++      ENTER(__func__);
++
++      if (qla2x00_verbose)
++              printk("scsi(%ld): Configuring PCI space...\n",
++                      ha->host_no);
++
++      /* 
++       * Turn on PCI master; for system BIOSes that don't turn it on by
++       * default.
++       */
++      pci_set_master(ha->pdev);
++      pci_read_config_word(ha->pdev, PCI_REVISION_ID, &ha->revision);
++
++      if (ha->iobase)
++              return 0;
++
++      /*
++       * We want to respect framework's setting of PCI configuration space
++       * command register and also want to make sure that all bits of
++       * interest to us are properly set in command register.
++       */
++      pci_read_config_word(ha->pdev, PCI_COMMAND, &w);
++      w |= (PCI_COMMAND_IO | PCI_COMMAND_MEMORY | PCI_COMMAND_MASTER | 
++          PCI_COMMAND_INVALIDATE | PCI_COMMAND_PARITY | PCI_COMMAND_SERR);
++
++#if MEMORY_MAPPED_IO
++      DEBUG(printk("scsi(%ld): I/O SPACE and MEMORY MAPPED I/O enabled.\n",
++          ha->host_no));
++#else
++      DEBUG(printk("scsi(%ld): I/O SPACE enabled and MEMORY MAPPED I/O "
++          "disabled.\n", ha->host_no));
++
++      w &= ~PCI_COMMAND_MEMORY;
++#endif
++
++#if defined(ISP2300)
++      /* PCI Specification Revision 2.3 changes */
++      if (ha->pdev->device == QLA2322_DEVICE_ID) {
++              /* Command Register -- Reset Interrupt Disable -- BIT_10 */
++              w &= ~BIT_10;
++      }
++
++      /*
++       * If this is a 2300 card and not 2312, reset the COMMAND_INVALIDATE
++       * due to a bug in the 2300. Unfortunately, the 2310 also reports
++       * itself as a 2300 so we need to get the fb revision level -- a 6
++       * indicates it really is a 2300 and not a 2310.
++       */
++      if (ha->pdev->device == QLA2300_DEVICE_ID) {
++              spin_lock_irqsave(&ha->hardware_lock, flags);
++
++              /* Pause RISC. */
++              WRT_REG_WORD(&ha->iobase->hccr, HCCR_PAUSE_RISC);
++              for (cnt = 0; cnt < 30000; cnt++) {
++                      if ((RD_REG_WORD(&ha->iobase->hccr) &
++                          HCCR_RISC_PAUSE) != 0)
++                              break;
++
++                      udelay(10);
++              }
++
++              /* Select FPM registers. */
++              WRT_REG_WORD(&ha->iobase->ctrl_status, 0x20);
++
++              /* Get the fb rev level */
++              if (RD_REG_WORD(&ha->iobase->fb_cmd) == FPM_2300)
++                      w &= ~PCI_COMMAND_INVALIDATE;
++
++              /* Deselect FPM registers. */
++              WRT_REG_WORD(&ha->iobase->ctrl_status, 0x0);
++
++              /* Release RISC module. */
++              WRT_REG_WORD(&ha->iobase->hccr, HCCR_RELEASE_RISC);
++              for (cnt = 0; cnt < 30000; cnt++) {
++                      if ((RD_REG_WORD(&ha->iobase->hccr) &
++                          HCCR_RISC_PAUSE) == 0)
++                              break;
++
++                      udelay(10);
++              }
++
++              spin_unlock_irqrestore(&ha->hardware_lock, flags);
++      }
++#endif
++
++      pci_write_config_word(ha->pdev, PCI_COMMAND, w);
++
++      /* Reset expansion ROM address decode enable */
++      pci_read_config_word(ha->pdev, PCI_ROM_ADDRESS, &w);
++      w &= ~PCI_ROM_ADDRESS_ENABLE;
++      pci_write_config_word(ha->pdev, PCI_ROM_ADDRESS, w);
++
++      status = 0;
++#if MEMORY_MAPPED_IO
++      /* Get memory mapped I/O address */
++      pci_read_config_dword(ha->pdev, PCI_BASE_ADDRESS_1, &mmapbase);
++      mmapbase &= PCI_BASE_ADDRESS_MEM_MASK;
++
++      /* Find proper memory chunk for memory map I/O reg */
++      base = mmapbase & PAGE_MASK;
++      page_offset = mmapbase - base;
++
++      /* Get virtual address for I/O registers  */
++      ha->mmpbase = ioremap(base, page_offset + 256);
++      if (ha->mmpbase) {
++              ha->mmpbase += page_offset;
++              ha->iobase = ha->mmpbase;
++              status = 0;
++      }
++#endif
++
++      LEAVE(__func__);
++
++      return (status);
++}
++
++/**
++ * qla2x00_set_cache_line() - Sets PCI cache line parameter.
++ * @ha: HA context
++ *
++ * Returns 0 on success.
++ */
++static uint8_t
++qla2x00_set_cache_line(struct scsi_qla_host * ha)
++{
++      unsigned char cache_size;
++
++      ENTER(__func__);
++
++      /* Set the cache line. */
++      if (!ha->flags.set_cache_line_size_1) {
++              LEAVE(__func__);
++
++              return (0);
++      }
++
++      /* Taken from drivers/net/acenic.c */
++      pci_read_config_byte(ha->pdev, PCI_CACHE_LINE_SIZE, &cache_size);
++      cache_size <<= 2;
++      if (cache_size != SMP_CACHE_BYTES) {
++              printk(KERN_INFO
++                  "scsi(%ld): PCI cache line size set incorrectly "
++                  "(%d bytes) by BIOS/FW, ",
++                  ha->host_no, cache_size);
++
++              if (cache_size > SMP_CACHE_BYTES) {
++                      printk(KERN_INFO "expecting %d.\n", SMP_CACHE_BYTES);
++              } else {
++                      printk(KERN_INFO
++                          "correcting to %d.\n", SMP_CACHE_BYTES);
++                      pci_write_config_byte(ha->pdev,
++                          PCI_CACHE_LINE_SIZE, SMP_CACHE_BYTES >> 2);
++              }
++      }
++
++      LEAVE(__func__);
++
++      return (0);
++}
++
++/**
++ * qla2x00_chip_diag() - Test chip for proper operation.
++ * @ha: HA context
++ *
++ * Returns 0 on success.
++ */
++static uint8_t
++qla2x00_chip_diag(scsi_qla_host_t *ha)
++{
++      uint8_t         status;
++      device_reg_t    *reg = ha->iobase;
++      unsigned long   flags = 0;
++      uint16_t        data;
++      uint32_t        cnt;
++      uint16_t        mb[5];
++
++      ENTER(__func__);
++
++      /* Assume a failed state */
++      status = 1;
++
++      DEBUG3(printk("scsi(%ld): Testing device at %lx.\n",
++          ha->host_no, (u_long)&reg->flash_address));
++
++      spin_lock_irqsave(&ha->hardware_lock, flags);
++
++      /* Reset ISP chip. */
++      WRT_REG_WORD(&reg->ctrl_status, CSR_ISP_SOFT_RESET);
++      data = qla2x00_debounce_register(&reg->ctrl_status);
++      for (cnt = 6000000 ; cnt && (data & CSR_ISP_SOFT_RESET); cnt--) {
++              udelay(5);
++              data = RD_REG_WORD(&reg->ctrl_status);
++              barrier();
++      }
++
++      if (!cnt)
++              goto chip_diag_failed;
++
++      DEBUG3(printk("scsi(%ld): Reset register cleared by chip reset\n",
++          ha->host_no));
++
++      /* Reset RISC processor. */
++      WRT_REG_WORD(&reg->hccr, HCCR_RESET_RISC);
++      WRT_REG_WORD(&reg->hccr, HCCR_RELEASE_RISC);
++
++#if defined(ISP2300)
++      /* Workaround for QLA2312 PCI parity error */
++      if (ha->pdev->device == QLA2312_DEVICE_ID ||
++          ha->pdev->device == QLA2322_DEVICE_ID) {
++              udelay(10);
++      } else {
++              data = qla2x00_debounce_register(&reg->mailbox0);
++              for (cnt = 6000000; cnt && (data == MBS_BUSY); cnt--) {
++                      udelay(5);
++                      data = RD_REG_WORD(&reg->mailbox0);
++                      barrier(); 
++              }
++      }
++#else
++      data = qla2x00_debounce_register(&reg->mailbox0);
++      for (cnt = 6000000; cnt && (data == MBS_BUSY); cnt--) {
++              udelay(5);
++              data = RD_REG_WORD(&reg->mailbox0);
++              barrier(); 
++      }
++#endif
++      if (!cnt)
++              goto chip_diag_failed;
++
++      /* Check product ID of chip */
++      DEBUG3(printk("scsi(%ld): Checking product ID of chip\n",
++          ha->host_no));
++
++      mb[1] = RD_REG_WORD(&reg->mailbox1);
++      mb[2] = RD_REG_WORD(&reg->mailbox2);
++      mb[3] = RD_REG_WORD(&reg->mailbox3);
++      mb[4] = qla2x00_debounce_register(&reg->mailbox4);
++
++      if (mb[1] != PROD_ID_1 ||
++          (mb[2] != PROD_ID_2 && mb[2] != PROD_ID_2a) ||
++          mb[3] != PROD_ID_3 ||
++          (mb[4] != PROD_ID_4 && mb[4] != PROD_ID_4a)) {
++
++              printk(KERN_WARNING
++                  "scsi(%ld): Wrong product ID = 0x%x,0x%x,0x%x,0x%x\n",
++                  ha->host_no, mb[1], mb[2], mb[3], mb[4]);
++
++              goto chip_diag_failed;
++      }
++
++      /* Adjust fw RISC transfer size */
++      ha->fw_transfer_size = REQUEST_ENTRY_SIZE * REQUEST_ENTRY_CNT;
++#if defined(ISP2200)
++      if (ha->pdev->device == QLA2200_DEVICE_ID &&
++          RD_REG_WORD(&reg->mailbox7) == QLA2200A_RISC_ROM_VER) {
++
++              /* Limit firmware transfer size with a 2200A */
++              DEBUG3(printk("scsi(%ld): Found QLA2200A chip.\n",
++                  ha->host_no));
++
++              ha->fw_transfer_size = 128;
++      }
++#endif
++
++      /* Wrap Incoming Mailboxes Test. */
++      spin_unlock_irqrestore(&ha->hardware_lock, flags);
++
++      DEBUG3(printk("scsi(%ld): Checking mailboxes.\n", ha->host_no));
++      status = qla2x00_mbx_reg_test(ha);
++      if (status) {
++              DEBUG(printk("scsi(%ld): Failed mailbox send register test\n",
++                  ha->host_no));
++              printk(KERN_WARNING
++                  "scsi(%ld): Failed mailbox send register test\n",
++                  ha->host_no);
++      }
++      else {
++              /* Flag a successful status */
++              status = 0;
++      }
++      spin_lock_irqsave(&ha->hardware_lock, flags);
++
++chip_diag_failed:
++      if (status)
++              DEBUG2_3(printk("scsi(%ld): Chip diagnostics **** FAILED "
++                  "****\n", ha->host_no));
++
++      spin_unlock_irqrestore(&ha->hardware_lock, flags);
++
++      LEAVE(__func__);
++
++      return (status);
++}
++
++/**
++ * qla2x00_setup_chip() - Load and start RISC firmware.
++ * @ha: HA context
++ *
++ * Returns 0 on success.
++ */
++static uint8_t
++qla2x00_setup_chip(scsi_qla_host_t *ha)
++{
++      uint8_t         status = 0;
++      uint16_t        cnt;
++      uint16_t        *risc_code;
++      unsigned long   risc_address;
++      unsigned long   risc_code_size;
++      int             num;
++      int             i;
++      uint16_t        *req_ring;
++      struct qla_fw_info      *fw_iter;
++
++      ENTER(__func__);
++
++      /* Load firmware sequences */
++      fw_iter = ha->brd_info->fwinfo;
++      while (fw_iter->addressing != FW_INFO_ADDR_NOMORE) {
++              risc_code = fw_iter->fwcode;
++              risc_code_size = *fw_iter->fwlen;
++
++              if (fw_iter->addressing == FW_INFO_ADDR_NORMAL) {
++                      risc_address = *fw_iter->fwstart;
++              } else {
++                      /* Extended address */
++                      risc_address = *fw_iter->lfwstart;
++              }
++
++              num = 0;
++              status = 0;
++              while (risc_code_size > 0 && !status) {
++                      cnt = (uint16_t)(ha->fw_transfer_size >> 1);
++                      if (cnt > risc_code_size)
++                              cnt = risc_code_size;
++
++                      DEBUG7(printk("scsi(%ld): Loading risc segment@ "
++                          "addr %p, number of bytes 0x%x, offset 0x%lx.\n",
++                          ha->host_no, risc_code, cnt, risc_address));
++
++                      req_ring = (uint16_t *)ha->request_ring;
++                      for (i = 0; i < cnt; i++)
++                              req_ring[i] = cpu_to_le16(risc_code[i]);
++
++                      /*
++                       * Flush written firmware to the ha->request_ring buffer
++                       * before DMA.
++                       */
++                      flush_cache_all();
++
++                      if (fw_iter->addressing == FW_INFO_ADDR_NORMAL) {
++                              status = qla2x00_load_ram(ha,
++                                  ha->request_dma, risc_address, cnt);
++                      } else {
++                              status = qla2x00_load_ram_ext(ha,
++                                  ha->request_dma, risc_address, cnt);
++                      }
++                      if (status) {
++                              DEBUG(printk("scsi(%ld): [ERROR] Failed to "
++                                  "load segment %d of firmware\n",
++                                  ha->host_no, num));
++                              printk(KERN_WARNING
++                                  "scsi(%ld): [ERROR] Failed to load "
++                                  "segment %d of firmware\n",
++                                  ha->host_no, num);
++
++                              qla2x00_dump_regs(ha->host);
++                              break;
++                      }
++
++                      risc_code += cnt;
++                      risc_address += cnt;
++                      risc_code_size -= cnt;
++                      num++;
++              }
++
++              /* Next firmware sequence */
++              fw_iter++;
++      }
++
++      /* Verify checksum of loaded RISC code. */
++      if (!status) {
++              DEBUG(printk("scsi(%ld): Verifying Checksum of loaded RISC "
++                  "code.\n", ha->host_no));
++
++              status = qla2x00_verify_checksum(ha);
++              if (status == QL_STATUS_SUCCESS) {
++                      /* Start firmware execution. */
++                      DEBUG(printk("scsi(%ld): Checksum OK, start "
++                          "firmware.\n", ha->host_no));
++
++                      status = qla2x00_execute_fw(ha);
++              }
++              else {
++                      DEBUG2(printk(KERN_INFO
++                          "scsi(%ld): ISP Firmware failed checksum.\n",
++                          ha->host_no));
++              }
++      }
++
++      if (status) {
++              DEBUG2_3(printk("scsi(%ld): Setup chip **** FAILED ****.\n",
++                  ha->host_no));
++      }
++
++      return (status);
++}
++
++/**
++ * qla2x00_init_rings() - Initializes firmware.
++ * @ha: HA context
++ *
++ * Beginning of request ring has initialization control block already built
++ * by nvram config routine.
++ *
++ * Returns 0 on success.
++ */
++static uint8_t
++qla2x00_init_rings(scsi_qla_host_t *ha)
++{
++      unsigned long flags = 0;
++      uint8_t  status;
++      int cnt;
++      device_reg_t *reg = ha->iobase;
++
++
++      spin_lock_irqsave(&ha->hardware_lock, flags);
++
++      /* Clear outstanding commands array. */
++      for (cnt = 0; cnt < MAX_OUTSTANDING_COMMANDS; cnt++)
++              ha->outstanding_cmds[cnt] = 0;
++
++      ha->current_outstanding_cmd = 0;
++
++      /* Clear RSCN queue. */
++      ha->rscn_in_ptr = 0;
++      ha->rscn_out_ptr = 0;
++
++      /* Initialize firmware. */
++      ha->request_ring_ptr  = ha->request_ring;
++      ha->req_ring_index    = 0;
++      ha->req_q_cnt         = REQUEST_ENTRY_CNT;
++      ha->response_ring_ptr = ha->response_ring;
++      ha->rsp_ring_index    = 0;
++
++      WRT_REG_WORD(ISP_REQ_Q_IN(reg), 0);
++      WRT_REG_WORD(ISP_REQ_Q_OUT(reg), 0);
++      WRT_REG_WORD(ISP_RSP_Q_IN(reg), 0);
++      WRT_REG_WORD(ISP_RSP_Q_OUT(reg), 0);
++
++      spin_unlock_irqrestore(&ha->hardware_lock, flags);
++
++      DEBUG(printk("scsi(%ld): Issue init firmware.\n", ha->host_no));
++      status = qla2x00_init_firmware(ha, sizeof(init_cb_t));
++      if (status) {
++              DEBUG2_3(printk("scsi(%ld): Init firmware **** FAILED ****.\n",
++                  ha->host_no));
++      } else {
++              /* Setup seriallink options */
++              uint16_t swing, emphasis;
++              uint16_t opt10, opt11;
++
++              DEBUG3(printk("scsi(%ld): Serial link options:\n",
++                  ha->host_no));
++              DEBUG3(qla2x00_dump_buffer(
++                  (uint8_t *)&ha->fw_seriallink_options,
++                  sizeof(ha->fw_seriallink_options)));
++
++              qla2x00_get_fw_options(ha,
++                  &ha->fw_options1, &ha->fw_options2, &ha->fw_options3);
++
++              ha->fw_options1 &= ~BIT_8;
++              if (ha->fw_seriallink_options[1] & BIT_2)
++                      ha->fw_options1 |= BIT_8;
++
++              /* 1G settings */
++              swing = ha->fw_seriallink_options[0] & (BIT_2 | BIT_1 | BIT_0);
++              emphasis = ha->fw_seriallink_options[0] & (BIT_4 | BIT_3);
++              emphasis >>= 3;
++              opt10 = (emphasis << 14) | (swing << 8) | 0x3;
++
++              /* 2G settings */
++              swing = ha->fw_seriallink_options[0] & (BIT_7 | BIT_6 | BIT_5);
++              swing >>= 5;
++              emphasis = ha->fw_seriallink_options[1] & (BIT_1 | BIT_0);
++              opt11 = (emphasis << 14) | (swing << 8) | 0x3;
++
++              qla2x00_set_fw_options(ha, ha->fw_options1,
++                  ha->fw_options2, ha->fw_options3, opt10, opt11);
++
++              DEBUG3(printk("scsi(%ld): Init firmware -- success.\n",
++                  ha->host_no));
++      }
++
++      return (status);
++}
++
++/**
++ * qla2x00_fw_ready() - Waits for firmware ready.
++ * @ha: HA context
++ *
++ * Returns 0 on success.
++ */
++static uint8_t
++qla2x00_fw_ready(scsi_qla_host_t *ha)
++{
++      uint8_t         status = 0;
++      unsigned long   wtime, mtime;
++      uint16_t        min_wait;       /* Minimum wait time if loop is down */
++      uint16_t        wait_time;      /* Wait time if loop is coming ready */
++      uint16_t        pause_time;
++      uint16_t        fw_state;
++
++      /* 20 seconds for loop down. */
++      min_wait = 20;          
++      ha->device_flags &= ~DFLG_NO_CABLE;
++
++      /*
++       * Firmware should take at most one RATOV to login, plus 5 seconds for
++       * our own processing.
++       */
++      if ((wait_time = (ha->retry_count*ha->login_timeout) + 5) < min_wait) {
++              wait_time = min_wait;
++      }
++
++      pause_time = 1000;      /* 1000 usec */
++
++      /* Min wait time if loop down */
++      mtime = jiffies + (min_wait * HZ);
++
++      /* wait time before firmware ready */
++      wtime = jiffies + (wait_time * HZ);
++
++      /* Wait for ISP to finish LIP */
++      if (!qla2x00_quiet)
++              printk(KERN_INFO
++                  "scsi(%ld): Waiting for LIP to complete...\n", ha->host_no);
++
++      DEBUG3(printk("scsi(%ld): Waiting for LIP to complete...\n",
++          ha->host_no));
++
++      do {
++              status = qla2x00_get_firmware_state(ha, &fw_state);
++
++              if (status == QL_STATUS_SUCCESS) {
++                      if (fw_state == FSTATE_READY) {
++                              DEBUG(printk("scsi(%ld): F/W Ready - OK \n",
++                                  ha->host_no));
++
++                              qla2x00_get_retry_cnt(ha,
++                                  &ha->retry_count, &ha->login_timeout);
++
++                              status = QL_STATUS_SUCCESS;
++                              break;
++                      }
++
++                      status = QL_STATUS_ERROR;
++
++                      if (atomic_read(&ha->loop_down_timer) ||
++                          fw_state == FSTATE_LOSS_OF_SYNC) {
++
++                              /* Loop down. Timeout on min_wait */
++                              if (time_after_eq(jiffies, mtime)) {
++                                      printk(KERN_INFO
++                                          "scsi(%ld): Cable is "
++                                          "unplugged...\n",
++                                          ha->host_no);
++
++                                      ha->device_flags |= DFLG_NO_CABLE;
++                                      break;
++                              }
++                      }
++              } else {
++                      /* Mailbox cmd failed. Timeout on min_wait. */
++                      if (time_after_eq(jiffies, mtime))
++                              break;
++              }
++
++              if (time_after_eq(jiffies, wtime))
++                      break;
++
++              /* Delay for a while */
++              set_current_state(TASK_INTERRUPTIBLE);
++              schedule_timeout(HZ / 2);
++
++              DEBUG3(printk("scsi(%ld): fw_state=%x curr time=%lx.\n",
++                  ha->host_no, fw_state, jiffies));
++      } while (1);
++
++      DEBUG(printk("scsi(%ld): fw_state=%x curr time=%lx.\n",
++          ha->host_no, fw_state, jiffies));
++
++      if (status) {
++              DEBUG2_3(printk("scsi(%ld): Firmware ready **** FAILED ****.\n",
++                  ha->host_no));
++      }
++
++      return (status);
++}
++
++/*
++*  qla2x00_configure_hba
++*      Setup adapter context.
++*
++* Input:
++*      ha = adapter state pointer.
++*
++* Returns:
++*      0 = success
++*
++* Context:
++*      Kernel context.
++*/
++static uint8_t
++qla2x00_configure_hba(scsi_qla_host_t *ha)
++{
++      uint8_t       rval;
++      uint16_t      loop_id;
++      uint16_t      topo;
++      uint8_t       al_pa;
++      uint8_t       area;
++      uint8_t       domain;
++      char            connect_type[22];
++
++      ENTER(__func__);
++
++      /* Get host addresses. */
++      rval = qla2x00_get_adapter_id(ha,
++          &loop_id, &al_pa, &area, &domain, &topo);
++      if (rval != QL_STATUS_SUCCESS) {
++              printk(KERN_WARNING
++                  "scsi(%ld): ERROR -- Unable to get host loop ID.\n",
++                  ha->host_no);
++              return (rval);
++      }
++
++      if (topo == 4) {
++              printk(KERN_INFO
++                      "scsi(%ld): Cannot get topology - retrying.\n",
++                      ha->host_no);
++              return (QL_STATUS_ERROR);
++      }
++
++      ha->loop_id = loop_id;
++
++#if defined(ISP2100)
++      /* Make sure 2100 only has loop, in case of any firmware bug. */
++      topo = 0;
++#endif
++
++      /* initialize */
++      ha->min_external_loopid = SNS_FIRST_LOOP_ID;
++      ha->operating_mode = LOOP;
++
++      switch (topo) {
++      case 0:
++              DEBUG3(printk("scsi(%ld): HBA in NL topology.\n",
++                  ha->host_no));
++              ha->current_topology = ISP_CFG_NL;
++              strcpy(connect_type, "(Loop)");
++              break;
++
++      case 1:
++              DEBUG3(printk("scsi(%ld): HBA in FL topology.\n",
++                  ha->host_no));
++              ha->current_topology = ISP_CFG_FL;
++              strcpy(connect_type, "(FL_Port)");
++              break;
++
++      case 2:
++              DEBUG3(printk("scsi(%ld): HBA in N P2P topology.\n",
++                  ha->host_no));
++              ha->operating_mode = P2P;
++              ha->current_topology = ISP_CFG_N;
++              strcpy(connect_type, "(N_Port-to-N_Port)");
++              break;
++
++      case 3:
++              DEBUG3(printk("scsi(%ld): HBA in F P2P topology.\n",
++                  ha->host_no));
++              ha->operating_mode = P2P;
++              ha->current_topology = ISP_CFG_F;
++              strcpy(connect_type, "(F_Port)");
++              break;
++
++      default:
++              DEBUG3(printk("scsi(%ld): HBA in unknown topology %x. "
++                  "Using NL.\n",
++                  ha->host_no, topo));
++              ha->current_topology = ISP_CFG_NL;
++              strcpy(connect_type, "(Loop)");
++              break;
++      }
++
++      /* Save Host port and loop ID. */
++      /* byte order - Big Endian */
++      ha->d_id.b.domain = domain;
++      ha->d_id.b.area = area;
++      ha->d_id.b.al_pa = al_pa;
++
++      if (!qla2x00_quiet)
++              printk(KERN_INFO
++                  "scsi(%ld): Topology - %s, Host Loop address 0x%x\n",
++                  ha->host_no, connect_type, ha->loop_id);
++
++      if (rval) {
++              DEBUG2_3(printk("scsi(%ld): FAILED.\n", ha->host_no));
++      } else {
++              DEBUG3(printk("scsi(%ld): exiting normally.\n", ha->host_no));
++      }
++
++      return(rval);
++}
++
++/*
++* NVRAM configuration for ISP 2xxx
++*
++* Input:
++*      ha                = adapter block pointer.
++*
++* Output:
++*      initialization control block in response_ring
++*      host adapters parameters in host adapter block
++*
++* Returns:
++*      0 = success.
++*/
++static uint8_t
++qla2x00_nvram_config(scsi_qla_host_t *ha)
++{
++      uint8_t   status = 0;
++      uint8_t   chksum = 0;
++      uint16_t  cnt, base;
++      uint8_t   *dptr1, *dptr2;
++      init_cb_t *icb   = ha->init_cb;
++      nvram_t *nv    = (nvram_t *)ha->request_ring;
++      uint16_t  *wptr  = (uint16_t *)ha->request_ring;
++#if defined(ISP2300)
++      device_reg_t *reg = ha->iobase;
++      uint16_t  data;
++#endif
++
++      if (ha->flags.nvram_config_done)
++              return (status);
++
++      ENTER(__func__);
++ 
++      /* Determine NVRAM starting address. */
++      base = 0;
++#if defined(ISP2300)
++      if (ha->pdev->device == QLA2312_DEVICE_ID ||
++          ha->pdev->device == QLA2322_DEVICE_ID) {
++              data = RD_REG_WORD(&reg->ctrl_status);
++              if ((data >> 14) == 1)
++                      base = 0x80;
++
++              data = RD_REG_WORD(&reg->nvram);
++              while (data & NVR_BUSY) {
++                      udelay(100);
++                      data = RD_REG_WORD(&reg->nvram);
++              }
++
++              /* Lock resource */
++              WRT_REG_WORD(&reg->host_semaphore, 0x1);
++              udelay(5);
++              data = RD_REG_WORD(&reg->host_semaphore);
++              while ((data & BIT_0) == 0) {
++                      /* Lock failed */
++                      udelay(100);
++                      WRT_REG_WORD(&reg->host_semaphore, 0x1);
++                      udelay(5);
++                      data = RD_REG_WORD(&reg->host_semaphore);
++              }
++      }
++#endif
++
++      /* Get NVRAM data and calculate checksum. */
++      for (cnt = 0; cnt < sizeof(nvram_t)/2; cnt++) {
++              *wptr = cpu_to_le16(qla2x00_get_nvram_word(ha, (cnt+base)));
++              chksum += (uint8_t)*wptr;
++              chksum += (uint8_t)(*wptr >> 8);
++              wptr++;
++      }
++
++#if defined(ISP2300)
++      if (ha->pdev->device == QLA2312_DEVICE_ID ||
++          ha->pdev->device == QLA2322_DEVICE_ID) {
++              /* Unlock resource */
++              WRT_REG_WORD(&reg->host_semaphore, 0);
++      }
++#endif
++
++      DEBUG5(printk("scsi(%ld): Contents of NVRAM\n", ha->host_no));
++      DEBUG5(qla2x00_dump_buffer(
++          (uint8_t *)ha->request_ring, sizeof(nvram_t)));
++
++      /* Bad NVRAM data, set defaults parameters. */
++      if (chksum || nv->id[0] != 'I' || nv->id[1] != 'S' ||
++          nv->id[2] != 'P' || nv->id[3] != ' ' || nv->nvram_version < 1) {
++
++              /* Reset NVRAM data. */
++              DEBUG(printk("scsi(%ld): Using defaults for NVRAM - "
++                  "checksum=0x%x, Id=%c, version=0x%x\n",
++                  ha->host_no,
++                  chksum, nv->id[0], nv->nvram_version));
++
++              memset(nv, 0, sizeof(nvram_t));
++
++              /*
++               * Set default initialization control block.
++               */
++              nv->parameter_block_version = ICB_VERSION;
++
++#if defined(ISP2300)
++              nv->firmware_options[0] = BIT_2 | BIT_1;
++              nv->firmware_options[1] = BIT_7 | BIT_5;
++              nv->add_firmware_options[0] = BIT_5;
++              nv->add_firmware_options[1] = BIT_5 | BIT_4;
++              nv->frame_payload_size  = __constant_cpu_to_le16(2048);
++#elif defined(ISP2200)
++              nv->firmware_options[0] = BIT_3 | BIT_2 | BIT_1;
++              nv->firmware_options[1] = BIT_7 | BIT_5;
++              nv->add_firmware_options[0] = BIT_5 | BIT_4;
++              nv->add_firmware_options[1] = BIT_5 | BIT_4;
++              nv->frame_payload_size  = __constant_cpu_to_le16(1024);
++#else /* defined(ISP2100) */
++              nv->firmware_options[0] = BIT_3 | BIT_1;
++              nv->firmware_options[1] = BIT_5;
++              nv->frame_payload_size  = __constant_cpu_to_le16(1024);
++#endif
++
++              nv->max_iocb_allocation = __constant_cpu_to_le16(256);
++              nv->execution_throttle  = __constant_cpu_to_le16(16);
++              nv->retry_count = 8;
++              nv->retry_delay = 1;
++
++              nv->port_name[0] = 33;
++              nv->port_name[3] = 224;
++              nv->port_name[4] = 139;
++
++              nv->login_timeout = 4;
++
++              /*
++               * Set default host adapter parameters
++               */
++              nv->host_p[1] = BIT_2;
++              nv->reset_delay = 5;
++              nv->port_down_retry_count = 8;
++              nv->max_luns_per_target = __constant_cpu_to_le16(8);
++
++              status = 1;
++      }
++
++      /* Reset Initialization control block */
++      memset(icb, 0, sizeof(init_cb_t));
++
++      /*
++       * Setup driver NVRAM options.
++       */
++      nv->firmware_options[0] |= (BIT_6 | BIT_1);
++      nv->firmware_options[0] &= ~(BIT_5 | BIT_4);
++      nv->firmware_options[1] |= (BIT_5 | BIT_0);
++      nv->firmware_options[1] &= ~BIT_4;
++#if defined(ISP2300)
++      nv->firmware_options[0] |= BIT_2;
++      nv->firmware_options[0] &= ~BIT_3;
++#elif defined(ISP2200)
++      nv->firmware_options[0] |= BIT_2;
++#endif
++
++#if !defined(FC_IP_SUPPORT)
++      /* Enable FC-Tape support */
++      nv->firmware_options[1] |= BIT_7;
++      nv->add_firmware_options[1] |= (BIT_5 | BIT_4);
++#endif
++
++      /*
++       * Copy over NVRAM RISC parameter block to initialization control block.
++       */
++      dptr1 = (uint8_t *)icb;
++      dptr2 = (uint8_t *)&nv->parameter_block_version;
++      cnt = (uint8_t *)&icb->request_q_outpointer - (uint8_t *)&icb->version;
++      while (cnt--)
++              *dptr1++ = *dptr2++;
++
++      /* Copy 2nd half. */
++      dptr1 = (uint8_t *)icb->add_firmware_options;
++      cnt = (uint8_t *)icb->reserved_3 - (uint8_t *)icb->add_firmware_options;
++      while (cnt--)
++              *dptr1++ = *dptr2++;
++
++      /* Prepare nodename */
++      if ((icb->firmware_options[1] & BIT_6) == 0) {
++              /*
++               * Firmware will apply the following mask if the nodename was
++               * not provided.
++               */
++              memcpy(icb->node_name, icb->port_name, WWN_SIZE);
++              icb->node_name[0] &= 0xF0;
++      }
++
++      /*
++       * Set host adapter parameters.
++       */
++      ha->nvram_version = nv->nvram_version;
++
++      ha->flags.disable_luns = ((nv->host_p[0] & BIT_2) ? 1 : 0);
++      ha->flags.disable_risc_code_load = ((nv->host_p[0] & BIT_4) ? 1 : 0);
++      ha->flags.set_cache_line_size_1 = ((nv->host_p[0] & BIT_5) ? 1 : 0);
++      ha->flags.enable_64bit_addressing = ((nv->host_p[1] & BIT_0) ? 1 : 0);
++      ha->flags.enable_lip_reset = ((nv->host_p[1] & BIT_1) ? 1 : 0);
++      ha->flags.enable_lip_full_login = ((nv->host_p[1] & BIT_2) ? 1 : 0);
++      ha->flags.enable_target_reset = ((nv->host_p[1] & BIT_3) ? 1 : 0);
++      ha->flags.enable_flash_db_update = ((nv->host_p[1] & BIT_4) ? 1 : 0);
++
++      ha->flags.link_down_error_enable  = 1;
++
++      ha->flags.enable_target_mode =
++          ((icb->firmware_options[0] & BIT_4) ? 1 : 0);
++      ha->operating_mode =
++          (icb->add_firmware_options[0] & (BIT_6 | BIT_5 | BIT_4)) >> 4;
++
++      qla2x00_config_dma_addressing(ha);
++
++      ha->fw_seriallink_options[0] = nv->seriallink_options[0];
++      ha->fw_seriallink_options[1] = nv->seriallink_options[1];
++
++      /* save HBA serial number */
++      ha->serial0 = icb->port_name[5];
++      ha->serial1 = icb->port_name[6];
++      ha->serial2 = icb->port_name[7];
++      memcpy(ha->node_name, icb->node_name, WWN_SIZE);
++#if defined(FC_IP_SUPPORT)
++      memcpy(ha->ip_port_name, icb->port_name, WWN_SIZE);
++#endif
++
++      ha->hiwat = le16_to_cpu(icb->max_iocb_allocation);
++      ha->execution_throttle = 0xFFFF;
++      icb->execution_throttle = __constant_cpu_to_le16(0xFFFF);
++
++      ha->retry_count = nv->retry_count;
++
++      /* Set minimum login_timeout to 4 seconds. */
++      if (nv->login_timeout < ql2xlogintimeout)
++              nv->login_timeout = ql2xlogintimeout;
++      if (nv->login_timeout < 4)
++              nv->login_timeout = 4;
++      ha->login_timeout = nv->login_timeout;
++      icb->login_timeout = nv->login_timeout;
++
++/* FIXME
++ *
++ * port_down_retry_count updated twice
++ *
++ */
++      ha->port_down_retry_count = nv->port_down_retry_count;
++      ha->minimum_timeout =
++          (ha->login_timeout * ha->retry_count) + ha->port_down_retry_count;
++      ha->loop_reset_delay = nv->reset_delay;
++
++      /* Will get the value from NVRAM. */
++      ha->loop_down_timeout = LOOP_DOWN_TIMEOUT;
++      ha->loop_down_abort_time = LOOP_DOWN_TIME - ha->loop_down_timeout;
++
++      /* save OEM related items for QLA2200s and QLA2300s */
++      ha->oem_id = nv->oem_id;
++      memcpy(ha->oem_specific, nv->oem_specific, sizeof(ha->oem_specific));
++
++      ha->max_probe_luns = le16_to_cpu(nv->max_luns_per_target);
++      if (ha->max_probe_luns == 0)
++              ha->max_probe_luns = MIN_LUNS;
++
++#if defined(IOCB_THROLLE_USAGE)
++      /* High-water mark of IOCBs */
++      ha->iocb_hiwat = MAX_IOCBS_AVAILBALE;
++#endif
++
++#if USE_BIOS_MAX_LUNS
++      ha->max_luns = le16_to_cpu(nv->max_luns_per_target);
++      if (ha->max_luns == 0)
++              ha->max_luns = MAX_LUNS;
++      else if (ha->max_luns > MAX_LUNS)
++              ha->max_luns = MAX_LUNS;
++#else
++      ha->max_luns = MAX_LUNS;
++#endif
++
++/* FIXME
++ *
++ * port_down_retry_count updated twice
++ *
++ */
++      /*
++       * Need enough time to try and get the port back.
++       */
++      if (qlport_down_retry)
++              ha->port_down_retry_count = qlport_down_retry;
++      /* Set login_retry_count */
++      ha->login_retry_count  = nv->retry_count;
++      if (ha->port_down_retry_count == nv->port_down_retry_count &&
++          ha->port_down_retry_count > 3)
++              ha->login_retry_count = ha->port_down_retry_count;
++      else if (ha->port_down_retry_count > ha->login_retry_count)
++              ha->login_retry_count = ha->port_down_retry_count;
++
++      ha->binding_type = Bind;
++      if ((ha->binding_type != BIND_BY_PORT_NAME) &&
++          (ha->binding_type != BIND_BY_PORT_ID) &&
++          (ha->binding_type != BIND_BY_NODE_NAME)) {
++
++              printk(KERN_WARNING
++                  "scsi(%ld): Invalid binding type specified (%d), "
++                  "defaulting to BIND_BY_PORT_NAME!!!\n",
++                  ha->host_no, ha->binding_type);
++
++              ha->binding_type = BIND_BY_PORT_NAME;
++      }
++
++      /*
++       * Setup ring parameters in initialization control block
++       */
++      icb->request_q_outpointer = __constant_cpu_to_le16(0);
++      icb->response_q_inpointer = __constant_cpu_to_le16(0);
++      icb->request_q_length = __constant_cpu_to_le16(REQUEST_ENTRY_CNT);
++      icb->response_q_length = __constant_cpu_to_le16(RESPONSE_ENTRY_CNT);
++      icb->request_q_address[0] = cpu_to_le32(LSD(ha->request_dma));
++      icb->request_q_address[1] = cpu_to_le32(MSD(ha->request_dma));
++      icb->response_q_address[0] = cpu_to_le32(LSD(ha->response_dma));
++      icb->response_q_address[1] = cpu_to_le32(MSD(ha->response_dma));
++
++      icb->lun_enables = __constant_cpu_to_le16(0);
++      icb->command_resource_count = 0;
++      icb->immediate_notify_resource_count = 0;
++      icb->timeout = __constant_cpu_to_le16(0);
++
++      ha->flags.nvram_config_done = 1;
++
++      if (status) {
++              DEBUG2_3(printk(KERN_WARNING
++                  "scsi(%ld): NVRAM configuration failed!\n", ha->host_no));
++      }
++
++      LEAVE(__func__);
++
++      return (status);
++}
++
++/*
++* qla2x00_init_fc_db
++*      Initializes Fibre Channel Device Database.
++*
++* Input:
++*      ha = adapter block pointer.
++*
++* Output:
++*      ha->fc_db = initialized
++*/
++static void
++qla2x00_init_fc_db(scsi_qla_host_t *ha)
++{
++      uint16_t cnt;
++
++      ENTER(__func__);
++
++      /* Initialize fc database if it is not initialized. */
++      if (!ha->fc_db[0].loop_id && !ha->fc_db[1].loop_id) {
++              ha->flags.updated_fc_db = FALSE;
++
++              /* Initialize target database. */
++              for (cnt = 0; cnt < MAX_FIBRE_DEVICES; cnt++) {
++                      ha->fc_db[cnt].name[0] = 0L;
++                      ha->fc_db[cnt].name[1] = 0L;
++                      ha->fc_db[cnt].loop_id = PORT_UNUSED;
++                      ha->fc_db[cnt].port_login_retry_count =
++                          ha->port_down_retry_count * PORT_RETRY_TIME;
++                      ha->fc_db[cnt].flag = 0;   /* v2.19.5b3 */
++              }
++      }
++
++      LEAVE(__func__);
++}
++
++
++/*
++* qla2x00_init_tgt_map
++*      Initializes target map.
++*
++* Input:
++*      ha = adapter block pointer.
++*
++* Output:
++*      TGT_Q initialized
++*/
++static void
++qla2x00_init_tgt_map(scsi_qla_host_t *ha)
++{
++      uint32_t t;
++
++      ENTER(__func__);
++
++      for (t = 0; t < MAX_TARGETS; t++)
++              TGT_Q(ha, t) = (os_tgt_t *)NULL;
++
++      LEAVE(__func__);
++}
++
++/*
++ * qla2x00_configure_loop
++ *      Updates Fibre Channel Device Database with what is actually on loop.
++ *
++ * Input:
++ *      ha                = adapter block pointer.
++ *
++ * Output:
++ *      ha->fc_db = updated
++ *
++ * Returns:
++ *      0 = success.
++ *      1 = error.
++ *      2 = database was full and device was not configured.
++ */
++static uint8_t
++qla2x00_configure_loop(scsi_qla_host_t *ha) 
++{
++      uint8_t  rval = 0;
++      uint8_t  rval1 = 0;
++      uint8_t  enable_slot_reuse = FALSE;
++      uint16_t  cnt;
++      static unsigned long  flags, save_flags;
++#if defined(FC_IP_SUPPORT)
++      struct ip_device        *ipdev;
++#endif
++
++      ENTER(__func__);
++
++      DEBUG(printk("scsi(%ld): Begin configure loop.\n", ha->host_no));
++
++      /* Get Initiator ID */
++      if (qla2x00_configure_hba(ha)) {
++              DEBUG(printk("scsi(%ld): Unable to configure HBA.\n",
++                  ha->host_no));
++              return(1);
++      }
++
++#if defined(FC_IP_SUPPORT)
++      /* Disable all IP devices in linked list */
++      for (ipdev = ha->ipdev_db_top; ipdev; ipdev = ipdev->next)
++              ipdev->flags &= ~IP_DEV_FLAG_PRESENT;
++#endif /* FC_IP_SUPPORT */
++
++      save_flags = flags = ha->dpc_flags;
++      DEBUG(printk("scsi(%ld): Configure loop -- dpc flags =0x%lx\n",
++          ha->host_no, flags));
++
++      /* dg 02/26/02 ha->dpc_flags &= ~(LOCAL_LOOP_UPDATE | RSCN_UPDATE); */
++
++      /*
++       * If we have both an RSCN and PORT UPDATE pending then handle them
++       * both at the same time.
++       */
++      clear_bit(LOCAL_LOOP_UPDATE, &ha->dpc_flags);
++      clear_bit(RSCN_UPDATE, &ha->dpc_flags);
++      ha->mem_err = 0 ;
++
++      /* Determine what we need to do */
++      if (ha->current_topology == ISP_CFG_FL &&
++          (test_bit(LOCAL_LOOP_UPDATE, &flags))) {
++
++              ha->flags.rscn_queue_overflow = TRUE;
++              set_bit(RSCN_UPDATE, &flags);
++
++      } else if (ha->current_topology == ISP_CFG_F &&
++          (test_bit(LOCAL_LOOP_UPDATE, &flags))) {
++
++              ha->flags.rscn_queue_overflow = TRUE;
++              set_bit(RSCN_UPDATE, &flags);
++              clear_bit(LOCAL_LOOP_UPDATE, &flags);
++
++      } else if (!ha->flags.online ||
++          (test_bit(ABORT_ISP_ACTIVE, &flags))) {
++
++              ha->flags.rscn_queue_overflow = TRUE;
++              set_bit(RSCN_UPDATE, &flags);
++              set_bit(LOCAL_LOOP_UPDATE, &flags);
++      }
++
++      do {
++              if (test_bit(LOCAL_LOOP_UPDATE, &flags)) {
++                      rval = rval |
++                          qla2x00_configure_local_loop(ha, enable_slot_reuse);
++              }
++
++              if (test_bit(RSCN_UPDATE, &flags)) {
++                      rval1 = qla2x00_configure_fabric(ha, enable_slot_reuse);
++                      if ((rval1 & BIT_0) && ha->sns_retry_cnt < 8) {
++                              ha->sns_retry_cnt++;
++                              set_bit(LOGIN_RETRY_NEEDED, &ha->dpc_flags);
++                      }
++              }
++
++              /* If devices not configured first time try reusing slots.*/
++              if (enable_slot_reuse == FALSE && (rval & BIT_1))
++                      enable_slot_reuse = TRUE;
++              else
++                      enable_slot_reuse = FALSE;
++
++              /* Isolate error status. */
++              if (rval & BIT_0) {
++                      rval = 1;
++              } else {
++                      rval = 0;
++              }
++
++      } while (enable_slot_reuse == TRUE && rval == 0);
++
++      if (!atomic_read(&ha->loop_down_timer) &&
++          !(test_bit(LOOP_RESYNC_NEEDED, &ha->dpc_flags))) {
++
++              /* Mark devices that are not present as DEV_ABSENCE */
++              for (cnt = 0; cnt < MAX_FIBRE_DEVICES; cnt++) {
++                      if (ha->fc_db[cnt].loop_id & PORT_LOST_ID) {
++                              ha->fc_db[cnt].flag |= DEV_ABSENCE;
++                      } else {
++                              /* device returned */
++                              if (ha->fc_db[cnt].loop_id <
++                                  LAST_SNS_LOOP_ID &&
++                                  ha->fc_db[cnt].flag & DEV_ABSENCE) {
++                                      ha->fc_db[cnt].flag &= ~DEV_ABSENCE;
++                                      ha->fc_db[cnt].flag |= DEV_RETURN;
++                                      ha->fc_db[cnt].port_login_retry_count =
++                                          ha->port_down_retry_count *
++                                           PORT_RETRY_TIME;
++                              }
++                      }
++              }
++
++              rval1 = qla2x00_build_fcport_list(ha);
++              if (((rval1 & BIT_0) || ha->mem_err != 0) &&
++                  ha->sns_retry_cnt < 8) {
++
++                      ha->sns_retry_cnt++;
++                      set_bit(LOGIN_RETRY_NEEDED, &ha->dpc_flags);
++              }
++
++              if (!ha->flags.failover_enabled)
++                      qla2x00_config_os(ha);
++
++              /* If we found all devices then go ready */
++              if (!(test_bit(LOGIN_RETRY_NEEDED, &ha->dpc_flags))) {
++                      ha->loop_state = LOOP_READY;
++
++                      if (ha->flags.failover_enabled) {
++                              DEBUG(printk("scsi(%ld): schedule FAILBACK "
++                                  "EVENT\n", ha->host_no));
++                              if (!(test_and_set_bit(FAILOVER_EVENT_NEEDED,
++                                  &ha->dpc_flags))) {
++                                      ha->failback_delay = failbackTime;
++                              }
++                              set_bit(COMMAND_WAIT_NEEDED, &ha->dpc_flags);
++                              ha->failover_type = MP_NOTIFY_LOOP_UP;
++                      }
++
++                      DEBUG(printk("scsi(%ld): LOOP READY\n", ha->host_no));
++              } else {
++                      if (test_bit(LOCAL_LOOP_UPDATE, &save_flags))
++                              set_bit(LOCAL_LOOP_UPDATE, &ha->dpc_flags);
++                      if (test_bit(RSCN_UPDATE, &save_flags))
++                              set_bit(RSCN_UPDATE, &ha->dpc_flags);
++              }
++      } else {
++              DEBUG(printk("scsi(%ld): Loop down counter running= %d or "
++                  "Resync needed- dpc flags= %ld\n",
++                  ha->host_no,
++                  atomic_read(&ha->loop_down_timer), ha->dpc_flags));
++              /* ???? dg 02/26/02  rval = 1; */
++      }
++
++      if (rval) {
++              DEBUG2_3(printk("%s(%ld): *** FAILED ***\n",
++                  __func__, ha->host_no));
++      } else {
++              DEBUG3(printk("%s: exiting normally\n", __func__));
++      }
++
++      return(rval);
++}
++
++/*
++ * qla2x00_configure_local_loop
++ *    Updates Fibre Channel Device Database with local loop devices.
++ *
++ * Input:
++ *    ha = adapter block pointer.
++ *    enable_slot_reuse = allows the use of PORT_AVAILABLE slots.
++ *
++ * Returns:
++ *    0 = success.
++ *    BIT_0 = error.
++ *    BIT_1 = database was full and a device was not configured.
++ */
++static uint8_t
++qla2x00_configure_local_loop(scsi_qla_host_t *ha, uint8_t enable_slot_reuse) 
++{
++      uint8_t  status = 0;
++      uint8_t  rval;
++      uint8_t  port_name[8];
++      uint8_t  update_status = 0;
++      uint16_t index, size;
++      dma_addr_t phys_address = 0;
++      fcdev_t device;
++      port_list_entry_t *gn_list, *port_entry;
++      uint16_t localdevices = 0;
++#if defined(FC_IP_SUPPORT)
++      uint16_t list_entry_loop_id;
++#endif
++
++      ENTER(__func__);
++
++      /*
++       * No point in continuing if the loop is in a volatile state -- 
++       * reschedule LOCAL_LOOP_UPDATE for later processing
++       */
++      if (test_bit(LOOP_RESYNC_NEEDED, &ha->dpc_flags)) {
++              set_bit(LOCAL_LOOP_UPDATE, &ha->dpc_flags);
++              return (0);
++      }
++
++      gn_list = pci_alloc_consistent(ha->pdev,
++          sizeof(GN_LIST_LENGTH), &phys_address);
++      if (gn_list == NULL) {
++              DEBUG2(printk("scsi(%ld): Failed to allocate memory, No local "
++                  "loop\n",
++                  ha->host_no));
++
++              printk(KERN_WARNING
++                  "scsi(%ld): Memory Allocation failed - port_list",
++                  ha->host_no);
++
++              ha->mem_err++;
++              return (BIT_0);
++      }
++      memset(gn_list, 0, sizeof(GN_LIST_LENGTH));
++
++      /* Mark all local devices PORT_LOST_ID first */
++      for (index = 0; index < MAX_FIBRE_DEVICES; index++) {
++              if (ha->fc_db[index].loop_id <= LAST_SNS_LOOP_ID &&
++                  !(ha->fc_db[index].flag & DEV_PUBLIC)) {
++
++                      DEBUG(printk("scsi(%ld): Marking port lost @ slot "
++                          "%d %02x%02x%02x\n",
++                          ha->host_no,
++                          index,
++                          ha->fc_db[index].d_id.b.domain,
++                          ha->fc_db[index].d_id.b.area,
++                          ha->fc_db[index].d_id.b.al_pa));
++
++                      ha->fc_db[index].loop_id |= PORT_LOST_ID;
++              }
++      }
++
++      DEBUG3(printk("scsi(%ld): Getting FCAL position map\n", ha->host_no));
++      DEBUG3(qla2x00_get_fcal_position_map(ha, NULL));
++
++      /* Get port name list
++       *
++       * Via qla2x00_get_port_list:
++       *
++       *      Bit 0 - return node names,
++       *      Bit 1 - loop IDs 0-255
++       */
++#if defined(FC_IP_SUPPORT)
++      if (ha->flags.enable_ip == FALSE)
++              rval = qla2x00_get_port_list(ha,
++                  gn_list, phys_address, BIT_0, &size);
++      else
++              rval = qla2x00_get_port_list(ha,
++                  gn_list, phys_address, BIT_0|BIT_1, &size);
++#else
++      rval = qla2x00_get_port_list(ha, gn_list, phys_address, BIT_0, &size);
++#endif
++      if (rval) {
++              status = BIT_0;
++              goto cleanup_allocation;
++      }
++
++      DEBUG3(printk("scsi(%ld): Port list size (%d)\n", ha->host_no, size));
++      DEBUG3(qla2x00_dump_buffer((uint8_t *)gn_list, size));
++
++      /* Any valid entries returned? */
++      if (size / sizeof(port_list_entry_t) == 0)
++              goto cleanup_allocation;
++
++      port_entry = gn_list;
++      for ( ; size >= sizeof(port_list_entry_t);
++          size -= sizeof(port_list_entry_t), port_entry++) {
++
++              device.loop_id = le16_to_cpu(port_entry->loop_id);
++
++#if defined(FC_IP_SUPPORT)
++              list_entry_loop_id = device.loop_id;
++              device.loop_id &= LOOP_ID_MASK; 
++#endif
++
++              /* Skip any non-local loop-ids - this includes 'known ports' */
++              if (device.loop_id > LAST_LOCAL_LOOP_ID) 
++                      continue;
++#if NOT_NEEDED
++              /* Skip the known ports. */
++              if ((device.loop_id == SNS_FL_PORT) ||
++                      (device.loop_id == FABRIC_CONTROLLER) ||
++                      (device.loop_id == SIMPLE_NAME_SERVER))
++                      continue;
++#endif
++
++              device.flag = 0;
++
++              /* Prep node name -- big-endian format */
++              *((u64 *)device.name) = __swab64p((u64 *)port_entry->name);
++
++              /* Retrieve port name */
++              rval = qla2x00_get_port_name(ha, device.loop_id, port_name, 0);
++              if (rval || qla2x00_is_wwn_zero(port_name)) {
++                      DEBUG2(printk("scsi(%ld): Loop -- error retrieving "
++                          "port_name.\n",
++                          ha->host_no));
++
++                      status = BIT_0;
++                      break;
++              }
++              memcpy(device.wwn, port_name, WWN_SIZE);
++
++              /* Derive portid from alpa table */
++              device.d_id.b24 = 0;
++              device.d_id.b.al_pa = alpa_table[device.loop_id];
++
++              DEBUG2_3(printk("scsi(%ld): Loop scan found device - "
++                  "nodename %02x%02x%02x%02x%02x%02x%02x%02x "
++                  "portname %02x%02x%02x%02x%02x%02x%02x%02x "
++                  "portid %02x%02x%02x.\n", 
++                  ha->host_no,
++                  device.name[0], device.name[1],
++                  device.name[2], device.name[3],
++                  device.name[4], device.name[5],
++                  device.name[6], device.name[7],
++                  device.wwn[0], device.wwn[1], device.wwn[2], device.wwn[3],
++                  device.wwn[4], device.wwn[5], device.wwn[6], device.wwn[7],
++                  device.d_id.b.domain,
++                  device.d_id.b.area,
++                  device.d_id.b.al_pa));
++
++#if !defined(FC_IP_SUPPORT)
++              /* SCSI type device */
++              update_status = qla2x00_update_fc_database(ha,
++                  &device, enable_slot_reuse);
++              if (update_status)
++                      status |= update_status;
++              else
++                      localdevices++;
++#else
++              if (!(list_entry_loop_id & PLE_NOT_SCSI_DEVICE)) {
++                      /* SCSI type device */
++                      update_status = qla2x00_update_fc_database(ha,
++                          &device, enable_slot_reuse);
++
++                      if (update_status)
++                              status |= update_status;
++                      else
++                              localdevices++;
++              } else if (ha->flags.enable_ip == TRUE) {
++                      /* SCSI login failed, assume it is IP device */
++                      DEBUG12(printk("scsi(%ld): Loop scan found IP device "
++                          "WWNN:%02x%02x%02x%02x%02x%02x%02x%02x "
++                          "DID:%02x%02x%02x.\n",
++                          ha->host_no,
++                          device.name[0], device.name[1],
++                          device.name[2], device.name[3],
++                          device.name[4], device.name[5],
++                          device.name[6], device.name[7],
++                          device.d_id.b.domain,
++                          device.d_id.b.area,
++                          device.d_id.b.al_pa));
++
++                      update_status =
++                          qla2x00_update_ip_device_data(ha, &device);
++                      if (update_status == QL_STATUS_SUCCESS)
++                              localdevices++;
++                      else if (update_status == QL_STATUS_RESOURCE_ERROR)
++                              status |= BIT_1;
++                      else
++                              status |= BIT_0;
++              }
++#endif
++      } /* for each port entry */
++
++cleanup_allocation:
++      pci_free_consistent(ha->pdev,
++          sizeof(GN_LIST_LENGTH), gn_list, phys_address);
++
++      if (status & BIT_0) {
++              DEBUG2(printk("scsi(%ld): Configure local loop error exit: "
++                  "rval=%x\n", ha->host_no, rval));
++      }
++
++      if (localdevices > 0) {
++              ha->device_flags |= DFLG_LOCAL_DEVICES;
++              ha->device_flags &= ~DFLG_RETRY_LOCAL_DEVICES;
++      }
++
++      LEAVE(__func__);
++
++      return (status);
++}
++
++/*
++ * qla2x00_configure_fabric
++ *      Setup SNS devices with loop ID's.
++ *
++ * Input:
++ *      ha = adapter block pointer.
++ *
++ * Returns:
++ *      0 = success.
++ *      BIT_0 = error
++ *      BIT_1 = database was full and device was not configured.
++ */
++#define MAX_PUBLIC_LOOP_IDS LAST_SNS_LOOP_ID + 1
++
++static uint8_t
++qla2x00_configure_fabric(scsi_qla_host_t *ha, uint8_t enable_slot_reuse) 
++{
++      uint8_t     rval = 0;
++      uint8_t     rval1;
++      uint8_t     local_flags = 0;
++      uint8_t     tmp_name[8];
++      fcdev_t     dev;
++      uint16_t    i, index, found_cnt;
++      uint16_t    new_dev_cnt;
++      uint16_t    tmp_loop_id;
++      uint16_t    tmp_topo;
++      struct new_dev *new_dev_list;
++      struct list_head *fcil, *fcitemp;
++      fc_initiator_t  *fcinitiator;
++
++      ENTER(__func__);
++
++      DEBUG2(printk("scsi(%ld): Begin configure fabric -- hba=%p\n",
++          ha->host_no, ha));
++
++      /* If FL port exists, then SNS is present */
++      rval1 = qla2x00_get_port_name(ha, SNS_FL_PORT, tmp_name, 0);
++      if (rval1 || qla2x00_is_wwn_zero(tmp_name)) {
++              DEBUG2(printk("scsi(%ld): MBC_GET_PORT_NAME Failed, No FL "
++                  "Port\n", ha->host_no));
++
++              ha->device_flags &= ~SWITCH_FOUND;
++              return (0);
++      }
++
++      new_dev_list = kmalloc(sizeof(struct new_dev) * MAX_FIBRE_DEVICES,
++          GFP_ATOMIC);
++      if (new_dev_list == NULL) {
++              DEBUG2(printk("scsi(%ld): Configure Fabric allocation failed, "
++                  "device list\n", ha->host_no));
++              ha->mem_err++;
++              return (BIT_0);
++      }
++
++      /* Get adapter port ID. */
++      rval = qla2x00_get_adapter_id(ha, &tmp_loop_id,
++          &ha->d_id.b.al_pa, &ha->d_id.b.area, &ha->d_id.b.domain, &tmp_topo);
++
++      /* Mark devices that need re-synchronization. */
++      qla2x00_device_resync(ha);
++      found_cnt = 0;
++      do {
++              if (test_and_clear_bit(REGISTER_FC4_NEEDED, &ha->dpc_flags)) {
++                      if (qla2x00_rft_id(ha)) {
++                              /* EMPTY */
++                              DEBUG2(printk("scsi(%ld): Register FC-4 "
++                                  "TYPE failed.\n", ha->host_no));
++                      }
++                      if (qla2x00_rff_id(ha)) {
++                              /* EMPTY */
++                              DEBUG2(printk("scsi(%ld): Register FC-4 "
++                                  "Features failed.\n", ha->host_no));
++                      }
++                      if (qla2x00_rnn_id(ha)) {
++                              /* EMPTY */
++                              DEBUG2(printk("scsi(%ld): Register Node Name "
++                                  "failed.\n", ha->host_no));
++                      }
++                      if (qla2x00_rsnn_nn(ha)) {
++                              /* EMPTY */
++                              DEBUG2(printk("scsi(%ld): Register Symbolic "
++                                  "Node Name failed.\n", ha->host_no));
++                      }
++              }
++
++              rval = qla2x00_find_all_fabric_devs(ha,
++                  new_dev_list, &new_dev_cnt, &local_flags);
++              if (rval != 0)
++                      break;
++
++              /*
++               * Logout all previous fabric devices marked lost, except
++               * tape devices.
++               */
++              for (index = 0; index < MAX_FIBRE_DEVICES &&
++                  !atomic_read(&ha->loop_down_timer) &&
++                  !(test_bit(LOOP_RESYNC_NEEDED, &ha->dpc_flags)); index++) {
++
++                      if (ha->fc_db[index].loop_id & PORT_LOST_ID &&
++                          (ha->fc_db[index].flag & DEV_PUBLIC) &&
++                          !(ha->fc_db[index].flag & DEV_TAPE_DEVICE)) {
++
++                              qla2x00_fabric_logout(ha,
++                                  ha->fc_db[index].loop_id & 0xff);
++                              local_flags |= LOGOUT_PERFORMED;
++                      }
++              }
++
++              /* Logout and remove any lost initiator devices */
++              list_for_each_safe(fcil, fcitemp, &ha->fcinitiators) {
++                      fcinitiator = list_entry(fcil, fc_initiator_t, list);
++
++                      if ((fcinitiator->loop_id & PORT_LOST_ID) == 0)
++                              continue;
++
++                      qla2x00_fabric_logout(ha, fcinitiator->loop_id & 0xff);
++                      ha->fabricid[fcinitiator->loop_id &0xFF].in_use = FALSE;
++
++                      list_del(&fcinitiator->list);
++                      kfree(fcinitiator);
++              }
++
++              /*
++               * Scan through our database and login entries already in our
++               * database.
++               */
++              for (index = 0; index < MAX_FIBRE_DEVICES &&
++                  !atomic_read(&ha->loop_down_timer) &&
++                  !(test_bit(LOOP_RESYNC_NEEDED, &ha->dpc_flags)); index++) {
++
++                      if (!(ha->fc_db[index].loop_id & PORT_LOGIN_NEEDED))
++                              continue;
++
++                      ha->fc_db[index].loop_id &= ~PORT_LOGIN_NEEDED;
++                      if (ha->fc_db[index].loop_id <= LAST_SNS_LOOP_ID) {
++                              /* loop_id reusable */
++                              dev.loop_id = ha->fc_db[index].loop_id & 0xff;
++                      } else {
++                              for (i = ha->min_external_loopid;
++                                  i < MAX_PUBLIC_LOOP_IDS; i++) {
++
++                                      if (!ha->fabricid[i].in_use) {
++                                              ha->fabricid[i].in_use = TRUE;
++                                              dev.loop_id = i;
++                                              break;
++                                      }
++                              }
++
++                              if (i == MAX_PUBLIC_LOOP_IDS)
++                                      break;
++                      }
++
++                      dev.d_id.b24 = ha->fc_db[index].d_id.b24;
++
++                      /* login and update database */
++                      if (qla2x00_fabric_login(ha, &dev) == 0) {
++                              ha->fc_db[index].loop_id = dev.loop_id;
++                              found_cnt++;
++                      }
++              }
++
++              /*
++               * Scan through new device list and login and add to our
++               * database.
++               */
++              for (index = 0; index < new_dev_cnt &&
++                  !atomic_read(&ha->loop_down_timer) &&
++                  !(test_bit(LOOP_RESYNC_NEEDED, &ha->dpc_flags)); index++) {
++
++                      memcpy(&dev,
++                          &new_dev_list[index], sizeof(struct new_dev));
++
++                      dev.flag = DEV_PUBLIC;
++
++                      for (i = ha->min_external_loopid;
++                          i < MAX_PUBLIC_LOOP_IDS; i++) {
++
++                              if (!ha->fabricid[i].in_use) {
++                                      ha->fabricid[i].in_use = TRUE;
++                                      dev.loop_id = i;
++                                      break;
++                              }
++                      }
++
++                      if (i == MAX_PUBLIC_LOOP_IDS)
++                              break;
++
++                      if (qla2x00_fabric_login(ha, &dev) == 0) {
++                              found_cnt++;
++                              rval = qla2x00_update_fc_database(ha,
++                                  &dev, enable_slot_reuse);
++
++                              if (rval) {
++                                      qla2x00_fabric_logout(ha, dev.loop_id);
++                                      ha->fabricid[i].in_use = FALSE;
++                                      break;
++                              }
++                      }
++              }
++      } while(0);
++
++      kfree(new_dev_list);
++
++      if (rval) {
++              DEBUG2(printk("scsi(%ld): Configure fabric error exit: "
++                  "rval=%d\n", ha->host_no, rval));
++      } else {
++              /* EMPTY */
++              DEBUG2(if (found_cnt))
++              DEBUG2(printk("scsi(%ld) Found (%d) ports\n",
++                  ha->host_no, found_cnt));
++      }
++
++      LEAVE(__func__);
++
++      return(rval);
++}
++
++
++/*
++ * qla2x00_find_all_fabric_devs
++ *    Go through GAN list to find all fabric devices.  Will perform
++ *    necessary logout of previously existed devices that have changed
++ *    and save new devices in a new device list.
++ *
++ * Input:
++ *    ha = adapter block pointer.
++ *    dev = database device entry pointer.
++ *
++ * Returns:
++ *    0 = success.
++ *    BIT_0 = error.
++ *
++ * Context:
++ *    Kernel context.
++ */
++static uint8_t
++qla2x00_find_all_fabric_devs(scsi_qla_host_t *ha, 
++    struct new_dev *new_dev_list, uint16_t *new_dev_cnt, uint8_t *flags) 
++{
++      fcdev_t         dev;
++      uint8_t         rval = 0;
++      int             status = 0;
++      uint16_t        i;
++      uint16_t        index;
++      uint16_t        new_cnt;
++      uint16_t        public_count;
++      uint16_t        initiator;
++      struct list_head *fcil;
++      fc_initiator_t  *fcinitiator;
++
++      sw_info_t       *swl;
++      sw_info_t       swl_entry;
++      int             swl_idx;
++      int             first_dev, last_dev;
++      port_id_t       wrap;
++      int             ip_dev;
++
++      ENTER(__func__);
++
++      /* Try GID_PT to get device list, else GAN. */
++      swl = kmalloc(sizeof(sw_info_t) * MAX_FIBRE_DEVICES, GFP_ATOMIC);
++      if (swl == NULL) {
++              /*EMPTY*/
++              DEBUG2(printk("scsi(%ld): GID_PT allocations failed, fallback "
++                  "on GAN\n", ha->host_no));
++      } else if (qla2x00_gid_pt(ha, swl) != QL_STATUS_SUCCESS) {
++              kfree(swl);
++              swl = NULL;
++      } else if (qla2x00_gpn_id(ha, swl) != QL_STATUS_SUCCESS) {
++              kfree(swl);
++              swl = NULL;
++      } else if (qla2x00_gnn_id(ha, swl) != QL_STATUS_SUCCESS) {
++              kfree(swl);
++              swl = NULL;
++      } else if (qla2x00_gft_id(ha, swl) != QL_STATUS_SUCCESS) {
++              kfree(swl);
++              swl = NULL;
++      }
++      swl_idx = 0;
++
++      /*
++       * Loop getting devices from switch. Logout the devices that were in
++       * our database but changed port ID.
++       */
++#if defined(ISP2100)
++      ha->max_public_loop_ids = LAST_SNS_LOOP_ID - SNS_FIRST_LOOP_ID + 1;
++      public_count = ha->max_public_loop_ids;
++#else
++      ha->max_public_loop_ids = MAX_PUBLIC_LOOP_IDS;
++      public_count = ha->max_public_loop_ids - ha->min_external_loopid + 2;
++#endif
++
++      /* Set start port ID scan at adapter ID. */
++      swl_entry.d_id.b24 = ha->d_id.b24;
++      first_dev = 1;
++      last_dev = 0;
++
++      new_cnt = 0;    /* new device count */
++
++      for (i = 0;
++          i < public_count && !atomic_read(&ha->loop_down_timer) &&
++          !(test_bit(LOOP_RESYNC_NEEDED, &ha->dpc_flags)); i++) {
++
++              if (swl != NULL) {
++                      if (last_dev) {
++                              wrap.b24 = dev.d_id.b24;
++                      } else {
++                              dev.flag = DEV_PUBLIC;
++                              dev.d_id.b24 = swl[swl_idx].d_id.b24;
++                              memcpy(dev.name,
++                                  swl[swl_idx].node_name, WWN_SIZE);
++                              memcpy(dev.wwn,
++                                  swl[swl_idx].port_name, WWN_SIZE);
++
++                              /* IP capable device */
++                              ip_dev = 0;
++                              if (swl[swl_idx].type & SW_TYPE_IP)
++                                      ip_dev = 1;
++
++                              if (swl[swl_idx].d_id.b.rsvd_1 != 0) {
++                                      last_dev = 1;
++                              }
++                              swl_idx++;
++                      }
++              } else {
++                      /* Send GAN to the switch */
++                      rval = 0;
++                      if (qla2x00_ga_nxt(ha, &swl_entry) !=
++                          QL_STATUS_SUCCESS) {
++                              rval |= BIT_0;
++                              break;
++                      }
++
++                      dev.flag = DEV_PUBLIC;
++                      dev.d_id.b24 = swl_entry.d_id.b24;
++                      memcpy(dev.name, swl_entry.node_name, WWN_SIZE);
++                      memcpy(dev.wwn, swl_entry.port_name, WWN_SIZE);
++
++                      /* IP capable device */
++                      ip_dev = 0;
++                      if (swl_entry.type & SW_TYPE_IP)
++                              ip_dev = 1;
++              }
++
++              /* If wrap on switch device list, exit. */
++              if (first_dev) {
++                      wrap.b24 = dev.d_id.b24;
++                      first_dev = 0;
++              } else if (dev.d_id.b24 == wrap.b24) {
++                      DEBUG2(printk("scsi(%ld): device wrap (%02x%02x%02x)\n",
++                          ha->host_no,
++                          dev.d_id.b.domain, 
++                          dev.d_id.b.area, 
++                          dev.d_id.b.al_pa));
++                      break;
++              }
++
++              DEBUG(printk("scsi(%ld): Fabric scan found device(%d) - port "
++                  "Id=%02x%02x%02x\n",
++                  ha->host_no, i,
++                  dev.d_id.b.domain, dev.d_id.b.area, dev.d_id.b.al_pa));
++
++              /* Bypass if host adapter. */
++              if (dev.d_id.b24 == ha->d_id.b24)
++                      continue;
++
++              /* Bypass reserved domain fields. */
++              if ((dev.d_id.b.domain & 0xf0) == 0xf0)
++                      continue;
++
++              /* Bypass if same domain and area of adapter. */
++              if ((dev.d_id.b24 & 0xffff00) == (ha->d_id.b24 & 0xffff00))
++                      continue;
++
++#if defined(FC_IP_SUPPORT)
++              /* Check for IP device */
++              if (ip_dev) {
++                      /* Found IP device */
++                      DEBUG12(printk("scsi(%ld): IP fabric "
++                          "WWN: %02x%02x%02x%02x%02x%02x%02x%02x "
++                          "DID: %02x%02x%02x.\n",
++                          ha->host_no,
++                          dev.name[0], dev.name[1], dev.name[2], dev.name[3],
++                          dev.name[4], dev.name[5], dev.name[6], dev.name[7],
++                          dev.d_id.b.domain, 
++                          dev.d_id.b.area, 
++                          dev.d_id.b.al_pa));
++
++                      qla2x00_update_ip_device_data(ha, &dev);
++                      continue;
++              }
++#endif
++
++              /* Bypass if initiator */
++              initiator = FALSE;
++              list_for_each(fcil, &ha->fcinitiators) {
++                      fcinitiator = list_entry(fcil, fc_initiator_t, list);
++
++                      if (memcmp(dev.wwn, fcinitiator->port_name, 8) != 0)
++                              continue;
++
++                      initiator = TRUE;
++                      DEBUG(printk("scsi(%ld): found host "
++                          "%02x%02x%02x%02x%02x%02x%02x%02x, "
++                          "portid=%02x%02x%02x.\n",
++                          ha->host_no,
++                          dev.name[0], dev.name[1], dev.name[2], dev.name[3],
++                          dev.name[4], dev.name[5], dev.name[6], dev.name[7],
++                          dev.d_id.b.domain, 
++                          dev.d_id.b.area, 
++                          dev.d_id.b.al_pa));
++
++                      /*
++                       * If the initiator was marked as lost, perform the
++                       * required logout and relogin the initiator by
++                       * assuming a new device.
++                       */
++                      if ((fcinitiator->loop_id & PORT_LOST_ID) == 0)
++                              break;
++
++                      initiator = FALSE;
++                      break;
++              }
++
++              /* Bypass if initiator */
++              if (initiator)
++                      continue;
++
++              /* Locate matching device in database. */
++              for (index = 0; index < MAX_FIBRE_DEVICES; index++) {
++                      if (ha->fc_db[index].loop_id == PORT_UNUSED)
++                              continue;
++
++                      status = 1;
++                      switch (ha->binding_type) {
++                      case BIND_BY_PORT_NAME:
++                              status = memcmp(dev.wwn,
++                                  ha->fc_db[index].wwn, WWN_SIZE);
++                              break;
++
++                      case BIND_BY_PORT_ID:
++                              status = (dev.d_id.b24 !=
++                                  ha->fc_db[index].d_id.b24);
++                              break;
++
++                      case BIND_BY_NODE_NAME:
++                              status = memcmp(dev.name,
++                                  ha->fc_db[index].name, WWN_SIZE);
++                              break;
++                      }
++                      if (status)
++                              continue;
++
++                      /*
++                       * Update volatile unbound fields for PortID binding
++                       * only
++                       */
++                      if (ha->binding_type == BIND_BY_PORT_ID) {
++                              memcpy(ha->fc_db[index].name,
++                                  dev.name, WWN_SIZE);
++                              memcpy(ha->fc_db[index].wwn,
++                                  dev.wwn, WWN_SIZE);
++                      }
++
++                      /* Now we found a matching device name */
++                      DEBUG(printk("scsi(%ld): Found fabric dev %d in "
++                          "tgt %d db, flags= 0x%x, loop_id=0x%04x, port="
++                          "%02x%02x%02x, "
++                          "name=%02x%02x%02x%02x%02x%02x%02x%02x.\n",
++                          ha->host_no, i, index,
++                          ha->fc_db[index].flag,
++                          ha->fc_db[index].loop_id,
++                          ha->fc_db[index].d_id.b.domain,
++                          ha->fc_db[index].d_id.b.area,
++                          ha->fc_db[index].d_id.b.al_pa,
++                          dev.wwn[0], dev.wwn[1], dev.wwn[2], dev.wwn[3],
++                          dev.wwn[4], dev.wwn[5], dev.wwn[6], dev.wwn[7]));
++
++                      if (!(ha->fc_db[index].flag & DEV_PUBLIC)) {
++                              /*
++                               * This was in our database as a local device.
++                               * Here we assume this device either has
++                               * changed location so configure_local_loop has
++                               * already done necessary clean up, or it's
++                               * saved here due to persistent name binding.
++                               * We'll just add it in as a fabric device.
++                               */
++                              /* Copy port id and name fields. */
++                              ha->fc_db[index].flag |= DEV_PUBLIC;
++                              ha->fc_db[index].d_id.b24 = dev.d_id.b24;
++                              ha->fc_db[index].loop_id |= PORT_LOGIN_NEEDED;
++
++                              break;
++                      }
++
++                      /* This was in our database as a fabric device. */
++                      if ((ha->fc_db[index].d_id.b24 == dev.d_id.b24) &&
++                          (ha->fc_db[index].loop_id <= LAST_SNS_LOOP_ID))
++                              /* Device didn't change */
++                              break;
++
++                      if (ha->fc_db[index].loop_id == PORT_AVAILABLE) {
++                              ha->fc_db[index].flag |= DEV_PUBLIC;
++                              ha->fc_db[index].d_id.b24 = dev.d_id.b24;
++                              ha->fc_db[index].loop_id |= PORT_LOGIN_NEEDED;
++                              break;
++                      }
++
++                      /*
++                       * Port ID changed or device was marked to be updated;
++                       * logout and mark it for relogin later.
++                       */
++                      qla2x00_fabric_logout(ha,
++                          ha->fc_db[index].loop_id & 0xff);
++                      ha->fc_db[index].flag |= DEV_PUBLIC;
++                      ha->fc_db[index].d_id.b24 = dev.d_id.b24;
++
++                      ha->fc_db[index].loop_id |= PORT_LOGIN_NEEDED;
++                      ha->fc_db[index].loop_id &= ~PORT_LOST_ID;
++
++                      *flags |= LOGOUT_PERFORMED;
++
++                      break;
++              }
++
++              if (index == MAX_FIBRE_DEVICES) {
++                      /*
++                       * Did not find a match in our database.  This is a new
++                       * device.
++                       */
++                      DEBUG3(printk("scsi(%ld): Found new device "
++                          "%02x%02x%02x%02x%02x%02x%02x%02x.\n",
++                          ha->host_no,
++                          dev.wwn[0], dev.wwn[1], dev.wwn[2], dev.wwn[3],
++                          dev.wwn[4], dev.wwn[5], dev.wwn[6], dev.wwn[7]));
++
++                      memcpy(&new_dev_list[new_cnt],
++                          &dev, sizeof(struct new_dev));
++                      new_cnt++;
++              }
++      }
++
++      if (swl)
++              kfree(swl);
++
++      *new_dev_cnt = new_cnt;
++
++      if (new_cnt >  0)
++              ha->device_flags |= DFLG_FABRIC_DEVICES;
++
++      LEAVE(__func__);
++
++      return (rval);
++}
++
++/*
++ * qla2x00_device_resync
++ *    Marks devices in the database that needs resynchronization.
++ *
++ * Input:
++ *    ha = adapter block pointer.
++ *
++ * Context:
++ *    Kernel context.
++ */
++static void
++qla2x00_device_resync(scsi_qla_host_t *ha) 
++{
++      uint16_t index;
++      uint32_t mask;
++      rscn_t dev;
++      struct list_head *fcil;
++      fc_initiator_t  *fcinitiator;
++
++      ENTER(__func__);
++
++      while (ha->rscn_out_ptr != ha->rscn_in_ptr ||
++          ha->flags.rscn_queue_overflow) {
++
++              memcpy(&dev, &ha->rscn_queue[ha->rscn_out_ptr], sizeof(rscn_t));
++
++              DEBUG(printk("scsi(%ld): device_resync: rscn_queue[%d], "
++                  "portID=%02x%02x%02x.\n",
++                  ha->host_no,
++                  ha->rscn_out_ptr,
++                  ha->rscn_queue[ha->rscn_out_ptr].d_id.b.domain,
++                  ha->rscn_queue[ha->rscn_out_ptr].d_id.b.area,
++                  ha->rscn_queue[ha->rscn_out_ptr].d_id.b.al_pa));
++
++              ha->rscn_out_ptr++;
++              if (ha->rscn_out_ptr == MAX_RSCN_COUNT)
++                      ha->rscn_out_ptr = 0;
++
++              /* Queue overflow, set switch default case. */
++              if (ha->flags.rscn_queue_overflow) {
++                      DEBUG(printk("scsi(%ld): device_resync: rscn "
++                          "overflow.\n", ha->host_no));
++
++                      dev.format = 3;
++                      ha->flags.rscn_queue_overflow = 0;
++              }
++
++              switch (dev.format) {
++              case 0:
++                      mask = 0xffffff;
++                      break;
++              case 1:
++                      mask = 0xffff00;
++                      break;
++              case 2:
++                      mask = 0xff0000;
++                      break;
++              default:
++                      mask = 0x0;
++                      dev.d_id.b24 = 0;
++                      ha->rscn_out_ptr = ha->rscn_in_ptr;
++                      break;
++              }
++
++              /* Mark target devices indicated by RSCN for later processing */
++              for (index = 0; index < MAX_FIBRE_DEVICES; index++) {
++                      if ((ha->fc_db[index].flag & DEV_PUBLIC) &&
++                          (ha->fc_db[index].d_id.b24 & mask) ==
++                           dev.d_id.b24) {
++
++                              /* fabric device */
++                              if (ha->fc_db[index].loop_id != PORT_UNUSED) {
++                                      ha->fc_db[index].loop_id |=
++                                          PORT_LOST_ID;
++
++                                      DEBUG(printk("scsi(%ld): RSCN port @ "
++                                          "slot %d port_id=%02x%02x%02x.\n",
++                                          ha->host_no,
++                                          index,
++                                          ha->fc_db[index].d_id.b.domain,
++                                          ha->fc_db[index].d_id.b.area,
++                                          ha->fc_db[index].d_id.b.al_pa));
++                              }
++                      }
++              }
++
++              if (dev.format == 3)
++                      continue;
++
++              /*
++               * Invalidate initiator devices indicated by RSCN so we know
++               * they are no longer logged in.
++               */
++              list_for_each(fcil, &ha->fcinitiators) {
++                      fcinitiator = list_entry(fcil, fc_initiator_t, list);
++
++                      if ((fcinitiator->d_id.b24 & mask) != dev.d_id.b24)
++                              continue;
++                      if (fcinitiator->loop_id & PORT_LOST_ID ||
++                              fcinitiator->loop_id & PORT_LOGIN_NEEDED)
++                              continue;
++
++                      fcinitiator->loop_id |= PORT_LOST_ID;
++                      fcinitiator->d_id.b24 = 0;
++              }
++      }
++
++      LEAVE(__func__);
++}
++
++
++/*
++ *  qla2x00_loop_resync
++ *      Resync with fibre channel devices.
++ *
++ * Input:
++ *      ha = adapter block pointer.
++ *
++ * Returns:
++ *      0 = success
++ */
++uint8_t
++qla2x00_loop_resync(scsi_qla_host_t *ha) 
++{
++      uint8_t   status;
++
++      ENTER(__func__);
++
++      ha->loop_state = LOOP_UPDATE;
++      qla2x00_stats.loop_resync++;
++      clear_bit(ISP_ABORT_RETRY, &ha->dpc_flags);
++      if (ha->flags.online) {
++              if (!(status = qla2x00_fw_ready(ha))) {
++                      do {
++                              /* v2.19.05b6 */
++                              ha->loop_state = LOOP_UPDATE;
++
++                              /*
++                               * Issue marker command only when we are going
++                               * to start the I/O .
++                               */
++                              ha->marker_needed = 1;
++
++                              /* Remap devices on Loop. */
++                              clear_bit(LOOP_RESYNC_NEEDED, &ha->dpc_flags);
++
++                              qla2x00_configure_loop(ha);
++
++                      } while (!atomic_read(&ha->loop_down_timer) &&
++                              !(test_bit(ISP_ABORT_NEEDED, &ha->dpc_flags)) &&
++                              (test_bit(LOOP_RESYNC_NEEDED, &ha->dpc_flags)));
++              }
++              qla2x00_restart_queues(ha,TRUE);
++      } else
++              status = 0;
++
++      if (test_bit(ISP_ABORT_NEEDED, &ha->dpc_flags)) {
++              return (1);
++      }
++
++      if (status) {
++              DEBUG2_3(printk("%s(): **** FAILED ****\n", __func__));
++      }
++
++      LEAVE(__func__);
++
++      return(status);
++}
++
++/*
++ * qla2x00_fabric_login
++ *    Issue fabric login command.
++ *
++ * Input:
++ *    ha = adapter block pointer.
++ *    device = pointer to FC device type structure.
++ *
++ * Returns:
++ *      0 - Login successfully
++ *      1 - Login failed
++ *      2 - Initiator device
++ *      3 - Fatal error
++ */
++uint8_t
++qla2x00_fabric_login(scsi_qla_host_t *ha, fcdev_t *device) 
++{
++      uint16_t        status[3];
++
++      for (;;) {
++              DEBUG(printk("scsi(%ld): Trying Fabric Login w/loop id 0x%04x "
++                  "for port %02x%02x%02x.\n",
++                  ha->host_no, device->loop_id,
++                  device->d_id.b.domain,
++                  device->d_id.b.area,
++                  device->d_id.b.al_pa));
++
++              /* Login device on switch. */
++              qla2x00_login_fabric(ha,
++                  device->loop_id, device->d_id.b.domain,
++                  device->d_id.b.area, device->d_id.b.al_pa, 
++                  &status[0], BIT_0);
++
++              if (status[0] == 0x4007) {
++                      ha->fabricid[device->loop_id].in_use = FALSE;
++                      device->loop_id = status[1];
++
++                      DEBUG(printk("Fabric Login: port in use - next "
++                          "loop id=0x%04x, port Id=%02x%02x%02x.\n",
++                          device->loop_id,
++                          device->d_id.b.domain,
++                          device->d_id.b.area,
++                          device->d_id.b.al_pa));
++
++                      if (device->loop_id <= LAST_SNS_LOOP_ID)
++                              ha->fabricid[device->loop_id].in_use = TRUE;
++                      else
++                              return 1;
++
++              } else if (status[0] == 0x4000) {
++                      if (status[1] & 0x0001) {
++                              /* Initiator only device */
++                              qla2x00_add_initiator_device(ha, device);
++
++                              return 2;
++                      }
++
++                      /* This is target capable device */
++                      qla2x00_get_port_database(ha, device, 0);
++
++                      DEBUG(printk("scsi(%ld): Fabric Login OK. loop "
++                          "id=0x%04x, port Id=%02x%02x%02x.\n",
++                          ha->host_no,
++                          device->loop_id,
++                          device->d_id.b.domain,
++                          device->d_id.b.area,
++                          device->d_id.b.al_pa));
++                      return 0;
++
++              } else if (status[0] == 0x4008) {
++                      if (device->loop_id++ <= LAST_SNS_LOOP_ID)
++                              ha->fabricid[device->loop_id].in_use = TRUE;
++                      else
++                              return 1;
++
++              } else if (status[0] == 0x4006) {
++                      /* No more retry needed. */
++                      return 3;
++              } else {
++                      DEBUG2(printk("%s(%ld): failed=%x port_id=%02x%02x%02x "
++                          "loop_id=%x jiffies=%lx.\n", 
++                          __func__, ha->host_no, status[0], 
++                          device->d_id.b.domain,
++                          device->d_id.b.area,
++                          device->d_id.b.al_pa,
++                          device->loop_id, jiffies));
++                      return 1;
++              }
++      }
++}
++
++/*
++ * qla2x00_local_device_login
++ *    Issue local device login command.
++ *
++ * Input:
++ *    ha = adapter block pointer.
++ *    loop_id = loop id of device to login to.
++ *
++ * Returns (Where's the #define!!!!):
++ *      0 - Login successfully
++ *      1 - Login failed
++ *      3 - Fatal error
++ */
++uint8_t
++qla2x00_local_device_login(scsi_qla_host_t *ha, uint16_t loop_id)
++{
++      int             rval;
++      uint16_t        mb[MAILBOX_REGISTER_COUNT];
++
++      memset(mb, 0, sizeof(mb));
++      rval = qla2x00_login_local_device(ha, loop_id, mb, BIT_0);
++      if (rval == QL_STATUS_SUCCESS) {
++              /* Interrogate mailbox registers for any errors */
++              if (mb[0] == 0x4005)
++                      rval = 1;
++              else if (mb[0] == 0x4006)
++                      /* device not in PCB table */
++                      rval = 3;
++      }
++      return rval;
++}
++
++
++/**
++ * qla2x00_ga_nxt() - SNS scan for fabric devices via GA_NXT command.
++ * @ha: HA context
++ * @swl_entry: switch info entry to updated
++ *
++ * NOTE: Non-Nx_Ports are skipped.
++ *
++ * Returns 0 on success.
++ */
++static int
++qla2x00_ga_nxt(scsi_qla_host_t *ha, sw_info_t *swl_entry)
++{
++      int             rval;
++
++      ms_iocb_entry_t *ms_pkt;
++      struct ct_sns_req       *ct_req;
++      struct ct_sns_rsp       *ct_rsp;
++
++      ENTER(__func__);
++
++retry_ga_nxt:
++      /* Issue GA_NXT */
++      /* Prepare common MS IOCB */
++      ms_pkt = qla2x00_prep_ms_iocb(ha, GA_NXT_REQ_SIZE, GA_NXT_RSP_SIZE);
++
++      /* Prepare CT request */
++      ct_req = &ha->ct_sns->p.req;
++      ct_rsp = &ha->ct_sns->p.rsp;
++      memset(ct_req, 0, sizeof(struct ct_sns_pkt));
++
++      ct_req->header.revision = 0x01;
++      ct_req->header.gs_type = 0xFC;
++      ct_req->header.gs_subtype = 0x02;
++      ct_req->command = __constant_cpu_to_be16(GA_NXT_CMD);
++      ct_req->max_rsp_size =
++          __constant_cpu_to_be16((GA_NXT_RSP_SIZE - 16) / 4);
++
++      /* Prepare CT arguments -- port_id */
++      ct_req->req.port_id.port_id[0] = swl_entry->d_id.b.domain;
++      ct_req->req.port_id.port_id[1] = swl_entry->d_id.b.area;
++      ct_req->req.port_id.port_id[2] = swl_entry->d_id.b.al_pa;
++
++      /* Execute MS IOCB */
++      rval = qla2x00_issue_iocb(ha,
++          ha->ms_iocb, ha->ms_iocb_dma, sizeof(ms_iocb_entry_t));
++      if (rval != QL_STATUS_SUCCESS) {
++              /*EMPTY*/
++              DEBUG2_3(printk("scsi(%ld): GA_NXT issue IOCB failed (%d).\n",
++                  ha->host_no, rval));
++      } else if (ct_rsp->header.response !=
++          __constant_cpu_to_be16(CT_ACCEPT_RESPONSE)) {
++              DEBUG2_3(printk("scsi(%ld): GA_NXT failed, rejected request, "
++                  "ga_nxt_rsp:\n", ha->host_no));
++              DEBUG2_3(qla2x00_dump_buffer((uint8_t *)&ct_rsp->header,
++                  sizeof(struct ct_rsp_hdr)));
++              rval = QL_STATUS_ERROR;
++      } else if (ct_rsp->rsp.ga_nxt.port_type != NS_N_PORT_TYPE &&
++          ct_rsp->rsp.ga_nxt.port_type != NS_NL_PORT_TYPE) {
++              /* We're only interested in Nx ports */
++              DEBUG2_3(printk("scsi(%ld): GA_NXT skipping *NON* Nx_Port - "
++                  "nodename %02x%02x%02x%02x%02x%02x%02x%02x "
++                  "portname %02x%02x%02x%02x%02x%02x%02x%02x "
++                  "portid=%02x%02x%02x port_type=%x.\n",
++                  ha->host_no,
++                  ct_rsp->rsp.ga_nxt.node_name[0],
++                  ct_rsp->rsp.ga_nxt.node_name[1], 
++                  ct_rsp->rsp.ga_nxt.node_name[2], 
++                  ct_rsp->rsp.ga_nxt.node_name[3], 
++                  ct_rsp->rsp.ga_nxt.node_name[4], 
++                  ct_rsp->rsp.ga_nxt.node_name[5], 
++                  ct_rsp->rsp.ga_nxt.node_name[6], 
++                  ct_rsp->rsp.ga_nxt.node_name[7], 
++                  ct_rsp->rsp.ga_nxt.port_name[0],
++                  ct_rsp->rsp.ga_nxt.port_name[1], 
++                  ct_rsp->rsp.ga_nxt.port_name[2], 
++                  ct_rsp->rsp.ga_nxt.port_name[3], 
++                  ct_rsp->rsp.ga_nxt.port_name[4], 
++                  ct_rsp->rsp.ga_nxt.port_name[5], 
++                  ct_rsp->rsp.ga_nxt.port_name[6], 
++                  ct_rsp->rsp.ga_nxt.port_name[7], 
++                  ct_rsp->rsp.ga_nxt.port_id[0], 
++                  ct_rsp->rsp.ga_nxt.port_id[1], 
++                  ct_rsp->rsp.ga_nxt.port_id[2],
++                  ct_rsp->rsp.ga_nxt.port_type));
++              goto retry_ga_nxt;
++      } else {
++              /* Populate switch info entry. */
++              swl_entry->d_id.b.domain = ct_rsp->rsp.ga_nxt.port_id[0];
++              swl_entry->d_id.b.area = ct_rsp->rsp.ga_nxt.port_id[1];
++              swl_entry->d_id.b.al_pa = ct_rsp->rsp.ga_nxt.port_id[2];
++
++              memcpy(swl_entry->node_name,
++                  ct_rsp->rsp.ga_nxt.node_name, WWN_SIZE);
++              memcpy(swl_entry->port_name,
++                  ct_rsp->rsp.ga_nxt.port_name, WWN_SIZE);
++
++              swl_entry->type = SW_TYPE_SCSI;
++              if (ct_rsp->rsp.ga_nxt.fc4_types[3] & 0x20)
++                      swl_entry->type |= SW_TYPE_IP;
++
++              DEBUG2_3(printk("scsi(%ld): GA_NXT entry - "
++                  "nodename %02x%02x%02x%02x%02x%02x%02x%02x "
++                  "portname %02x%02x%02x%02x%02x%02x%02x%02x "
++                  "portid=%02x%02x%02x type=%02x.\n",
++                  ha->host_no,
++                  swl_entry->node_name[0], swl_entry->node_name[1],
++                  swl_entry->node_name[2], swl_entry->node_name[3],
++                  swl_entry->node_name[4], swl_entry->node_name[5],
++                  swl_entry->node_name[6], swl_entry->node_name[7],
++                  swl_entry->port_name[0], swl_entry->port_name[1],
++                  swl_entry->port_name[2], swl_entry->port_name[3],
++                  swl_entry->port_name[4], swl_entry->port_name[5],
++                  swl_entry->port_name[6], swl_entry->port_name[7],
++                  swl_entry->d_id.b.domain,
++                  swl_entry->d_id.b.area,
++                  swl_entry->d_id.b.al_pa,
++                  swl_entry->type));
++      }
++
++      LEAVE(__func__);
++
++      return (rval);
++}
++
++/**
++ * qla2x00_gid_pt() - SNS scan for fabric devices via GID_PT command.
++ * @ha: HA context
++ * @list: switch info entries to populate
++ *
++ * NOTE: Non-Nx_Ports are not requested.
++ *
++ * Returns 0 on success.
++ */
++static int
++qla2x00_gid_pt(scsi_qla_host_t *ha, sw_info_t *list)
++{
++      int             rval;
++      uint16_t        i;
++
++      ms_iocb_entry_t *ms_pkt;
++      struct ct_sns_req       *ct_req;
++      struct ct_sns_rsp       *ct_rsp;
++
++      struct ct_sns_gid_pt_data *gid_data;
++
++      ENTER(__func__);
++
++      gid_data = NULL;
++
++      /* Issue GID_PT */
++      /* Prepare common MS IOCB */
++      ms_pkt = qla2x00_prep_ms_iocb(ha, GID_PT_REQ_SIZE, GID_PT_RSP_SIZE);
++
++      /* Prepare CT request */
++      ct_req = &ha->ct_sns->p.req;
++      ct_rsp = &ha->ct_sns->p.rsp;
++      memset(ct_req, 0, sizeof(struct ct_sns_pkt));
++
++      ct_req->header.revision = 0x01;
++      ct_req->header.gs_type = 0xFC;
++      ct_req->header.gs_subtype = 0x02;
++      ct_req->command = __constant_cpu_to_be16(GID_PT_CMD);
++      ct_req->max_rsp_size =
++          __constant_cpu_to_be16((GID_PT_RSP_SIZE - 16) / 4);
++
++      /* Prepare CT arguments -- port_type */
++      ct_req->req.gid_pt.port_type = NS_NX_PORT_TYPE;
++
++      /* Execute MS IOCB */
++      rval = qla2x00_issue_iocb(ha,
++          ha->ms_iocb, ha->ms_iocb_dma, sizeof(ms_iocb_entry_t));
++      if (rval != QL_STATUS_SUCCESS) {
++              /*EMPTY*/
++              DEBUG2_3(printk("scsi(%ld): GID_PT issue IOCB failed (%d).\n",
++                  ha->host_no, rval));
++      } else if (ct_rsp->header.response !=
++          __constant_cpu_to_be16(CT_ACCEPT_RESPONSE)) {
++              DEBUG2_3(printk("scsi(%ld): GID_PT failed, rejected request, "
++                  "gid_pt_rsp:\n", ha->host_no));
++              DEBUG2_3(qla2x00_dump_buffer((uint8_t *)&ct_rsp->header,
++                  sizeof(struct ct_rsp_hdr)));
++              rval = QL_STATUS_ERROR;
++      } else {
++              /* Set port IDs in switch info list. */
++              for (i = 0; i < MAX_FIBRE_DEVICES; i++) {
++                      memset(&list[i], 0, sizeof(sw_info_t));
++                      gid_data = &ct_rsp->rsp.gid_pt.entries[i];
++                      list[i].d_id.b.domain = gid_data->port_id[0];
++                      list[i].d_id.b.area = gid_data->port_id[1];
++                      list[i].d_id.b.al_pa = gid_data->port_id[2];
++
++                      /* Last one exit. */
++                      if (gid_data->control_byte & BIT_7) {
++                              list[i].d_id.b.rsvd_1 = gid_data->control_byte;
++                              break;
++                      }
++              }
++      }
++
++      LEAVE(__func__);
++
++      return (rval);
++}
++
++/**
++ * qla2x00_gpn_id() - SNS Get Port Name (GPN_ID) query.
++ * @ha: HA context
++ * @list: switch info entries to populate
++ *
++ * Returns 0 on success.
++ */
++static int
++qla2x00_gpn_id(scsi_qla_host_t *ha, sw_info_t *list)
++{
++      int             rval;
++      uint16_t        i;
++
++      ms_iocb_entry_t *ms_pkt;
++      struct ct_sns_req       *ct_req;
++      struct ct_sns_rsp       *ct_rsp;
++
++      ENTER(__func__);
++
++      for (i = 0; i < MAX_FIBRE_DEVICES; i++) {
++              /* Issue GPN_ID */
++              /* Prepare common MS IOCB */
++              ms_pkt = qla2x00_prep_ms_iocb(ha,
++                  GPN_ID_REQ_SIZE, GPN_ID_RSP_SIZE);
++
++              /* Prepare CT request */
++              ct_req = &ha->ct_sns->p.req;
++              ct_rsp = &ha->ct_sns->p.rsp;
++              memset(ct_req, 0, sizeof(struct ct_sns_pkt));
++
++              ct_req->header.revision = 0x01;
++              ct_req->header.gs_type = 0xFC;
++              ct_req->header.gs_subtype = 0x02;
++              ct_req->command = __constant_cpu_to_be16(GPN_ID_CMD);
++              ct_req->max_rsp_size =
++                  __constant_cpu_to_be16((GPN_ID_RSP_SIZE - 16) / 4);
++
++              /* Prepare CT arguments -- port_id */
++              ct_req->req.port_id.port_id[0] = list[i].d_id.b.domain;
++              ct_req->req.port_id.port_id[1] = list[i].d_id.b.area;
++              ct_req->req.port_id.port_id[2] = list[i].d_id.b.al_pa;
++
++              /* Execute MS IOCB */
++              rval = qla2x00_issue_iocb(ha,
++                  ha->ms_iocb, ha->ms_iocb_dma, sizeof(ms_iocb_entry_t));
++              if (rval != QL_STATUS_SUCCESS) {
++                      /*EMPTY*/
++                      DEBUG2_3(printk("scsi(%ld): GPN_ID issue IOCB failed "
++                          "(%d).\n",
++                          ha->host_no, rval));
++              } else if (ct_rsp->header.response !=
++                  __constant_cpu_to_be16(CT_ACCEPT_RESPONSE)) {
++                      DEBUG2_3(printk("scsi(%ld): GPN_ID failed, rejected "
++                          "request, gpn_id_rsp:\n", ha->host_no));
++                      DEBUG2_3(qla2x00_dump_buffer((uint8_t *)&ct_rsp->header,
++                          sizeof(struct ct_rsp_hdr)));
++                      rval = QL_STATUS_ERROR;
++              } else {
++                      /* Save portname */
++                      memcpy(list[i].port_name,
++                          ct_rsp->rsp.gpn_id.port_name, WWN_SIZE);
++              }
++
++              /* Last device exit. */
++              if (list[i].d_id.b.rsvd_1 != 0)
++                      break;
++      }
++
++      LEAVE(__func__);
++
++      return (rval);
++}
++
++/**
++ * qla2x00_gnn_id() - SNS Get Node Name (GPN_ID) query.
++ * @ha: HA context
++ * @list: switch info entries to populate
++ *
++ * Returns 0 on success.
++ */
++static int
++qla2x00_gnn_id(scsi_qla_host_t *ha, sw_info_t *list)
++{
++      int             rval;
++      uint16_t        i;
++
++      ms_iocb_entry_t *ms_pkt;
++      struct ct_sns_req       *ct_req;
++      struct ct_sns_rsp       *ct_rsp;
++
++      ENTER(__func__);
++
++      for (i = 0; i < MAX_FIBRE_DEVICES; i++) {
++              /* Issue GNN_ID */
++              /* Prepare common MS IOCB */
++              ms_pkt = qla2x00_prep_ms_iocb(ha,
++                  GNN_ID_REQ_SIZE, GNN_ID_RSP_SIZE);
++
++              /* Prepare CT request */
++              ct_req = &ha->ct_sns->p.req;
++              ct_rsp = &ha->ct_sns->p.rsp;
++              memset(ct_req, 0, sizeof(struct ct_sns_pkt));
++
++              ct_req->header.revision = 0x01;
++              ct_req->header.gs_type = 0xFC;
++              ct_req->header.gs_subtype = 0x02;
++              ct_req->command = __constant_cpu_to_be16(GNN_ID_CMD);
++              ct_req->max_rsp_size =
++                  __constant_cpu_to_be16((GNN_ID_RSP_SIZE - 16) / 4);
++
++              /* Prepare CT arguments -- port_id */
++              ct_req->req.port_id.port_id[0] = list[i].d_id.b.domain;
++              ct_req->req.port_id.port_id[1] = list[i].d_id.b.area;
++              ct_req->req.port_id.port_id[2] = list[i].d_id.b.al_pa;
++
++              /* Execute MS IOCB */
++              rval = qla2x00_issue_iocb(ha,
++                  ha->ms_iocb, ha->ms_iocb_dma, sizeof(ms_iocb_entry_t));
++              if (rval != QL_STATUS_SUCCESS) {
++                      /*EMPTY*/
++                      DEBUG2_3(printk("scsi(%ld): GNN_ID issue IOCB failed "
++                          "(%d).\n",
++                          ha->host_no, rval));
++              } else if (ct_rsp->header.response !=
++                  __constant_cpu_to_be16(CT_ACCEPT_RESPONSE)) {
++                      DEBUG2_3(printk("scsi(%ld): GNN_ID failed, rejected "
++                          "request, gnn_id_rsp:\n", ha->host_no));
++                      DEBUG2_3(qla2x00_dump_buffer((uint8_t *)&ct_rsp->header,
++                          sizeof(struct ct_rsp_hdr)));
++                      rval = QL_STATUS_ERROR;
++              } else {
++                      /* Save nodename */
++                      memcpy(list[i].node_name,
++                          ct_rsp->rsp.gnn_id.node_name, WWN_SIZE);
++              }
++
++              /* Last device exit. */
++              if (list[i].d_id.b.rsvd_1 != 0)
++                      break;
++      }
++
++      LEAVE(__func__);
++
++      return (rval);
++}
++
++/**
++ * qla2x00_gft_id() - SNS Get FC-4 TYPEs (GFT_ID) query.
++ * @ha: HA context
++ * @list: switch info entries to populate
++ *
++ * Returns 0 on success.
++ */
++static int
++qla2x00_gft_id(scsi_qla_host_t *ha, sw_info_t *list)
++{
++      int             rval;
++      uint16_t        i;
++
++      ms_iocb_entry_t *ms_pkt;
++      struct ct_sns_req       *ct_req;
++      struct ct_sns_rsp       *ct_rsp;
++
++      ENTER(__func__);
++
++      for (i = 0; i < MAX_FIBRE_DEVICES; i++) {
++              /* Issue GFT_ID */
++              /* Prepare common MS IOCB */
++              ms_pkt = qla2x00_prep_ms_iocb(ha,
++                  GFT_ID_REQ_SIZE, GFT_ID_RSP_SIZE);
++
++              /* Prepare CT request */
++              ct_req = &ha->ct_sns->p.req;
++              ct_rsp = &ha->ct_sns->p.rsp;
++              memset(ct_req, 0, sizeof(struct ct_sns_pkt));
++
++              ct_req->header.revision = 0x01;
++              ct_req->header.gs_type = 0xFC;
++              ct_req->header.gs_subtype = 0x02;
++              ct_req->command = __constant_cpu_to_be16(GFT_ID_CMD);
++              ct_req->max_rsp_size =
++                  __constant_cpu_to_be16((GFT_ID_RSP_SIZE - 16) / 4);
++
++              /* Prepare CT arguments -- port_id */
++              ct_req->req.port_id.port_id[0] = list[i].d_id.b.domain;
++              ct_req->req.port_id.port_id[1] = list[i].d_id.b.area;
++              ct_req->req.port_id.port_id[2] = list[i].d_id.b.al_pa;
++
++              /* Execute MS IOCB */
++              rval = qla2x00_issue_iocb(ha,
++                  ha->ms_iocb, ha->ms_iocb_dma, sizeof(ms_iocb_entry_t));
++              if (rval != QL_STATUS_SUCCESS) {
++                      /*EMPTY*/
++                      DEBUG2_3(printk("scsi(%ld): GFT_ID issue IOCB failed "
++                          "(%d).\n",
++                          ha->host_no, rval));
++              } else if (ct_rsp->header.response !=
++                  __constant_cpu_to_be16(CT_ACCEPT_RESPONSE)) {
++                      DEBUG2_3(printk("scsi(%ld): GFT_ID failed, rejected "
++                          "request, gft_id_rsp:\n", ha->host_no));
++                      DEBUG2_3(qla2x00_dump_buffer((uint8_t *)&ct_rsp->header,
++                          sizeof(struct ct_rsp_hdr)));
++                      rval = QL_STATUS_ERROR;
++              } else {
++                      /* FCP-3 check necessary?  No, assume FCP-3 */
++                      /*if (ct_rsp->rsp.gft_id.fc4_types[2] & 0x01)*/
++                      list[i].type = SW_TYPE_SCSI;
++                      if (ct_rsp->rsp.gft_id.fc4_types[3] & 0x20)
++                              list[i].type |= SW_TYPE_IP;
++
++                      DEBUG2_3(printk("scsi(%ld): GID_PT entry - "
++                          "nodename %02x%02x%02x%02x%02x%02x%02x%02x "
++                          "portname %02x%02x%02x%02x%02x%02x%02x%02x "
++                          "portid=%02x%02x%02x type=%02x.\n",
++                          ha->host_no,
++                          list[i].node_name[0], list[i].node_name[1],
++                          list[i].node_name[2], list[i].node_name[3],
++                          list[i].node_name[4], list[i].node_name[5],
++                          list[i].node_name[6], list[i].node_name[7],
++                          list[i].port_name[0], list[i].port_name[1],
++                          list[i].port_name[2], list[i].port_name[3],
++                          list[i].port_name[4], list[i].port_name[5],
++                          list[i].port_name[6], list[i].port_name[7],
++                          list[i].d_id.b.domain,
++                          list[i].d_id.b.area,
++                          list[i].d_id.b.al_pa,
++                          list[i].type));
++              }
++
++              /* Last device exit. */
++              if (list[i].d_id.b.rsvd_1 != 0)
++                      break;
++      }
++
++      LEAVE(__func__);
++
++      return (rval);
++}
++
++/**
++ * qla2x00_rft_id() - SNS Register FC-4 TYPEs (RFT_ID) supported by the HBA.
++ * @ha: HA context
++ *
++ * Returns 0 on success.
++ */
++static int
++qla2x00_rft_id(scsi_qla_host_t *ha)
++{
++      int             rval;
++
++      ms_iocb_entry_t *ms_pkt;
++      struct ct_sns_req       *ct_req;
++      struct ct_sns_rsp       *ct_rsp;
++
++      ENTER(__func__);
++
++      /* Issue RFT_ID */
++      /* Prepare common MS IOCB */
++      ms_pkt = qla2x00_prep_ms_iocb(ha, RFT_ID_REQ_SIZE, RFT_ID_RSP_SIZE);
++
++      /* Prepare CT request */
++      ct_req = &ha->ct_sns->p.req;
++      ct_rsp = &ha->ct_sns->p.rsp;
++      memset(ct_req, 0, sizeof(struct ct_sns_pkt));
++
++      ct_req->header.revision = 0x01;
++      ct_req->header.gs_type = 0xFC;
++      ct_req->header.gs_subtype = 0x02;
++      ct_req->command = __constant_cpu_to_be16(RFT_ID_CMD);
++      ct_req->max_rsp_size =
++          __constant_cpu_to_be16((RFT_ID_RSP_SIZE - 16) / 4);
++
++      /* Prepare CT arguments -- port_id, FC-4 types */
++      ct_req->req.rft_id.port_id[0] = ha->d_id.b.domain;
++      ct_req->req.rft_id.port_id[1] = ha->d_id.b.area;
++      ct_req->req.rft_id.port_id[2] = ha->d_id.b.al_pa;
++
++      ct_req->req.rft_id.fc4_types[2] = 0x01;         /* FCP-3 */
++      ha->active_fc4_types = EXT_DEF_FC4_TYPE_SCSI;
++
++#if defined(FC_IP_SUPPORT)
++      if (ha->flags.enable_ip) {
++              ct_req->req.rft_id.fc4_types[3] = 0x20; /* IP over FC */
++              ha->active_fc4_types |= EXT_DEF_FC4_TYPE_IP;
++      }
++#endif
++#if defined(FC_VI_SUPPORT)
++      ct_req->req.rft_id.fc4_types[8] = 0x01;         /* FC-VI */
++      ha->active_fc4_types |= EXT_DEF_FC4_TYPE_VI;
++#endif
++
++      /* Execute MS IOCB */
++      rval = qla2x00_issue_iocb(ha,
++          ha->ms_iocb, ha->ms_iocb_dma, sizeof(ms_iocb_entry_t));
++      if (rval != QL_STATUS_SUCCESS) {
++              /*EMPTY*/
++              DEBUG2_3(printk("scsi(%ld): RFT_ID issue IOCB failed (%d).\n",
++                  ha->host_no, rval));
++      } else if (ct_rsp->header.response !=
++          __constant_cpu_to_be16(CT_ACCEPT_RESPONSE)) {
++              DEBUG2_3(printk("scsi(%ld): RFT_ID failed, rejected "
++                  "request, rft_id_rsp:\n", ha->host_no));
++              DEBUG2_3(qla2x00_dump_buffer((uint8_t *)&ct_rsp->header,
++                  sizeof(struct ct_rsp_hdr)));
++              rval = QL_STATUS_ERROR;
++      } else {
++              DEBUG2(printk("scsi(%ld): RFT_ID exiting normally.\n",
++                  ha->host_no));
++      }
++
++      LEAVE(__func__);
++
++      return (rval);
++}
++
++/**
++ * qla2x00_rff_id() - SNS Register FC-4 Features (RFF_ID) supported by the HBA.
++ * @ha: HA context
++ *
++ * Returns 0 on success.
++ */
++static int
++qla2x00_rff_id(scsi_qla_host_t *ha)
++{
++      int             rval;
++
++      ms_iocb_entry_t *ms_pkt;
++      struct ct_sns_req       *ct_req;
++      struct ct_sns_rsp       *ct_rsp;
++
++      ENTER(__func__);
++
++      /* Issue RFF_ID */
++      /* Prepare common MS IOCB */
++      ms_pkt = qla2x00_prep_ms_iocb(ha, RFF_ID_REQ_SIZE, RFF_ID_RSP_SIZE);
++
++      /* Prepare CT request */
++      ct_req = &ha->ct_sns->p.req;
++      ct_rsp = &ha->ct_sns->p.rsp;
++      memset(ct_req, 0, sizeof(struct ct_sns_pkt));
++
++      ct_req->header.revision = 0x01;
++      ct_req->header.gs_type = 0xFC;
++      ct_req->header.gs_subtype = 0x02;
++      ct_req->command = __constant_cpu_to_be16(RFF_ID_CMD);
++      ct_req->max_rsp_size =
++          __constant_cpu_to_be16((RFF_ID_RSP_SIZE - 16) / 4);
++
++      /* Prepare CT arguments -- port_id, FC-4 feature, FC-4 type */
++      ct_req->req.rff_id.port_id[0] = ha->d_id.b.domain;
++      ct_req->req.rff_id.port_id[1] = ha->d_id.b.area;
++      ct_req->req.rff_id.port_id[2] = ha->d_id.b.al_pa;
++
++      if (!ha->flags.enable_target_mode)
++              ct_req->req.rff_id.fc4_feature = 0x02;  /* SCSI Initiator */
++
++      ct_req->req.rff_id.fc4_type = 0x08;             /* SCSI - FCP */
++
++      /* Execute MS IOCB */
++      rval = qla2x00_issue_iocb(ha,
++          ha->ms_iocb, ha->ms_iocb_dma, sizeof(ms_iocb_entry_t));
++      if (rval != QL_STATUS_SUCCESS) {
++              /*EMPTY*/
++              DEBUG2_3(printk("scsi(%ld): RFF_ID issue IOCB failed (%d).\n",
++                  ha->host_no, rval));
++      } else if (ct_rsp->header.response !=
++          __constant_cpu_to_be16(CT_ACCEPT_RESPONSE)) {
++              DEBUG2_3(printk("scsi(%ld): RFF_ID failed, rejected "
++                  "request, rff_id_rsp:\n", ha->host_no));
++              DEBUG2_3(qla2x00_dump_buffer((uint8_t *)&ct_rsp->header,
++                  sizeof(struct ct_rsp_hdr)));
++              rval = QL_STATUS_ERROR;
++      } else {
++              DEBUG2(printk("scsi(%ld): RFF_ID exiting normally.\n",
++                  ha->host_no));
++      }
++
++      LEAVE(__func__);
++
++      return (rval);
++}
++
++/**
++ * qla2x00_rnn_id() - SNS Register Node Name (RNN_ID) of the HBA.
++ * @ha: HA context
++ *
++ * Returns 0 on success.
++ */
++static int
++qla2x00_rnn_id(scsi_qla_host_t *ha)
++{
++      int             rval;
++
++      ms_iocb_entry_t *ms_pkt;
++      struct ct_sns_req       *ct_req;
++      struct ct_sns_rsp       *ct_rsp;
++
++      ENTER(__func__);
++
++      /* Issue RNN_ID */
++      /* Prepare common MS IOCB */
++      ms_pkt = qla2x00_prep_ms_iocb(ha, RNN_ID_REQ_SIZE, RNN_ID_RSP_SIZE);
++
++      /* Prepare CT request */
++      ct_req = &ha->ct_sns->p.req;
++      ct_rsp = &ha->ct_sns->p.rsp;
++      memset(ct_req, 0, sizeof(struct ct_sns_pkt));
++
++      ct_req->header.revision = 0x01;
++      ct_req->header.gs_type = 0xFC;
++      ct_req->header.gs_subtype = 0x02;
++      ct_req->command = __constant_cpu_to_be16(RNN_ID_CMD);
++      ct_req->max_rsp_size =
++          __constant_cpu_to_be16((RNN_ID_RSP_SIZE - 16) / 4);
++
++      /* Prepare CT arguments -- port_id, node_name */
++      ct_req->req.rnn_id.port_id[0] = ha->d_id.b.domain;
++      ct_req->req.rnn_id.port_id[1] = ha->d_id.b.area;
++      ct_req->req.rnn_id.port_id[2] = ha->d_id.b.al_pa;
++
++      memcpy(ct_req->req.rnn_id.node_name, ha->init_cb->node_name, WWN_SIZE);
++
++      /* Execute MS IOCB */
++      rval = qla2x00_issue_iocb(ha,
++          ha->ms_iocb, ha->ms_iocb_dma, sizeof(ms_iocb_entry_t));
++      if (rval != QL_STATUS_SUCCESS) {
++              /*EMPTY*/
++              DEBUG2_3(printk("scsi(%ld): RNN_ID issue IOCB failed (%d).\n",
++                  ha->host_no, rval));
++      } else if (ct_rsp->header.response !=
++          __constant_cpu_to_be16(CT_ACCEPT_RESPONSE)) {
++              DEBUG2_3(printk("scsi(%ld): RNN_ID failed, rejected "
++                  "request, rnn_id_rsp:\n", ha->host_no));
++              DEBUG2_3(qla2x00_dump_buffer((uint8_t *)&ct_rsp->header,
++                  sizeof(struct ct_rsp_hdr)));
++              rval = QL_STATUS_ERROR;
++      } else {
++              DEBUG2(printk("scsi(%ld): RNN_ID exiting normally.\n",
++                  ha->host_no));
++      }
++
++      LEAVE(__func__);
++
++      return (rval);
++}
++
++/**
++ * qla2x00_rsnn_nn() - SNS Register Symbolic Node Name (RSNN_NN) of the HBA.
++ * @ha: HA context
++ *
++ * Returns 0 on success.
++ */
++static int
++qla2x00_rsnn_nn(scsi_qla_host_t *ha)
++{
++      int             rval;
++      uint8_t         *snn;
++      uint8_t         version[20];
++
++      ms_iocb_entry_t *ms_pkt;
++      struct ct_sns_req       *ct_req;
++      struct ct_sns_rsp       *ct_rsp;
++
++      ENTER(__func__);
++
++      /* Issue RSNN_NN */
++      /* Prepare common MS IOCB */
++      /*   Request size adjusted after CT preparation */
++      ms_pkt = qla2x00_prep_ms_iocb(ha, 0, RSNN_NN_RSP_SIZE);
++
++      /* Prepare CT request */
++      ct_req = &ha->ct_sns->p.req;
++      ct_rsp = &ha->ct_sns->p.rsp;
++      memset(ct_req, 0, sizeof(struct ct_sns_pkt));
++
++      ct_req->header.revision = 0x01;
++      ct_req->header.gs_type = 0xFC;
++      ct_req->header.gs_subtype = 0x02;
++      ct_req->command = __constant_cpu_to_be16(RSNN_NN_CMD);
++      ct_req->max_rsp_size =
++          __constant_cpu_to_be16((RSNN_NN_RSP_SIZE - 16) / 4);
++
++      /* Prepare CT arguments -- node_name, symbolic node_name, size */
++      memcpy(ct_req->req.rsnn_nn.node_name, ha->init_cb->node_name, WWN_SIZE);
++      
++      /* Prepare the Symbolic Node Name */
++      /* Board type */
++      snn = ct_req->req.rsnn_nn.sym_node_name;
++#if defined(ISP2300)
++      if (ha->pdev->device == QLA2312_DEVICE_ID) {
++              switch (ha->pdev->subsystem_device) {
++              case 0x0100:
++                      strcpy(snn , "QLA2340");
++                      break;
++
++              case 0x0101:
++                      strcpy(snn , "QLA2342");
++                      break;
++
++              case 0x0102:
++                      strcpy(snn , "QLA2312");
++                      break;
++
++              default:
++                      strcpy(snn , "QLA2312");
++                      break;
++              }
++      } else {
++              strcpy(snn ,"QLA23xx");
++      }
++#else
++      sprintf(snn, "QLA%04x", ha->pdev->device);
++#endif
++
++      /* Firmware version */
++      strcat(snn, " FW:v");
++      sprintf(version, "%d.%02d.%02d", ha->fw_major_version,
++          ha->fw_minor_version, ha->fw_subminor_version);
++      strcat(snn, version);
++
++      /* Driver version */
++      strcat(snn, " DVR:v");
++      strcat(snn, qla2x00_version_str);
++
++      /* Calculate SNN length */
++      ct_req->req.rsnn_nn.name_len = (uint8_t)strlen(snn);
++
++      /* Update MS IOCB request */
++      ms_pkt->req_bytecount =
++          cpu_to_le32(24 + 1 + ct_req->req.rsnn_nn.name_len);
++      ms_pkt->dseg_req_length = ms_pkt->req_bytecount;
++
++      /* Execute MS IOCB */
++      rval = qla2x00_issue_iocb(ha,
++          ha->ms_iocb, ha->ms_iocb_dma, sizeof(ms_iocb_entry_t));
++      if (rval != QL_STATUS_SUCCESS) {
++              /*EMPTY*/
++              DEBUG2_3(printk("scsi(%ld): RSNN_NN issue IOCB failed (%d).\n",
++                  ha->host_no, rval));
++      } else if (ct_rsp->header.response !=
++          __constant_cpu_to_be16(CT_ACCEPT_RESPONSE)) {
++              DEBUG2_3(printk("scsi(%ld): RSNN_NN failed, rejected "
++                  "request, rsnn_id_rsp:\n", ha->host_no));
++              DEBUG2_3(qla2x00_dump_buffer((uint8_t *)&ct_rsp->header,
++                  sizeof(struct ct_rsp_hdr)));
++              rval = QL_STATUS_ERROR;
++      } else {
++              DEBUG2(printk("scsi(%ld): RSNN_NN exiting normally.\n",
++                  ha->host_no));
++      }
++
++      LEAVE(__func__);
++
++      return (rval);
++}
++
++static int
++qla2x00_add_initiator_device(scsi_qla_host_t *ha, fcdev_t *device)
++{
++      int     ret;
++      fc_initiator_t  *fcinitiator;
++
++      ret = 1;
++      fcinitiator = kmalloc(sizeof(fc_initiator_t), GFP_ATOMIC);
++      if (fcinitiator != NULL) {
++              /* Setup initiator structure. */
++              memset(fcinitiator, 0, sizeof(fc_initiator_t));
++      
++              memcpy(fcinitiator->node_name, device->name, WWN_SIZE);
++              memcpy(fcinitiator->port_name, device->wwn, WWN_SIZE);
++              fcinitiator->d_id.b24 = device->d_id.b24;
++              fcinitiator->loop_id = device->loop_id;
++              list_add_tail(&fcinitiator->list, &ha->fcinitiators);
++              ret = 0;
++      } else {
++              printk(KERN_WARNING
++                  "%s(): Memory Allocation failed - FCINITIATOR\n",
++                  __func__);
++      }
++
++      return (ret);
++}
++
++/*
++ *  qla2x00_restart_queues
++ *    Restart device queues.
++ *
++ * Input:
++ *    ha = adapter block pointer.
++ *
++ * Context:
++ *    Kernel/Interrupt context.
++ */
++void
++qla2x00_restart_queues(scsi_qla_host_t *ha, uint8_t flush) 
++{
++      srb_t           *sp;
++      int             retry_q_cnt = 0;
++      int             pending_q_cnt = 0;
++      struct list_head *list, *temp;
++      unsigned long flags = 0;
++      struct list_head *hal;
++      scsi_qla_host_t *vis_ha;
++
++
++      ENTER(__func__);
++
++      clear_bit(RESTART_QUEUES_NEEDED, &ha->dpc_flags);
++
++      /*
++       * start pending queue
++       */
++      pending_q_cnt = ha->qthreads;
++      if (flush) {
++              spin_lock_irqsave(&ha->list_lock,flags);
++              list_for_each_safe(list, temp, &ha->pending_queue) {
++                      sp = list_entry(list, srb_t, list);
++                      /* 
++                       * When time expire return request back to OS as BUSY 
++                       */
++                      __del_from_pending_queue(ha, sp);
++                      CMD_RESULT(sp->cmd) = DID_BUS_BUSY << 16;
++                      CMD_HANDLE(sp->cmd) = (unsigned char *)NULL;
++                      __add_to_done_queue(ha, sp);
++              }
++              spin_unlock_irqrestore(&ha->list_lock, flags);
++      } else {
++              if (!list_empty(&ha->pending_queue))
++                      qla2x00_next(ha);
++      }
++
++      /*
++       * Clear out our retry queue
++       */
++      if (flush) {
++              spin_lock_irqsave(&ha->list_lock, flags);
++              retry_q_cnt = ha->retry_q_cnt;
++              list_for_each_safe(list, temp, &ha->retry_queue) {
++                      sp = list_entry(list, srb_t, list);
++                      /* when time expire return request back to OS as BUSY */
++                      __del_from_retry_queue(ha, sp);
++                      CMD_RESULT(sp->cmd) = DID_BUS_BUSY << 16;
++                      CMD_HANDLE(sp->cmd) = (unsigned char *) NULL;
++                      __add_to_done_queue(ha, sp);
++              }
++              spin_unlock_irqrestore(&ha->list_lock, flags);
++
++              DEBUG2(printk("%s(%ld): callback %d commands.\n",
++                              __func__,
++                              ha->host_no,
++                              retry_q_cnt);)
++      }
++
++      DEBUG2(printk("%s(%ld): active=%ld, retry=%d, pending=%d, "
++                      "done=%ld, failover=%d, scsi retry=%d commands.\n",
++                      __func__,
++                      ha->host_no,
++                      ha->actthreads,
++                      ha->retry_q_cnt,
++                      pending_q_cnt,
++                      ha->done_q_cnt,
++                      ha->failover_cnt,
++                      ha->scsi_retry_q_cnt);)
++
++      if (ha->flags.failover_enabled) {
++              /* Try and start all visible adapters */
++              read_lock(&qla_hostlist_lock);
++              list_for_each(hal, &qla_hostlist) {
++                      vis_ha = list_entry(hal, scsi_qla_host_t, list);
++
++                      if (!list_empty(&vis_ha->pending_queue))
++                              qla2x00_next(vis_ha);
++
++                      DEBUG2(printk("host(%ld):Commands busy=%d "
++                                      "failed=%d\nin_recovery=%d "
++                                      "eh_active=%d\n ",
++                                      vis_ha->host_no,
++                                      vis_ha->host->host_busy,
++                                      vis_ha->host->host_failed,
++                                      vis_ha->host->in_recovery,
++                                      vis_ha->host->eh_active);)      
++              }
++              read_unlock(&qla_hostlist_lock);
++      }
++
++      if (!list_empty(&ha->done_queue))
++              schedule_work(&ha->run_qla_task);
++
++      LEAVE(__func__);
++}
++
++/*
++ * qla2x00_update_fc_database
++ *      This routine updates the device data in the database.
++ *
++ * Input:
++ *      ha = adapter block pointer.
++ *      device = device data pointer.
++ *
++ * Returns:
++ *      0 = success, if device found or added to database.
++ *      BIT_0 = error
++ *      BIT_1 = database was full and device was not configured.
++ */
++static uint8_t
++qla2x00_update_fc_database(scsi_qla_host_t *ha,
++    fcdev_t *device, uint8_t enable_slot_reuse) 
++{
++      int             rval;
++      uint16_t        cnt, i;
++
++      DEBUG(printk("scsi(%ld): Found device - "
++          "nodename=%02x%02x%02x%02x%02x%02x%02x%02x, "
++          "portname=%02x%02x%02x%02x%02x%02x%02x%02x, "
++          "port Id=%02x%02x%02x, loop id=%04x\n",
++          ha->host_no,
++          device->name[0], device->name[1],
++          device->name[2], device->name[3],
++          device->name[4], device->name[5],
++          device->name[6], device->name[7],
++          device->wwn[0], device->wwn[1],
++          device->wwn[2], device->wwn[3],
++          device->wwn[4], device->wwn[5],
++          device->wwn[6], device->wwn[7],
++          device->d_id.b.domain, device->d_id.b.area, device->d_id.b.al_pa,
++          device->loop_id));
++
++      /* Look for device in database. */
++      for (cnt = 0; cnt < MAX_FIBRE_DEVICES; cnt++) {
++              if (ha->fc_db[cnt].loop_id == PORT_UNUSED)
++                      continue;
++
++              rval = 1;
++              switch (ha->binding_type) {
++              case BIND_BY_PORT_NAME:
++                      rval = memcmp(device->wwn,
++                          ha->fc_db[cnt].wwn, WWN_SIZE);
++                      break;
++
++              case BIND_BY_PORT_ID:
++                      rval = (device->d_id.b24 != ha->fc_db[cnt].d_id.b24);
++                      break;
++
++              case BIND_BY_NODE_NAME:
++                      rval = memcmp(device->name,
++                          ha->fc_db[cnt].name, WWN_SIZE);
++                      break;
++              }
++              if (rval)
++                      continue;
++
++              DEBUG(printk("scsi(%ld): Reusing slot %d for device "
++                  "%02x%02x%02x%02x%02x%02x%02x%02x\n",
++                  ha->host_no, cnt,
++                  device->wwn[0],
++                  device->wwn[1],
++                  device->wwn[2],
++                  device->wwn[3],
++                  device->wwn[4],
++                  device->wwn[5],
++                  device->wwn[6],
++                  device->wwn[7]));
++
++              if (device->flag & DEV_PUBLIC) {
++                      ha->fc_db[cnt].flag |= DEV_PUBLIC;
++              } else {
++                      if (ha->fc_db[cnt].flag & DEV_PUBLIC) {
++                              ha->fc_db[cnt].flag &= ~DEV_PUBLIC;
++                              ha->fabricid[ha->fc_db[cnt].loop_id].in_use 
++                                  = FALSE;
++                      }
++              }
++
++              ha->fc_db[cnt].loop_id = device->loop_id;
++              ha->fc_db[cnt].d_id.b24 = device->d_id.b24;
++
++              /* Update volatile unbound fields for PortID binding only */
++              if (ha->binding_type == BIND_BY_PORT_ID) {
++                      memcpy(ha->fc_db[cnt].name, device->name, WWN_SIZE);
++                      memcpy(ha->fc_db[cnt].wwn, device->wwn, WWN_SIZE);
++              }
++
++              return (0);
++      }
++
++      /* Find a empty slot and add device into database. */
++      for (i = 0; i < MAX_FIBRE_DEVICES; i++) {
++
++/* FlexServ Patch */
++#if QLA2XXX_HOTSWAP_ENUMERATION
++              /*
++               * Enumerate upon the actual ID so add-single-device works
++               */
++              if (i != device->loop_id) {
++                      continue;
++              }
++#endif
++
++              if ((ha->fc_db[i].loop_id == PORT_UNUSED) ||
++                      (ha->fc_db[i].loop_id == PORT_NEED_MAP)) {
++
++                      DEBUG(printk("scsi(%ld): New slot %d for device "
++                          "%02x%02x%02x%02x%02x%02x%02x%02x\n",
++                          ha->host_no, i,
++                          device->wwn[0],
++                          device->wwn[1],
++                          device->wwn[2],
++                          device->wwn[3],
++                          device->wwn[4],
++                          device->wwn[5],
++                          device->wwn[6],
++                          device->wwn[7]));
++
++                      memcpy(ha->fc_db[i].name, device->name, WWN_SIZE);
++                      memcpy(ha->fc_db[i].wwn, device->wwn, WWN_SIZE);
++                      ha->fc_db[i].loop_id = device->loop_id;
++                      ha->fc_db[i].d_id.b24 = device->d_id.b24;
++
++                      if (device->flag & DEV_PUBLIC)
++                              ha->fc_db[i].flag |= DEV_PUBLIC;
++
++                      ha->flags.updated_fc_db = TRUE;
++
++                      return (0);
++              }
++      }
++
++      if (enable_slot_reuse) {
++              for (i = 0; i < MAX_FIBRE_DEVICES; i++) {
++                      if (ha->fc_db[i].loop_id == PORT_AVAILABLE) {
++                              DEBUG(printk("scsi(%ld): Assigned slot %d "
++                                  "reuse for device "
++                                  "%02x%02x%02x%02x%02x%02x%02x%02x\n",
++                                  ha->host_no, i, 
++                                  device->wwn[0],
++                                  device->wwn[1],
++                                  device->wwn[2],
++                                  device->wwn[3],
++                                  device->wwn[4],
++                                  device->wwn[5],
++                                  device->wwn[6],
++                                  device->wwn[7]));
++
++                              memcpy(ha->fc_db[i].name,
++                                  device->name, WWN_SIZE);
++                              memcpy(ha->fc_db[i].wwn,
++                                  device->wwn, WWN_SIZE);
++                              ha->fc_db[i].loop_id = device->loop_id;
++                              ha->fc_db[i].d_id.b24 = device->d_id.b24;
++
++                              if (device->flag & DEV_PUBLIC)
++                                      ha->fc_db[i].flag |= DEV_PUBLIC;
++
++                              ha->flags.updated_fc_db = TRUE;
++
++                              return (0);
++                      }
++              }
++      }
++
++      return(BIT_1);
++}
++
++/*
++ * qla2x00_build_fcport_list
++ *    Updates device on list.
++ *
++ * Input:
++ *    ha = adapter block pointer.
++ *    fcport = port structure pointer.
++ *
++ * Return:
++ *    0  - Success
++ *  BIT_0 - error
++ *
++ * Context:
++ *    Kernel context.
++ */
++static int 
++qla2x00_build_fcport_list(scsi_qla_host_t *ha) 
++{
++// FIXME: FIX THIS C*!P!!!
++      int     rval;
++      fcdev_t         *dev;
++      int     found = 0;
++      int cnt, i;
++      struct list_head        *fcpl;
++      fc_port_t       *fcport;
++
++      ENTER(__func__);
++
++      for (cnt = 0; cnt < MAX_FIBRE_DEVICES; cnt++) {
++              dev = &ha->fc_db[cnt];
++
++              /* Skip if zero port name */
++              if (qla2x00_is_wwn_zero(dev->wwn)) {
++                      continue;
++              }
++
++              DEBUG3(printk("scsi(%ld): found tgt %d in fc_db.\n",
++                  ha->host_no, cnt));
++
++              /* Check for matching device in port list. */
++              i = 0;
++              found = 0;
++              fcport = NULL;
++              list_for_each(fcpl, &ha->fcports) {
++                      fcport = list_entry(fcpl, fc_port_t, list);
++
++                      rval = 1;
++                      switch (ha->binding_type) {
++                              case BIND_BY_PORT_NAME:
++                                      rval = memcmp(dev->wwn,
++                                                      fcport->port_name,
++                                                      WWN_SIZE);
++                                      break;
++
++                              case BIND_BY_PORT_ID:
++                                      rval = (dev->d_id.b24 !=
++                                               fcport->d_id.b24);
++                                      break;
++
++                              case BIND_BY_NODE_NAME:
++                                      rval = memcmp(dev->name,
++                                                      fcport->node_name,
++                                                      WWN_SIZE);
++                                      break;
++                      }
++                      if (rval) {
++                              i++;
++                              continue;
++                      }
++
++                      /*
++                       * Update volatile unbound fields for PortID binding
++                       * only
++                       */
++                      if (ha->binding_type == BIND_BY_PORT_ID) {
++                              memcpy(fcport->node_name, dev->name, WWN_SIZE);
++                              memcpy(fcport->port_name, dev->wwn, WWN_SIZE);
++                      }
++
++                      DEBUG(printk("%s(): Found matching port %02x%02x%02x, "
++                                      "device flags= 0x%x\n",
++                                      __func__,
++                                      dev->d_id.b.domain,
++                                      dev->d_id.b.area,
++                                      dev->d_id.b.al_pa,
++                                      dev->flag);)
++
++                      /* if device found is missing then mark it */
++                      if (dev->flag & DEV_ABSENCE) {
++                              DEBUG(printk("%s(): Port missing ---  "
++                                              "(port_name) -> "
++                                              "%02x%02x%02x%02x%02x"
++                                              "%02x%02x%02x, "
++                                              "loop id = 0x%04x\n",
++                                              __func__,
++                                              fcport->port_name[0],
++                                              fcport->port_name[1],
++                                              fcport->port_name[2],
++                                              fcport->port_name[3],
++                                              fcport->port_name[4],
++                                              fcport->port_name[5],
++                                              fcport->port_name[6],
++                                              fcport->port_name[7],
++                                              fcport->loop_id);)
++
++                              fcport->loop_id = FC_NO_LOOP_ID;
++
++                              qla2x00_mark_device_lost(ha, fcport);
++
++                              found++;
++                              break;
++                      }
++
++                      /* if device was missing but returned */
++                      if (fcport->loop_id == FC_NO_LOOP_ID ||
++                              !(dev->flag & DEV_PUBLIC) ||
++                              atomic_read(&fcport->state) != FC_ONLINE) {
++
++                              DEBUG(printk("%s(): Port returned +++  "
++                                              "(port_name) -> "
++                                              "%02x%02x%02x%02x%02x"
++                                              "%02x%02x%02x, "
++                                              "loop id = 0x%04x\n",
++                                              __func__,
++                                              fcport->port_name[0],
++                                              fcport->port_name[1],
++                                              fcport->port_name[2],
++                                              fcport->port_name[3],
++                                              fcport->port_name[4],
++                                              fcport->port_name[5],
++                                              fcport->port_name[6],
++                                              fcport->port_name[7],
++                                              fcport->loop_id);)
++
++                              fcport->loop_id = dev->loop_id;
++                              fcport->old_loop_id = dev->loop_id;
++                              fcport->d_id.b24 = dev->d_id.b24;
++
++                              if (qla2x00_update_fcport(ha, fcport, cnt)) {
++                                      DEBUG2(printk("%s(%ld): update_fcport "
++                                                      "failed.\n",
++                                                      __func__,
++                                                      ha->host_no);)
++
++                                      return BIT_0;
++                              }
++
++                              found++;
++                              break;
++                      }
++
++                      DEBUG(printk("%s(): Match - fcport[%d] = fc_db[%d] "
++                                      "(ignored) -> "
++                                      "%02x%02x%02x%02x%02x%02x%02x%02x, "
++                                      "loop id = 0x%04x\n",
++                                      __func__,
++                                      i, 
++                                      cnt,
++                                      fcport->port_name[0],
++                                      fcport->port_name[1],
++                                      fcport->port_name[2],
++                                      fcport->port_name[3],
++                                      fcport->port_name[4],
++                                      fcport->port_name[5],
++                                      fcport->port_name[6],
++                                      fcport->port_name[7],
++                                      fcport->loop_id);)
++
++                      fcport->loop_id = dev->loop_id;
++                      fcport->old_loop_id = dev->loop_id;
++
++                      found++;
++                      break;
++              }
++              if (found)
++                      continue;
++
++              /* Add device to port list. */
++              DEBUG3(printk("%s(%ld): adding new device to list.\n",
++                              __func__,
++                              ha->host_no);)
++
++              fcport = kmalloc(sizeof(fc_port_t), GFP_ATOMIC);
++              if (fcport == NULL)
++                      break;
++
++              memset(fcport, 0, sizeof(fc_port_t));
++
++              INIT_LIST_HEAD(&fcport->fcluns);
++
++              /* copy fields into fcport */
++              memcpy(fcport->port_name, dev->wwn, WWN_SIZE);
++              memcpy(fcport->node_name, dev->name, WWN_SIZE);
++
++              fcport->dev_id = cnt;
++
++              if (dev->flag & DEV_ABSENCE) {
++                      DEBUG(printk("%s(): Port missing --- "
++                                      "(port_name) -> "
++                                      "%02x%02x%02x%02x"
++                                      "%02x%02x%02x%02x, "
++                                      "loop id = 0x%04x\n",
++                                      __func__,
++                                      fcport->port_name[0],
++                                      fcport->port_name[1],
++                                      fcport->port_name[2],
++                                      fcport->port_name[3],
++                                      fcport->port_name[4],
++                                      fcport->port_name[5],
++                                      fcport->port_name[6],
++                                      fcport->port_name[7],
++                                      fcport->loop_id);)
++
++                      fcport->loop_id = FC_NO_LOOP_ID;
++ 
++                      qla2x00_mark_device_lost(ha, fcport);
++              } else {
++                      fcport->loop_id = dev->loop_id;
++                      fcport->old_loop_id = dev->loop_id;
++              }
++ 
++              fcport->d_id.b24 = dev->d_id.b24;
++ 
++              DEBUG(printk("%s(): New Device +++ (port_name) -> "
++                              "%02x%02x%02x%02x%02x%02x%02x%02x, "
++                              "loop id = 0x%04x\n",
++                              __func__,
++                              fcport->port_name[0],
++                              fcport->port_name[1],
++                              fcport->port_name[2],
++                              fcport->port_name[3],
++                              fcport->port_name[4],
++                              fcport->port_name[5],
++                              fcport->port_name[6],
++                              fcport->port_name[7],
++                              fcport->loop_id);)
++ 
++              /* flags */
++              if (dev->flag & DEV_PUBLIC)
++                      fcport->flags |= FC_FABRIC_DEVICE;
++ 
++              if (dev->flag & DEV_INITIATOR)
++                      fcport->flags |= FC_INITIATOR_DEVICE;
++ 
++              /* Assume the device supports RLC */
++              fcport->flags |= FC_SUPPORT_RPT_LUNS;
++ 
++              if (!ha->flags.failover_enabled)
++                      qla2x00_get_lun_mask_from_config(ha, fcport, cnt, 0);
++ 
++              /* Add to our list */
++              list_add_tail(&fcport->list, &ha->fcports);
++ 
++              if (qla2x00_update_fcport(ha, fcport, cnt)) {
++                      DEBUG2(printk("%s(%ld): update_fcport failed.\n",
++                                      __func__,
++                                      ha->host_no);)
++ 
++                      return BIT_0;
++              }
++      }
++
++      LEAVE(__func__);
++
++      return (0);
++}
++
++/*
++ * qla2x00_config_os
++ *    Setup OS target and LUN structures.
++ *
++ * Input:
++ *    ha = adapter state pointer.
++ *
++ * Context:
++ *    Kernel context.
++ */
++static void
++qla2x00_config_os(scsi_qla_host_t *ha) 
++{
++      struct list_head        *fcpl;
++      fc_port_t       *fcport;
++      struct list_head        *fcll;
++      fc_lun_t        *fclun;
++      os_lun_t        *lq;
++      uint16_t        t, l;
++
++
++      DEBUG3(printk("%s(%ld): entered.\n", __func__, ha->host_no);)
++
++      list_for_each(fcpl, &ha->fcports) {
++              fcport = list_entry(fcpl, fc_port_t, list);
++
++              /* Allocate target */
++#if 0
++              if (fcport->loop_id == FC_NO_LOOP_ID)
++                      continue;
++#endif
++
++              /* Bind fcport to target number. */
++              DEBUG5(printk("%s(%ld): fcport bind= %p\n",
++                              __func__,
++                              ha->host_no, fcport);)
++
++              if ((t = qla2x00_fcport_bind(ha, fcport)) == MAX_TARGETS)
++                      continue;
++
++#if VSA
++              if ((ha->fc_db[t].flag & DEV_FLAG_VSA))
++                      fcport->flags |= FC_VSA;
++#endif
++              DEBUG5(printk("%s(%ld): going to alloc lun for tgt %d. mask="
++                              "%02x%02x%02x%02x%02x%02x%02x%02x%02x%02x"
++                              "%02x%02x%02x%02x%02x%02x%02x%02x%02x%02x%02x"
++                              "%02x%02x%02x%02x%02x%02x%02x%02x%02x%02x%02x"
++                              ".\n",
++                              __func__,
++                              ha->host_no, 
++                              t, 
++                              fcport->lun_mask.mask[0],
++                              fcport->lun_mask.mask[1],
++                              fcport->lun_mask.mask[2],
++                              fcport->lun_mask.mask[3],
++                              fcport->lun_mask.mask[4],
++                              fcport->lun_mask.mask[5],
++                              fcport->lun_mask.mask[6],
++                              fcport->lun_mask.mask[7],
++                              fcport->lun_mask.mask[8],
++                              fcport->lun_mask.mask[9],
++                              fcport->lun_mask.mask[10],
++                              fcport->lun_mask.mask[11],
++                              fcport->lun_mask.mask[12],
++                              fcport->lun_mask.mask[13],
++                              fcport->lun_mask.mask[14],
++                              fcport->lun_mask.mask[15],
++                              fcport->lun_mask.mask[16],
++                              fcport->lun_mask.mask[17],
++                              fcport->lun_mask.mask[18],
++                              fcport->lun_mask.mask[19],
++                              fcport->lun_mask.mask[20],
++                              fcport->lun_mask.mask[21],
++                              fcport->lun_mask.mask[22],
++                              fcport->lun_mask.mask[23],
++                              fcport->lun_mask.mask[24],
++                              fcport->lun_mask.mask[25],
++                              fcport->lun_mask.mask[26],
++                              fcport->lun_mask.mask[27],
++                              fcport->lun_mask.mask[28],
++                              fcport->lun_mask.mask[29],
++                              fcport->lun_mask.mask[30],
++                              fcport->lun_mask.mask[31]);)
++
++              /* Allocate LUNs */
++              list_for_each(fcll, &fcport->fcluns) {
++                      fclun = list_entry(fcll, fc_lun_t, list);
++
++                      l = fclun->lun;         /* Must not exceed MAX_LUN */
++
++                      /*
++                       * Always alloc LUN 0 so kernel will scan past LUN 0.
++                       */
++                      if (l != 0 &&
++                          (EXT_IS_LUN_BIT_SET(&(fcport->lun_mask), l))) {
++
++                              /* mask this LUN */
++                              continue;
++                      }
++
++                      if ((lq = qla2x00_lun_alloc(ha, t, l)) == NULL)
++                              continue;
++
++                      lq->fclun = fclun;
++              }
++      }
++
++      DEBUG3(printk("%s(%ld): exiting normally.\n", __func__, ha->host_no);)
++}
++
++/*
++ * qla2x00_fcport_bind
++ *    Locates a target number for FC port.
++ *
++ * Input:
++ *    ha = adapter state pointer.
++ *    fcport = FC port structure pointer.
++ *
++ * Returns:
++ *    target number
++ *
++ * Context:
++ *    Kernel context.
++ */
++static uint16_t
++qla2x00_fcport_bind(scsi_qla_host_t *ha, fc_port_t *fcport) 
++{
++      int             rval;
++      uint16_t        t;
++      os_tgt_t        *tq;
++
++      ENTER(__func__);
++
++      /* Check for tgt already allocated for persistent binding. */
++      for (t = 0; t < MAX_TARGETS; t++) {
++              if ((tq = TGT_Q(ha, t)) == NULL)
++                      continue;
++
++              rval = 0;
++              switch (ha->binding_type) {
++              case BIND_BY_PORT_NAME:
++                      rval = memcmp(fcport->port_name,
++                          tq->port_name, WWN_SIZE);
++                      break;
++
++              case BIND_BY_PORT_ID:
++                      rval = (fcport->d_id.b24 != tq->d_id.b24);
++                      break;
++
++              case BIND_BY_NODE_NAME:
++                      rval = memcmp(fcport->node_name,
++                          tq->node_name, WWN_SIZE);
++                      break;
++              }
++              /* Found a persistently bound match */
++              if (rval == 0)
++                      break;
++      }
++
++      if (fcport->loop_id == FC_NO_LOOP_ID) {
++              DEBUG(tq = TGT_Q(ha, t);)
++              DEBUG(printk("scsi%ld: Missing target ID %02x @ %p to "
++                              "loop id: %04x, port state=0x%x, "
++                              "port down retry=%d\n",
++                              ha->host_no,
++                              t,
++                              tq,
++                              fcport->loop_id,
++                              atomic_read(&fcport->state),
++                              atomic_read(&fcport->port_down_timer));)
++              return (MAX_TARGETS);
++      }
++
++      if (t != MAX_TARGETS) {
++              tq = TGT_Q(ha, t);
++              tq->vis_port = fcport;
++
++              DEBUG(printk("scsi%ld: Assigning target ID %02x @ %p to "
++                              "loop id: %04x, port state=0x%x, "
++                              "port down retry=%d\n",
++                              ha->host_no,
++                              t,
++                              tq,
++                              fcport->loop_id,
++                              atomic_read(&fcport->state),
++                              atomic_read(&fcport->port_down_timer));)
++              return (t);
++      }
++
++      /* Check for persistent binding not yet configured. */
++      for (t = 0; t < MAX_TARGETS; t++) {
++              rval = 0;
++              switch (ha->binding_type) {
++                      case BIND_BY_PORT_NAME:
++                              rval = memcmp(fcport->port_name,
++                                              ha->fc_db[t].wwn, WWN_SIZE);
++                              break;
++
++                      case BIND_BY_PORT_ID:
++                              rval = (fcport->d_id.b24 !=
++                                              ha->fc_db[t].d_id.b24);
++                              break;
++
++                      case BIND_BY_NODE_NAME:
++                              rval = memcmp(fcport->node_name,
++                                              ha->fc_db[t].name, WWN_SIZE);
++                              break;
++              }
++              /* Found not-yet-allocated target at t */
++              if (rval == 0)
++                      break;
++      }
++
++      if (t == MAX_TARGETS) {
++              /* Check if slot at loop ID is available. */
++              t = fcport->loop_id;
++              if (TGT_Q(ha, t) != NULL) {
++                      /* Locate first free target id in db for device. */
++                      for (t = 0; t < MAX_TARGETS; t++) {
++                              if (TGT_Q(ha, t) == NULL)
++                                      break;
++                      }
++              }
++      }
++
++      if (t != MAX_TARGETS) {
++              tq = qla2x00_tgt_alloc(ha, t);
++              if (tq != NULL) {
++                      memcpy(tq->port_name, fcport->port_name, WWN_SIZE);
++                      tq->d_id.b24 = fcport->d_id.b24;
++                      memcpy(tq->node_name, fcport->node_name, WWN_SIZE);
++              }
++              else
++                      t = MAX_TARGETS;
++      }
++
++      if (t == MAX_TARGETS) {
++              DEBUG2(printk("%s(): **** FAILED ****", __func__);)
++              printk(KERN_WARNING
++                      "%s(): **** FAILED ****", __func__);
++      } else {
++              if (!ha->flags.failover_enabled) {
++                      /* fcport IS the visible port in non-failover mode */
++                      tq = TGT_Q(ha, t);
++                      tq->vis_port = fcport;
++              }
++
++              DEBUG(tq = TGT_Q(ha, t);)
++              DEBUG(printk("scsi%ld: Assigning target ID %02x @ %p to "
++                              "loop id: %04x, port state=0x%x, "
++                              "port down retry=%d\n",
++                              ha->host_no,
++                              t,
++                              tq,
++                              fcport->loop_id,
++                              atomic_read(&fcport->state),
++                              atomic_read(&fcport->port_down_timer));)
++      }
++
++      LEAVE(__func__);
++
++      return (t);
++}
++
++/*
++ * qla2x00_update_fcport
++ *    Updates device on list.
++ *
++ * Input:
++ *    ha = adapter block pointer.
++ *    fcport = port structure pointer.
++ *
++ * Return:
++ *    0  - Success
++ *  BIT_0 - error
++ *
++ * Context:
++ *    Kernel context.
++ */
++static int
++qla2x00_update_fcport(scsi_qla_host_t *ha, fc_port_t *fcport, int index) 
++{
++      DEBUG4(printk("%s(): entered, loop_id = %d\n",
++                      __func__,
++                      fcport->loop_id);)
++
++      fcport->port_login_retry_count =
++          ha->port_down_retry_count * PORT_RETRY_TIME;
++      atomic_set(&fcport->state, FC_ONLINE);
++      fcport->login_retry = 0;
++      fcport->ha = ha;
++      atomic_set(&fcport->port_down_timer,
++          ha->port_down_retry_count * PORT_RETRY_TIME);
++
++      /* Do LUN discovery. */
++      return (qla2x00_lun_discovery(ha, fcport, index));
++}
++
++/*
++ * qla2x00_lun_discovery
++ *    Issue SCSI inquiry command for LUN discovery.
++ *
++ * Input:
++ *    ha = adapter block pointer.
++ *    fcport = FC port structure pointer.
++ *
++ * Return:
++ *    0  - Success
++ *  BIT_0 - error
++ *
++ * Context:
++ *    Kernel context.
++ */
++static int
++qla2x00_lun_discovery(scsi_qla_host_t *ha, fc_port_t *fcport, int index) 
++{
++      inq_cmd_rsp_t   *pkt;
++      int             rval;
++      uint16_t        lun;
++      struct list_head        *fcll;
++      fc_lun_t        *fclun;
++      int             found;
++      dma_addr_t      phys_address = 0;
++      int             disconnected;
++      int             retry;
++      fcdev_t         dev;
++      int             rlc_succeeded;
++      uint16_t        comp_status;
++      uint16_t        scsi_status;
++
++      ENTER(__func__);
++
++      /* 
++       * Immediately issue a RLC to the fcport
++       */
++      rlc_succeeded = 0;
++      if (qla2x00_rpt_lun_discovery(ha, fcport) == QLA2X00_SUCCESS) {
++              /* 
++               * We always need at least LUN 0 to be present in our fclun
++               * list if RLC succeeds.
++               */
++              qla2x00_cfg_lun(fcport, 0);
++              /* 
++               * At least do an inquiry on LUN 0 to determine peripheral
++               * qualifier type.
++               */
++              rlc_succeeded = 1;
++      }
++
++      /*
++       * RLC failed for some reason, try basic inquiries
++       */
++      pkt = pci_alloc_consistent(ha->pdev,
++          sizeof(inq_cmd_rsp_t), &phys_address);
++      if (pkt == NULL) {
++              printk(KERN_WARNING
++                  "scsi(%ld): Memory Allocation failed - INQ\n",
++                  ha->host_no);
++
++              ha->mem_err++;
++              return BIT_0;
++      }
++
++      for (lun = 0; lun < ha->max_probe_luns; lun++) {
++              retry = 2;
++              do {
++                      memset(pkt, 0, sizeof(inq_cmd_rsp_t));
++                      pkt->p.cmd.entry_type = COMMAND_A64_TYPE;
++                      pkt->p.cmd.entry_count = 1;
++                      pkt->p.cmd.lun = cpu_to_le16(lun);
++#if defined(EXTENDED_IDS)
++                      pkt->p.cmd.target = cpu_to_le16(fcport->loop_id & 0xFF);
++#else
++                      pkt->p.cmd.target = (uint8_t)fcport->loop_id;
++#endif
++                      pkt->p.cmd.control_flags =
++                          __constant_cpu_to_le16(CF_READ | CF_SIMPLE_TAG);
++                      pkt->p.cmd.scsi_cdb[0] = INQ_SCSI_OPCODE;
++                      pkt->p.cmd.scsi_cdb[4] = INQ_DATA_SIZE;
++                      pkt->p.cmd.dseg_count = __constant_cpu_to_le16(1);
++                      pkt->p.cmd.timeout = __constant_cpu_to_le16(10);
++                      pkt->p.cmd.byte_count =
++                          __constant_cpu_to_le32(INQ_DATA_SIZE);
++                      pkt->p.cmd.dseg_0_address[0] = cpu_to_le32(
++                          LSD(phys_address + sizeof(sts_entry_t)));
++                      pkt->p.cmd.dseg_0_address[1] = cpu_to_le32(
++                          MSD(phys_address + sizeof(sts_entry_t)));
++                      pkt->p.cmd.dseg_0_length =
++                          __constant_cpu_to_le32(INQ_DATA_SIZE);
++
++                      DEBUG5(printk("scsi(%ld): Lun Inquiry - fcport=%p,"
++                          " lun (%d)\n",
++                          ha->host_no, fcport, lun));
++
++                      rval = qla2x00_issue_iocb(ha,
++                          pkt, phys_address, sizeof(inq_cmd_rsp_t));
++
++                      comp_status = le16_to_cpu(pkt->p.rsp.comp_status);
++                      scsi_status = le16_to_cpu(pkt->p.rsp.scsi_status);
++
++                      DEBUG5(printk("scsi(%ld): lun (%d) inquiry - "
++                          "inq[0]= 0x%x, comp status 0x%x, scsi status 0x%x, "
++                          "rval=%d\n",
++                          ha->host_no,
++                          lun, pkt->inq[0],
++                          comp_status, scsi_status, rval));
++
++                      /* if port not logged in then try and login */
++                      if (lun == 0 && comp_status == CS_PORT_LOGGED_OUT) {
++                              memset(&dev, 0, sizeof (dev));
++                              dev.d_id.b24 = ha->fc_db[index].d_id.b24;
++
++                              /* login and update database */
++                              if (qla2x00_fabric_login(ha, &dev) == 0)
++                                      ha->fc_db[index].loop_id = dev.loop_id;
++                      }
++              } while ((rval != QLA2X00_SUCCESS ||
++                  comp_status != CS_COMPLETE) && retry--);
++
++              if (rval != QLA2X00_SUCCESS ||
++                  comp_status != CS_COMPLETE ||
++                  (scsi_status & SS_CHECK_CONDITION)) {
++
++                      DEBUG(printk("scsi(%ld): Failed lun inquiry - "
++                          "inq[0]= 0x%x, comp status 0x%x, scsi status 0x%x. "
++                          "loop_id=%d\n",
++                          ha->host_no,
++                          pkt->inq[0],
++                          comp_status, scsi_status,
++                          fcport->loop_id));
++
++                      break;
++              }
++
++              disconnected = 0;
++
++              /*
++               * We only need to issue an inquiry on LUN 0 to determine the
++               * port's peripheral qualifier type
++               */
++              if (rlc_succeeded == 1) {
++                      if (pkt->inq[0] == 0 || pkt->inq[0] == 0xc) {
++                              fcport->flags &= ~(FC_TAPE_DEVICE);
++                              ha->fc_db[index].flag &= ~DEV_TAPE_DEVICE;
++                      } else if (pkt->inq[0] == 1 || pkt->inq[0] == 8) {
++                              fcport->flags |= FC_TAPE_DEVICE;
++                              ha->fc_db[index].flag |= DEV_TAPE_DEVICE;
++                      }
++
++                      /* Stop the scan */
++                      break;
++              }
++
++              /* inq[0] ==:
++               *       0x0- Hard Disk.
++               *       0xc- is a processor device.    
++               *       0x1- is a Tape Device.
++               *       0x8- is a medium changer device
++               *            which is basically a Tape device.
++               */
++              if (pkt->inq[0] == 0 || pkt->inq[0] == 0xc) {
++                      fcport->flags &= ~(FC_TAPE_DEVICE);
++                      ha->fc_db[index].flag &= ~DEV_TAPE_DEVICE;
++              } else if (pkt->inq[0] == 1 || pkt->inq[0] == 8) {
++                      fcport->flags |= FC_TAPE_DEVICE;
++                      ha->fc_db[index].flag |= DEV_TAPE_DEVICE;
++              } else if (pkt->inq[0] == 0x20 || pkt->inq[0] == 0x7f) {
++                      disconnected++;
++              } else {
++                      continue;
++              }
++              
++              /* Allocate LUN if not already allocated. */
++              found = 0;
++              list_for_each(fcll, &fcport->fcluns) {
++                      fclun = list_entry(fcll, fc_lun_t, list);
++
++                      if (fclun->lun == lun) {
++                              found++;
++                              break;
++                      }
++              }
++              if (found)
++                      continue;
++
++              /* Add this lun to our list */
++              fclun = kmalloc(sizeof(fc_lun_t), GFP_ATOMIC);
++              if (fclun != NULL) {
++                      fcport->lun_cnt++;
++                      /* Setup LUN structure. */
++                      memset(fclun, 0, sizeof(fc_lun_t));
++
++                      fclun->fcport = fcport;
++                      fclun->lun = lun;
++
++                      if (disconnected)
++                              fclun->flags |= FC_DISCON_LUN;
++
++                      list_add_tail(&fclun->list, &fcport->fcluns);
++
++                      DEBUG5(printk("scsi(%ld): Allocated fclun %p, lun=%d"
++                          "disconnected=%d\n",
++                          ha->host_no,
++                          fclun,
++                          fclun->lun,
++                          disconnected));
++              } else {
++                      printk(KERN_WARNING
++                          "scsi(%ld): Memory Allocation failed - fclun\n",
++                          ha->host_no);
++
++                      ha->mem_err++;
++                      pci_free_consistent(ha->pdev,
++                          sizeof(inq_cmd_rsp_t), pkt, phys_address);
++
++                      return BIT_0;
++              }
++
++      }
++
++      DEBUG(printk("scsi(%ld): fcport lun count=%d, fcport= %p\n",
++          ha->host_no, fcport->lun_cnt, fcport));
++
++      pci_free_consistent(ha->pdev, sizeof(inq_cmd_rsp_t), pkt, phys_address);
++
++      LEAVE(__func__);
++
++      return 0;
++}
++
++/*
++ * qla2x00_rpt_lun_discovery
++ *    Issue SCSI report LUN command for LUN discovery.
++ *
++ * Input:
++ *    ha:             adapter state pointer.
++ *    fcport:         FC port structure pointer.
++ *
++ * Returns:
++ *    qla2x00 local function return status code.
++ *
++ * Context:
++ *    Kernel context.
++ */
++static int
++qla2x00_rpt_lun_discovery(scsi_qla_host_t *ha, fc_port_t *fcport) 
++{
++      rpt_lun_cmd_rsp_t       *pkt;
++      dma_addr_t              phys_address = 0;
++      int                     rval;
++      uint32_t                len, cnt;
++      uint8_t                 retries;
++      uint16_t                lun;
++      uint16_t                comp_status;
++      uint16_t                scsi_status;
++
++      ENTER(__func__);
++
++      /* Assume a failed status */
++      rval = QLA2X00_FAILED;
++
++      /* No point in continuing if the device doesn't support RLC */
++      if (!(fcport->flags & FC_SUPPORT_RPT_LUNS))
++              return (rval);
++
++      pkt = pci_alloc_consistent(ha->pdev,
++          sizeof(rpt_lun_cmd_rsp_t), &phys_address);
++      if (pkt == NULL) {
++              printk(KERN_WARNING
++                      "scsi(%ld): Memory Allocation failed - RLC",
++                      ha->host_no);
++
++              ha->mem_err++;
++              return BIT_0;
++      }
++
++      for (retries = 4; retries; retries--) {
++              memset(pkt, 0, sizeof(rpt_lun_cmd_rsp_t));
++              pkt->p.cmd.entry_type = COMMAND_A64_TYPE;
++              pkt->p.cmd.entry_count = 1;
++#if defined(EXTENDED_IDS)
++              pkt->p.cmd.target = cpu_to_le16(fcport->loop_id & 0xFF);
++#else
++              pkt->p.cmd.target = (uint8_t)fcport->loop_id;
++#endif
++              pkt->p.cmd.control_flags =
++                  __constant_cpu_to_le16(CF_READ | CF_SIMPLE_TAG);
++              pkt->p.cmd.scsi_cdb[0] = RPT_LUN_SCSI_OPCODE;
++              pkt->p.cmd.scsi_cdb[8] = MSB(sizeof(rpt_lun_lst_t));
++              pkt->p.cmd.scsi_cdb[9] = LSB(sizeof(rpt_lun_lst_t));
++              pkt->p.cmd.dseg_count = __constant_cpu_to_le16(1);
++              pkt->p.cmd.timeout = __constant_cpu_to_le16(10);
++              pkt->p.cmd.byte_count =
++                  __constant_cpu_to_le32(sizeof(rpt_lun_lst_t));
++              pkt->p.cmd.dseg_0_address[0] = cpu_to_le32(
++                  LSD(phys_address + sizeof(sts_entry_t)));
++              pkt->p.cmd.dseg_0_address[1] = cpu_to_le32(
++                  MSD(phys_address + sizeof(sts_entry_t)));
++              pkt->p.cmd.dseg_0_length =
++                  __constant_cpu_to_le32(sizeof(rpt_lun_lst_t));
++
++              rval = qla2x00_issue_iocb(ha,
++                  pkt, phys_address, sizeof(rpt_lun_cmd_rsp_t));
++
++              comp_status = le16_to_cpu(pkt->p.rsp.comp_status);
++              scsi_status = le16_to_cpu(pkt->p.rsp.scsi_status);
++
++              if (rval != QLA2X00_SUCCESS ||
++                  comp_status != CS_COMPLETE ||
++                  scsi_status & SS_CHECK_CONDITION) {
++
++                      /* Device underrun, treat as OK. */
++                      if (comp_status == CS_DATA_UNDERRUN &&
++                          scsi_status & SS_RESIDUAL_UNDER) {
++
++                              rval = QLA2X00_SUCCESS;
++                              break;
++                      }
++
++                      DEBUG(printk("scsi(%ld): RLC failed to issue iocb! "
++                          "fcport = %p rval = %x cs = %x ss = %x\n",
++                          ha->host_no,
++                          fcport,
++                          rval, comp_status, scsi_status));
++
++                      rval = QLA2X00_FAILED;
++                      if (scsi_status & SS_CHECK_CONDITION) {
++                              DEBUG2(printk("scsi(%ld): RLC "
++                                  "SS_CHECK_CONDITION Sense Data "
++                                  "%02x %02x %02x %02x %02x %02x %02x %02x\n",
++                                  ha->host_no,
++                                  pkt->p.rsp.req_sense_data[0],
++                                  pkt->p.rsp.req_sense_data[1],
++                                  pkt->p.rsp.req_sense_data[2],
++                                  pkt->p.rsp.req_sense_data[3],
++                                  pkt->p.rsp.req_sense_data[4],
++                                  pkt->p.rsp.req_sense_data[5],
++                                  pkt->p.rsp.req_sense_data[6],
++                                  pkt->p.rsp.req_sense_data[7]));
++                              /* No point in retrying if ILLEGAL REQUEST */
++                              if (pkt->p.rsp.req_sense_data[2] ==
++                                  ILLEGAL_REQUEST) {
++                                      /* Clear RLC support flag */
++                                      fcport->flags &= ~(FC_SUPPORT_RPT_LUNS);
++                                      break;
++                              }
++                      }
++              } else {
++                      break;
++              }
++      }
++
++      /* Test for report LUN failure. */
++      if (rval == QLA2X00_SUCCESS) {
++              /* Configure LUN list. */
++              len = be32_to_cpu(pkt->list.hdr.len);
++              len /= 8;
++              if (len == 0) {
++                      rval = QLA2X00_FAILED;
++              } else {
++                      for (cnt = 0; cnt < len; cnt++) {
++                              lun = CHAR_TO_SHORT(pkt->list.lst[cnt].lsb,
++                                  pkt->list.lst[cnt].msb.b);
++
++                              DEBUG3(printk("scsi(%ld): RLC lun = (%d)\n",
++                                  ha->host_no, lun));
++
++                              /* We only support 0 through MAX_LUNS-1 range */
++                              if (lun < MAX_LUNS) {
++                                      qla2x00_cfg_lun(fcport, lun);
++                              }
++                      }
++                      rval = QLA2X00_SUCCESS;
++              }
++      } else {
++              rval = QLA2X00_FAILED;
++      }
++
++      pci_free_consistent(ha->pdev,
++          sizeof(rpt_lun_cmd_rsp_t), pkt, phys_address);
++
++
++      LEAVE(__func__);
++
++      return (rval);
++}
++
++/*
++ * qla2x00_cfg_lun
++ *    Configures LUN into fcport LUN list.
++ *
++ * Input:
++ *    fcport:         FC port structure pointer.
++ *    lun:            LUN number.
++ *
++ * Context:
++ *    Kernel context.
++ */
++static void
++qla2x00_cfg_lun(fc_port_t *fcport, uint16_t lun) 
++{
++      int                     found;
++      struct list_head        *fcll;
++      fc_lun_t                *fclun;
++
++      /* Allocate LUN if not already allocated. */
++      found = 0;
++      list_for_each(fcll, &fcport->fcluns) {
++              fclun = list_entry(fcll, fc_lun_t, list);
++
++              if (fclun->lun == lun) {
++                      found++;
++                      break;
++              }
++      }
++      if (!found) {
++              fclun = kmalloc(sizeof(fc_lun_t), GFP_ATOMIC);
++              if (fclun != NULL) {
++                      fcport->lun_cnt++;
++                      /* Setup LUN structure. */
++                      memset(fclun, 0, sizeof(fc_lun_t));
++                      fclun->fcport = fcport;
++                      fclun->lun = lun;
++                      /* How dow we assign the following */
++                      /*  fclun->state = FCS_ONLINE; */
++
++                      list_add_tail(&fclun->list, &fcport->fcluns);
++              } else {
++                      printk(KERN_WARNING
++                              "%s(): Memory Allocation failed - FCLUN\n",
++                              __func__);
++              }
++      }
++}
++
++/*
++ * qla2x00_tgt_alloc
++ *    Allocate and pre-initialize target queue.
++ *
++ * Input:
++ *    ha = adapter block pointer.
++ *    t = SCSI target number.
++ *
++ * Returns:
++ *    NULL = failure
++ *
++ * Context:
++ *    Kernel context.
++ */
++os_tgt_t *
++qla2x00_tgt_alloc(scsi_qla_host_t *ha, uint16_t t) 
++{
++      os_tgt_t        *tq;
++
++      ENTER(__func__);
++
++      /*
++       * If SCSI addressing OK, allocate TGT queue and lock.
++       */
++      if (t >= MAX_TARGETS) {
++              DEBUG2(printk("%s(%ld): *** Invalid target number, exiting ***",
++                              __func__,
++                              ha->host_no);)
++              return (NULL);
++      }
++
++      tq = TGT_Q(ha, t);
++      if (tq == NULL) {
++              tq = kmalloc(sizeof(os_tgt_t), GFP_ATOMIC);
++              if (tq != NULL) {
++                      DEBUG(printk("Alloc Target %d @ %p\n", t, tq);)
++
++                      memset(tq, 0, sizeof(os_tgt_t));
++                      tq->flags = TGT_TAGGED_QUEUE;
++                      tq->ha = ha;
++
++                      TGT_Q(ha, t) = tq;
++              }
++      }
++      if (tq != NULL) {
++              tq->port_down_retry_count = ha->port_down_retry_count;
++      } else {
++              printk(KERN_WARNING
++                      "%s(%ld): Failed to allocate target\n",
++                      __func__,
++                      ha->host_no);
++              ha->mem_err++;
++      }
++
++      LEAVE(__func__);
++
++      return (tq);
++}
++
++/*
++ * qla2x00_tgt_free
++ *    Frees target and LUN queues.
++ *
++ * Input:
++ *    ha = adapter block pointer.
++ *    t = SCSI target number.
++ *
++ * Context:
++ *    Kernel context.
++ */
++void
++qla2x00_tgt_free(scsi_qla_host_t *ha, uint16_t t) 
++{
++      os_tgt_t        *tq;
++      uint16_t        l;
++
++      ENTER(__func__);
++
++      /*
++       * If SCSI addressing OK, allocate TGT queue and lock.
++       */
++      if (t >= MAX_TARGETS) {
++              DEBUG2(printk("%s(): **** FAILED exiting ****", __func__);)
++
++              return;
++      }
++
++      tq = TGT_Q(ha, t);
++      if (tq != NULL) {
++              TGT_Q(ha, t) = NULL;
++              DEBUG(printk("Dealloc target @ %p -- deleted\n", tq);)
++
++              /* Free LUN structures. */
++              for (l = 0; l < MAX_LUNS; l++)
++                      qla2x00_lun_free(ha, t, l);
++
++              kfree(tq);
++      }
++
++      LEAVE(__func__);
++
++      return;
++}
++
++/*
++ * qla2x00_lun_alloc
++ *    Allocate and initialize LUN queue.
++ *
++ * Input:
++ *    ha = adapter block pointer.
++ *    t = SCSI target number.
++ *    l = LUN number.
++ *
++ * Returns:
++ *    NULL = failure
++ *
++ * Context:
++ *    Kernel context.
++ */
++os_lun_t *
++qla2x00_lun_alloc(scsi_qla_host_t *ha, uint16_t t, uint16_t l) 
++{
++      os_lun_t        *lq;
++
++      ENTER(__func__);
++
++      /*
++       * If SCSI addressing OK, allocate LUN queue.
++       */
++      if (t >= MAX_TARGETS || 
++              l >= MAX_LUNS || 
++              TGT_Q(ha, t) == NULL) {
++
++              DEBUG2(printk("%s(): tgt=%d, tgt_q= %p, lun=%d, "
++                              "instance=%ld **** FAILED exiting ****\n",
++                              __func__,
++                              t,
++                              TGT_Q(ha,t),
++                              l,
++                              ha->instance);)
++
++              return (NULL);
++      }
++
++      lq = LUN_Q(ha, t, l);
++      if (lq == NULL) {
++              lq = kmalloc(sizeof(os_lun_t), GFP_ATOMIC);
++              if (lq != NULL) {
++
++                      DEBUG5(printk("Alloc Lun %d @ %p \n",l,lq);)
++
++                      memset(lq, 0, sizeof (os_lun_t));
++                      LUN_Q(ha, t, l) = lq;
++                      /*
++                       * The following lun queue initialization code
++                       * must be duplicated in alloc_ioctl_mem function
++                       * for ioctl_lq.
++                       */
++                      lq->q_state = LUN_STATE_READY;
++                      spin_lock_init(&lq->q_lock);
++              } else {
++                      /*EMPTY*/
++                      DEBUG2(printk("%s(): Failed to allocate lun %d ***\n",
++                                      __func__,
++                                      l);)
++                      printk(KERN_WARNING
++                              "scsi(%ld): Memory Allocation failed - FCLUN\n",
++                              ha->host_no);
++                      ha->mem_err++;
++              }
++      }
++
++      if (lq == NULL) {
++              DEBUG2(printk("%s(): **** FAILED exiting ****\n", __func__);)
++      } else {
++              LEAVE(__func__);
++      }
++
++      return (lq);
++}
++
++/*
++ * qla2x00_lun_free
++ *    Frees LUN queue.
++ *
++ * Input:
++ *    ha = adapter block pointer.
++ *    t = SCSI target number.
++ *
++ * Context:
++ *    Kernel context.
++ */
++static void
++qla2x00_lun_free(scsi_qla_host_t *ha, uint16_t t, uint16_t l) 
++{
++      os_lun_t        *lq;
++
++      ENTER(__func__);
++
++      /*
++       * If SCSI addressing OK, allocate TGT queue and lock.
++       */
++      if (t >= MAX_TARGETS || l >= MAX_LUNS) {
++              DEBUG2(printk("%s(): **** FAILED exiting ****", __func__);)
++
++              return;
++      }
++
++      if (TGT_Q(ha, t) != NULL && 
++              (lq = LUN_Q(ha, t, l)) != NULL) {
++
++              LUN_Q(ha, t, l) = NULL;
++              kfree(lq);
++
++              DEBUG3(printk("Dealloc lun @ %p -- deleted\n", lq);)
++      }
++
++      LEAVE(__func__);
++
++      return;
++}
++
++
++/*
++ * qla2x00_get_lun_mask_from_config
++ *      Get lun mask from the configuration parameters.
++ *      Bit order is little endian.
++ *
++ * Input:
++ * ha  -- Host adapter
++ * tgt  -- target/device number
++ * port -- pointer to port
++ */
++static void
++qla2x00_get_lun_mask_from_config(scsi_qla_host_t *ha, 
++              fc_port_t *port, uint16_t tgt, uint16_t dev_no) 
++{
++      char            propbuf[60]; /* size of search string */
++      int             rval, lun, l;
++      lun_bit_mask_t  lun_mask, *mask_ptr = &lun_mask;
++
++      /* Get "target-N-device-N-lun-mask" as a 256 bit lun_mask*/
++      sprintf(propbuf, "scsi-qla%ld-tgt-%d-di-%d-lun-disabled",
++                      ha->instance, tgt, dev_no);
++
++      rval = qla2x00_get_prop_xstr(ha, propbuf, (uint8_t *)&lun_mask,
++                      sizeof(lun_bit_mask_t));
++      if (rval != -1 && 
++              (rval == sizeof(lun_bit_mask_t))) {
++
++              DEBUG3(printk("%s(%ld): lun mask for port %p from file:\n",
++                              __func__,
++                              ha->host_no, 
++                              port);)
++              DEBUG3(qla2x00_dump_buffer((uint8_t *)&port->lun_mask,
++                                      sizeof(lun_bit_mask_t));)
++
++              for (lun = 8 * sizeof(lun_bit_mask_t) - 1, l = 0; 
++                      lun >= 0; 
++                      lun--, l++) {
++
++                      if (EXT_IS_LUN_BIT_SET(mask_ptr, lun))
++                              EXT_SET_LUN_BIT((&port->lun_mask),l);
++                      else
++                              EXT_CLR_LUN_BIT((&port->lun_mask),l);
++              }
++
++              DEBUG3(printk("%s(%ld): returning lun mask for port "
++                              "%02x%02x%02x%02x%02x%02x%02x%02x:\n",
++                              __func__,
++                              ha->host_no, 
++                              port->port_name[0], port->port_name[1],
++                              port->port_name[2], port->port_name[3],
++                              port->port_name[4], port->port_name[5],
++                              port->port_name[6], port->port_name[7]);)
++              DEBUG3(qla2x00_dump_buffer((uint8_t *)&port->lun_mask,
++                              sizeof(lun_bit_mask_t));)
++      }
++}
++
++/*
++ * qla2x00_bstr_to_hex
++ *    Convert hex byte string to number.
++ *
++ * Input:
++ *    s = byte string pointer.
++ *    bp = byte pointer for number.
++ *    size = number of bytes.
++ *
++ * Context:
++ *    Kernel/Interrupt context.
++ */
++static int
++qla2x00_bstr_to_hex(char *s, uint8_t *bp, int size) 
++{
++      int             cnt;
++      uint8_t         n;
++
++      ENTER(__func__);
++
++      for (cnt = 0; *s != '\0' && cnt / 2 < size; cnt++) {
++              if (*s >= 'A' && *s <= 'F') {
++                      n = (*s++ - 'A') + 10;
++              } else if (*s >= 'a' && *s <= 'f') {
++                      n = (*s++ - 'a') + 10;
++              } else if (*s >= '0' && *s <= '9') {
++                      n = *s++ - '0';
++              } else {
++                      cnt = 0;
++                      break;
++              }
++
++              if (cnt & BIT_0)
++                      *bp++ |= n;
++              else
++                      *bp = n << 4;
++      }
++      /* fixme(dg) Need to swap data little endian */
++
++      LEAVE(__func__);
++
++      return (cnt / 2);
++}
++
++/*
++ * qla2x00_get_prop_xstr
++ *      Get a string property value for the specified property name and
++ *      convert from the property string found in the configuration file,
++ *      which are ASCII characters representing nibbles, 2 characters represent
++ *      the hexdecimal value for a byte in the byte array.
++ *      The byte array is initialized to zero.
++ *      The resulting converted value is in big endian format (MSB at byte0).
++ *
++ * Input:
++ *      ha = adapter state pointer.
++ *      propname = property name pointer.
++ *      propval  = pointer where to store converted property val.
++ *      size = max or expected size of 'propval' array.
++ *
++ * Returns:
++ *      0 = empty value string or invalid character in string
++ *      >0 = count of characters converted
++ *      -1 = property not found
++ *
++ * Context:
++ *      Kernel context.
++ */
++int
++qla2x00_get_prop_xstr(scsi_qla_host_t *ha, 
++              char *propname, uint8_t *propval, int size) 
++{
++      char            *propstr;
++      int             rval = -1;
++      static char     buf[LINESIZE];
++
++      ENTER(__func__);
++
++      /* Get the requested property string */
++      rval = qla2x00_find_propname(ha, propname, buf, ha->cmdline, size*2);
++      DEBUG3(printk("%s(): Ret rval from find propname = %d\n",
++                      __func__,
++                      rval);)
++
++      propstr = &buf[0];
++      if (*propstr == '=')
++              propstr++;   /* ignore equal sign */
++
++      if (rval == 0) {  /* not found */
++              LEAVE(__func__);
++              return (-1);
++      }
++
++      rval = qla2x00_bstr_to_hex(propstr, (uint8_t *)propval, size);
++      if (rval == 0) {
++              /* Invalid character in value string */
++              printk(KERN_INFO
++                      "%s(): %s Invalid hex string for property\n",
++                      __func__,
++                      propname);
++              printk(KERN_INFO
++                      " Invalid string - %s\n", 
++                      propstr);
++      }
++
++      LEAVE(__func__);
++
++      return (rval);
++}
++
++/*
++ * qla2x00_find_propname
++ *    Get property in database.
++ *
++ * Input:
++ *    ha = adapter structure pointer.
++ *      db = pointer to database
++ *      propstr = pointer to dest array for string
++ *    propname = name of property to search for.
++ *    siz = size of property
++ *
++ * Returns:
++ *    0 = no property
++ *      size = index of property
++ *
++ * Context:
++ *    Kernel context.
++ */
++static uint8_t
++qla2x00_find_propname(scsi_qla_host_t *ha, 
++                      char *propname, char *propstr, 
++                      char *db, int siz) 
++{
++      char    *cp;
++
++      /* find the specified string */
++      if (db) {
++              /* find the property name */
++              if ((cp = strstr(db,propname)) != NULL) {
++                      while ((*cp)  && *cp != '=')
++                              cp++;
++                      if (*cp) {
++                              strncpy(propstr, cp, siz+1);
++                              propstr[siz+1] = '\0';
++                              DEBUG(printk("qla2x00_find_propname: found "
++                                              "property = {%s}\n",
++                                              propstr);)
++                              return (siz);   /* match */
++                      }
++              }
++      }
++
++      return (0);
++}
++
++
++/*
++ * qla2x00_get_prop_16chars
++ *    Get an 8-byte property value for the specified property name by
++ *      converting from the property string found in the configuration file.
++ *      The resulting converted value is in big endian format (MSB at byte0).
++ *
++ * Input:
++ *    ha = adapter state pointer.
++ *    propname = property name pointer.
++ *    propval  = pointer to location for the converted property val.
++ *      db = pointer to database
++ *
++ * Returns:
++ *    0 = value returned successfully.
++ *
++ * Context:
++ *    Kernel context.
++ */
++static int
++qla2x00_get_prop_16chars(scsi_qla_host_t *ha,
++                              char *propname, char *propval, char *db) 
++{
++      char            *propstr;
++      int             i, k;
++      int             rval;
++      uint8_t         nval;
++      uint8_t         *pchar;
++      uint8_t         *ret_byte;
++      uint8_t         *tmp_byte;
++      uint8_t         *retval = (uint8_t*)propval;
++      uint8_t         tmpval[8] = {0, 0, 0, 0, 0, 0, 0, 0};
++      uint16_t        max_byte_cnt = 8; /* 16 chars = 8 bytes */
++      uint16_t        max_strlen = 16;
++      static char     buf[LINESIZE];
++
++      rval = qla2x00_find_propname(ha, propname, buf, db, max_strlen);
++
++      propstr = &buf[0];
++      if (*propstr == '=')
++              propstr++;   /* ignore equal sign */
++
++      if (rval == 0) {
++              return (1);
++      }
++
++      /* Convert string to numbers. */
++      pchar = (uint8_t *)propstr;
++      tmp_byte = (uint8_t *)tmpval;
++
++      rval = 0;
++      for (i = 0; i < max_strlen; i++) {
++              /*
++               * Check for invalid character, two at a time,
++               * then convert them starting with first byte.
++               */
++
++              if ((pchar[i] >= '0') && (pchar[i] <= '9')) {
++                      nval = pchar[i] - '0';
++              } else if ((pchar[i] >= 'A') && (pchar[i] <= 'F')) {
++                      nval = pchar[i] - 'A' + 10;
++              } else if ((pchar[i] >= 'a') && (pchar[i] <= 'f')) {
++                      nval = pchar[i] - 'a' + 10;
++              } else {
++                      /* invalid character */
++                      rval = 1;
++                      break;
++              }
++
++              if (i & BIT_0) {
++                      *tmp_byte = *tmp_byte | nval;
++                      tmp_byte++;
++              } else {
++                      *tmp_byte = *tmp_byte | nval << 4;
++              }
++      }
++
++      if (rval != 0) {
++              /* Encountered invalid character. */
++              return (rval);
++      }
++
++      /* Copy over the converted value. */
++      ret_byte = retval;
++      tmp_byte = tmpval;
++
++      i = max_byte_cnt;
++      k = 0;
++      while (i--) {
++              *ret_byte++ = *tmp_byte++;
++      }
++
++      /* big endian retval[0]; */
++      return (0);
++}
++
++/*
++* qla2x00_get_properties
++*     Find all properties for the specified adapeter in
++*      command line.
++*
++* Input:
++*     ha = adapter block pointer.
++*     cmdline = pointer to command line string
++*
++* Context:
++*     Kernel context.
++*/
++static void
++qla2x00_get_properties(scsi_qla_host_t *ha, char *cmdline) 
++{
++      static char     propbuf[LINESIZE];
++      uint8_t         tmp_name[8];
++
++      /* Adapter FC node names. */
++      sprintf(propbuf, "scsi-qla%d-adapter-node", (int) ha->instance);
++      qla2x00_get_prop_16chars (ha, 
++                      propbuf,
++                      (uint8_t *)(&ha->init_cb->node_name), 
++                      cmdline);
++
++      sprintf(propbuf, "scsi-qla%d-adapter-port", (int) ha->instance);
++
++      /* DG 04/07 check portname of adapter */
++      qla2x00_get_prop_16chars (ha, 
++                      propbuf,
++                      tmp_name, 
++                      cmdline);
++      if (memcmp(ha->init_cb->port_name, tmp_name, 8) != 0) {
++              /*
++               * Adapter port name is WWN, and cannot be changed.
++               * Inform users of the mismatch, then just continue driver
++               * loading using the original adapter port name in NVRAM.
++               */
++              printk(KERN_WARNING
++                      "qla2x00: qla%ld found mismatch in "
++                      "adapter port names.\n",
++                      ha->instance);
++              printk(KERN_INFO
++                      "       qla%ld port name found in NVRAM "
++                      "-> %02x%02x%02x%02x%02x%02x%02x%02x\n",
++                      ha->instance,
++                      ha->init_cb->port_name[0],
++                      ha->init_cb->port_name[1],
++                      ha->init_cb->port_name[2],
++                      ha->init_cb->port_name[3],
++                      ha->init_cb->port_name[4],
++                      ha->init_cb->port_name[5],
++                      ha->init_cb->port_name[6],
++                      ha->init_cb->port_name[7]);
++              printk(KERN_INFO
++                      "      qla%ld port name found on command line "
++                      "-> %02x%02x%02x%02x%02x%02x%02x%02x\n",
++                      ha->instance,
++                      tmp_name[0],
++                      tmp_name[1],
++                      tmp_name[2],
++                      tmp_name[3],
++                      tmp_name[4],
++                      tmp_name[5],
++                      tmp_name[6],
++                      tmp_name[7]);
++              printk(KERN_INFO
++                      "      Using port name from NVRAM.\n");
++      }
++
++      qla2x00_cfg_persistent_binding(ha);
++}
++
++/*
++ * qla2x00_cfg_persistent_binding
++ *    Get driver configuration file target persistent binding entries.
++ *
++ * Input:
++ *    ha = adapter block pointer.
++ *
++ * Context:
++ *    Kernel context.
++ */
++static void
++qla2x00_cfg_persistent_binding(scsi_qla_host_t *ha) 
++{
++      int             rval;
++      static char     propbuf[LINESIZE];
++      uint16_t        tgt;
++      uint16_t        dev_no = 0; /* not used */
++      char            *cmdline = ha->cmdline;
++      port_id_t       d_id, *pd_id;
++      uint8_t         portid[3];
++      uint8_t         node_name[8], *pnn;
++      uint8_t         port_name[8], *ppn;
++      os_tgt_t        *tq;
++
++      ENTER(__func__);
++
++      /* FC name for devices */
++      for (tgt = 0; tgt < MAX_FIBRE_DEVICES; tgt++) {
++
++              /*
++               * Retrive as much information as possible (PN/PID/NN).
++               *
++               * Based on binding type, skip incomplete entries.
++               */
++              ppn = port_name;
++              sprintf(propbuf, "scsi-qla%d-tgt-%d-di-%d-port",
++                              (int)ha->instance, tgt, dev_no);
++              rval = qla2x00_get_prop_16chars(ha, propbuf, ppn, cmdline);
++              if (rval != 0)
++                      ppn = NULL;
++              if (ha->binding_type == BIND_BY_PORT_NAME && rval != 0)
++                      continue;
++
++              pd_id = &d_id;
++              sprintf(propbuf, "scsi-qla%d-tgt-%d-di-%d-pid",
++                              (int)ha->instance, tgt, dev_no);
++              rval = qla2x00_get_prop_xstr(ha,
++                              propbuf, portid, sizeof(portid));
++              if (rval == -1 || rval != sizeof(portid))
++                      pd_id = NULL;
++              if (ha->binding_type == BIND_BY_PORT_ID &&
++                      (rval == -1 || rval != sizeof(portid)))
++                      continue;
++
++              pnn = node_name;
++              sprintf(propbuf, "scsi-qla%d-tgt-%d-di-%d-node",
++                              (int)ha->instance, tgt, dev_no);
++              rval = qla2x00_get_prop_16chars(ha, propbuf, pnn, cmdline);
++              if (rval != 0)
++                      pnn = NULL;
++              if (ha->binding_type == BIND_BY_NODE_NAME && rval != 0)
++                      continue;
++
++              tq = qla2x00_tgt_alloc(ha, tgt);
++              if (tq == NULL) {
++                      printk(KERN_WARNING
++                              "%s(): Unable to allocate memory for target\n",
++                              __func__);
++                      continue;
++              }
++
++              ha->fc_db[tgt].loop_id = PORT_AVAILABLE;
++              ha->fc_db[tgt].flag = 0;  /* v2.19.05b3 */
++              ha->fc_db[tgt].flag |= DEV_CONFIGURED;
++
++              if (ppn != NULL) {
++                      memcpy(tq->port_name, ppn, WWN_SIZE);
++                      memcpy(ha->fc_db[tgt].wwn, ppn, WWN_SIZE);
++              }
++              if (pd_id != NULL) {
++                      /*
++                       * The portid is read in big-endian format, convert 
++                       * before updating information
++                       */
++                      pd_id->r.d_id[0] = portid[2];
++                      pd_id->r.d_id[1] = portid[1];
++                      pd_id->r.d_id[2] = portid[0];
++                      tq->d_id.b24 = pd_id->b24;
++                      ha->fc_db[tgt].d_id.b24 = pd_id->b24;
++              }
++              if (pnn != NULL) {
++                      memcpy(tq->node_name, pnn, WWN_SIZE);
++                      memcpy(ha->fc_db[tgt].name, pnn, WWN_SIZE);
++              }
++
++              DEBUG(printk("Target %03d - configured by user: ",tgt);)
++              switch (ha->binding_type) {
++                      case BIND_BY_PORT_NAME:
++                              DEBUG(printk("tgt-%03d="
++                                      "%02x%02x%02x%02x%02x%02x%02x%02x\n",
++                                      tgt,
++                                      ppn[0], ppn[1], ppn[2], ppn[3],
++                                      ppn[4], ppn[5], ppn[6], ppn[7]);)
++                              break;
++
++                      case BIND_BY_PORT_ID:
++                              DEBUG(printk("tgt-%03d=%02x%02x%02x\n",
++                                      tgt,
++                                      pd_id->b.domain,
++                                      pd_id->b.area,
++                                      pd_id->b.al_pa));
++                              break;
++
++                      case BIND_BY_NODE_NAME:
++                              DEBUG(printk("tgt-%03d="
++                                      "%02x%02x%02x%02x%02x%02x%02x%02x\n",
++                                      tgt,
++                                      pnn[0], pnn[1], pnn[2], pnn[3],
++                                      pnn[4], pnn[5], pnn[6], pnn[7]);)
++                              break;
++              }
++              /* look for VSA */
++#if VSA
++              qla2x00_get_vsa_opt_from_config(ha, tgt, dev_no);
++#endif
++
++      }
++
++      LEAVE(__func__);
++}
++
++/*
++*  qla2x00_abort_isp
++*      Resets ISP and aborts all outstanding commands.
++*
++* Input:
++*      ha           = adapter block pointer.
++*
++* Returns:
++*      0 = success
++*/
++uint8_t
++qla2x00_abort_isp(scsi_qla_host_t *ha, uint8_t flag)
++{
++      unsigned long flags = 0;
++      uint16_t       cnt;
++      srb_t          *sp;
++      uint8_t        status = 0;
++
++      ENTER("qla2x00_abort_isp");
++
++      if (ha->flags.online) {
++              ha->flags.online = FALSE;
++              clear_bit(COMMAND_WAIT_NEEDED, &ha->dpc_flags);
++              clear_bit(COMMAND_WAIT_ACTIVE, &ha->dpc_flags);
++              clear_bit(ISP_ABORT_NEEDED, &ha->dpc_flags);
++              qla2x00_stats.ispAbort++;
++              ha->total_isp_aborts++;  /* used by ioctl */
++              ha->sns_retry_cnt = 0;
++
++              printk(KERN_INFO
++                  "scsi(%ld): Performing ISP error recovery - ha= %p.\n",
++                  ha->host_no, ha);
++              qla2x00_reset_chip(ha);
++
++              if (ha->loop_state != LOOP_DOWN) {
++                      ha->loop_state = LOOP_DOWN;
++                      atomic_set(&ha->loop_down_timer, LOOP_DOWN_TIME);
++                      qla2x00_mark_all_devices_lost(ha);
++              }
++
++#if defined(FC_IP_SUPPORT)
++              /* Return all IP send packets */
++              for (cnt = 0; cnt < MAX_SEND_PACKETS; cnt++) {
++                      if (ha->active_scb_q[cnt] != NULL) {
++                              /* Via IP callback */
++                              (*ha->send_completion_routine)
++                                      (ha->active_scb_q[cnt]);
++
++                              ha->active_scb_q[cnt] = NULL;
++                      }
++              }
++#endif
++
++              spin_lock_irqsave(&ha->hardware_lock, flags);
++              /* Requeue all commands in outstanding command list. */
++              for (cnt = 1; cnt < MAX_OUTSTANDING_COMMANDS; cnt++) {
++                      sp = ha->outstanding_cmds[cnt];
++                      if (sp) {
++                              ha->outstanding_cmds[cnt] = 0;
++                              if( ha->actthreads )
++                                      ha->actthreads--;
++                              sp->lun_queue->out_cnt--;
++#if defined(IOCB_THROLLE_USAGE)
++                              ha->iocb_cnt -= sp->iocb_cnt;
++#endif
++                              
++                              sp->flags = 0;
++
++                              /* 
++                               * We need to send the command back to OS now 
++                               * if returning RESET status for kernel's 
++                               * error handling.
++                               */
++                              if (flag == 0) {
++                                      CMD_RESULT(sp->cmd) = DID_BUS_BUSY << 16;
++                              } else {
++                                      CMD_RESULT(sp->cmd) = DID_RESET << 16;
++                              }
++                              CMD_HANDLE(sp->cmd) = (unsigned char *) NULL;
++                              add_to_done_queue(ha, sp);
++                      }
++              }
++
++              spin_unlock_irqrestore(&ha->hardware_lock, flags);
++
++#if defined(ISP2100)
++              qla2100_nvram_config(ha);
++#else
++              qla2x00_nvram_config(ha);
++#endif
++
++              if (!qla2x00_restart_isp(ha)) {
++                      clear_bit(RESET_MARKER_NEEDED, &ha->dpc_flags);
++
++                      if (!atomic_read(&ha->loop_down_timer)) {
++                              /*
++                               * Issue marker command only when we are going
++                               * to start the I/O .
++                               */
++                              ha->marker_needed = 1;
++                      }
++
++                      ha->flags.online = TRUE;
++
++#if defined(FC_IP_SUPPORT)
++                      /* Reenable IP support */
++                      if (ha->flags.enable_ip) {
++                              set_bit(REGISTER_FC4_NEEDED, &ha->dpc_flags);
++                              qla2x00_ip_initialize(ha);
++                      }
++#endif
++                      /* Enable ISP interrupts. */
++                      qla2x00_enable_intrs(ha);
++
++                      /* v2.19.5b6 Return all commands */
++                      qla2x00_abort_queues(ha, TRUE);
++
++                      /* Restart queues that may have been stopped. */
++                      qla2x00_restart_queues(ha,TRUE);
++                      ha->isp_abort_cnt = 0; 
++                      clear_bit(ISP_ABORT_RETRY, &ha->dpc_flags);
++              } else {        /* failed the ISP abort */
++                      ha->flags.online = TRUE;
++                      if( test_bit(ISP_ABORT_RETRY, &ha->dpc_flags) ){
++                              if( ha->isp_abort_cnt == 0 ){
++                                      printk(KERN_WARNING
++                                      "qla2x00(%ld): ISP error recovery failed - "
++                                      "board disabled\n",ha->host_no);
++                                      /* 
++                                       * The next call disables the board
++                                       * completely.
++                                       */
++                                      qla2x00_reset_adapter(ha);
++                                      qla2x00_abort_queues(ha, FALSE);
++                                      ha->flags.online = TRUE;
++                                      clear_bit(ISP_ABORT_RETRY, &ha->dpc_flags);
++                                      status = 0;
++                              } else { /* schedule another ISP abort */
++                                      ha->isp_abort_cnt--;
++                                      DEBUG(printk("qla%ld: ISP abort - retry remainning %d\n",
++                                      ha->host_no, 
++                                      ha->isp_abort_cnt);)
++                                      status = 1;
++                              }
++                      } else {
++                              ha->isp_abort_cnt = MAX_RETRIES_OF_ISP_ABORT;
++                              DEBUG(printk( "qla2x00(%ld): ISP error recovery - "
++                              "retrying (%d) more times\n",ha->host_no,
++                              ha->isp_abort_cnt);)
++                              set_bit(ISP_ABORT_RETRY, &ha->dpc_flags);
++                              status = 1;
++                      }
++              }
++                     
++      }
++
++      if (status) {
++              printk(KERN_INFO
++                      "qla2x00_abort_isp(%ld): **** FAILED ****\n",
++                      ha->host_no);
++      } else {
++              DEBUG(printk(KERN_INFO
++                              "qla2x00_abort_isp(%ld): exiting.\n",
++                              ha->host_no);)
++      }
++
++      return(status);
++}
++
++/*
++*  qla2x00_restart_isp
++*      restarts the ISP after a reset
++*
++* Input:
++*      ha = adapter block pointer.
++*
++* Returns:
++*      0 = success
++*/
++static int
++qla2x00_restart_isp(scsi_qla_host_t *ha)
++{
++      uint8_t         status = 0;
++#if defined(ISP2300)
++      device_reg_t    *reg;
++      unsigned long   flags = 0;
++#endif
++
++      /* If firmware needs to be loaded */
++      if (qla2x00_isp_firmware(ha)) {
++              ha->flags.online = FALSE;
++              if (!(status = qla2x00_chip_diag(ha))) {
++#if defined(ISP2300)
++                      reg = ha->iobase;
++                      spin_lock_irqsave(&ha->hardware_lock, flags);
++                      /* Disable SRAM, Instruction RAM and GP RAM parity. */
++                      WRT_REG_WORD(&reg->hccr, (HCCR_ENABLE_PARITY + 0x0));
++                      spin_unlock_irqrestore(&ha->hardware_lock, flags);
++#endif
++                      status = qla2x00_setup_chip(ha);
++#if defined(ISP2300)
++                      spin_lock_irqsave(&ha->hardware_lock, flags);
++ 
++                      /* Enable proper parity */
++                      if (ha->pdev->device == QLA2312_DEVICE_ID ||
++                          ha->pdev->device == QLA2322_DEVICE_ID)
++                              /* SRAM, Instruction RAM and GP RAM parity */
++                              WRT_REG_WORD(&reg->hccr,
++                                  (HCCR_ENABLE_PARITY + 0x7));
++                      else
++                              /* SRAM parity */
++                              WRT_REG_WORD(&reg->hccr,
++                                  (HCCR_ENABLE_PARITY + 0x1));
++
++                      spin_unlock_irqrestore(&ha->hardware_lock, flags);
++#endif
++              }
++      }
++      if (!status && !(status = qla2x00_init_rings(ha))) {
++              clear_bit(RESET_MARKER_NEEDED, &ha->dpc_flags);
++              clear_bit(COMMAND_WAIT_NEEDED, &ha->dpc_flags);
++              if (!(status = qla2x00_fw_ready(ha))) {
++                      DEBUG(printk("%s(): Start configure loop, "
++                                      "status = %d\n",
++                                      __func__,
++                                      status);)
++                      ha->flags.online = TRUE;
++                      do {
++                              clear_bit(LOOP_RESYNC_NEEDED, &ha->dpc_flags);
++                              qla2x00_configure_loop(ha);
++                      } while (!atomic_read(&ha->loop_down_timer) &&
++                              !(test_bit(ISP_ABORT_NEEDED, &ha->dpc_flags)) &&
++                              (test_bit(LOOP_RESYNC_NEEDED, &ha->dpc_flags)));
++              }
++
++              /* if no cable then assume it's good */
++              if ((ha->device_flags & DFLG_NO_CABLE)) 
++                      status = 0;
++
++              DEBUG(printk("%s(): Configure loop done, status = 0x%x\n",
++                              __func__,
++                              status);)
++      }
++      return (status);
++}
++
++/*
++* qla2x00_reset_adapter
++*      Reset adapter.
++*
++* Input:
++*      ha = adapter block pointer.
++*/
++static void
++qla2x00_reset_adapter(scsi_qla_host_t *ha)
++{
++      unsigned long flags = 0;
++      device_reg_t *reg = ha->iobase;
++
++      ENTER(__func__);
++
++      ha->flags.online = FALSE;
++      qla2x00_disable_intrs(ha);
++      /* Reset RISC processor. */
++      spin_lock_irqsave(&ha->hardware_lock, flags);
++      WRT_REG_WORD(&reg->hccr, HCCR_RESET_RISC);
++      WRT_REG_WORD(&reg->hccr, HCCR_RELEASE_RISC);
++      spin_unlock_irqrestore(&ha->hardware_lock, flags);
++
++      LEAVE(__func__);
++}
+--- /dev/null  Thu Apr 11 07:25:15 2002
++++ linux-2.5.73-n9560/drivers/scsi/qla2xxx/qla_inline.h       Thu Jul  3 15:34:42 2003
+@@ -0,0 +1,375 @@
++/*
++ *                  QLOGIC LINUX SOFTWARE
++ *
++ * QLogic ISP2x00 device driver for Linux 2.5.x
++ * Copyright (C) 2003 Qlogic Corporation
++ * (www.qlogic.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, 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.
++ *
++ */
++
++
++static __inline__ uint16_t qla2x00_debounce_register(volatile uint16_t *);
++/*
++ * qla2x00_debounce_register
++ *      Debounce register.
++ *
++ * Input:
++ *      port = register address.
++ *
++ * Returns:
++ *      register value.
++ */
++static __inline__ uint16_t
++qla2x00_debounce_register(volatile uint16_t *addr) 
++{
++      volatile uint16_t first;
++      volatile uint16_t second;
++
++      do {
++              first = RD_REG_WORD(addr);
++              barrier();
++              second = RD_REG_WORD(addr);
++      } while (first != second);
++
++      return (first);
++}
++
++static __inline__ void qla2x00_config_dma_addressing(scsi_qla_host_t *ha);
++
++/**
++ * qla2x00_config_dma_addressing() - Configure OS DMA addressing method.
++ * @ha: HA context
++ *
++ * At exit, the @ha's flags.enable_64bit_addressing set to indicated
++ * supported addressing method.
++ */
++static __inline__ void
++qla2x00_config_dma_addressing(scsi_qla_host_t *ha)
++{
++      /*
++       * Given the two variants pci_set_dma_mask(), allow the compiler to
++       * assist in setting the proper dma mask.
++       */
++      if (sizeof(dma_addr_t) > 4) {
++              ha->flags.enable_64bit_addressing = 1;
++              /* Update our PCI device dma_mask for full 64 bits */
++              if (pci_set_dma_mask(ha->pdev, 0xffffffffffffffffULL)) {
++                      printk("scsi(%ld): Failed to set 64 bit PCI DMA mask, "
++                          "using 32 bits\n",
++                          ha->host_no);
++                      ha->flags.enable_64bit_addressing = 0;
++                      pci_set_dma_mask(ha->pdev, 0xffffffff);
++              }
++      }
++      else {
++              ha->flags.enable_64bit_addressing = 0;
++              pci_set_dma_mask(ha->pdev, 0xffffffff);
++      }
++      printk(KERN_INFO
++          "scsi(%ld): %d Bit DMA Addressing Enabled.\n",
++          ha->host_no,
++          (ha->flags.enable_64bit_addressing ? 64 : 32));
++}
++
++
++static __inline__ int qla2x00_normalize_dma_addr(
++    dma_addr_t *e_addr,  uint32_t *e_len,
++    dma_addr_t *ne_addr, uint32_t *ne_len);
++
++/**
++ * qla2x00_normalize_dma_addr() - Normalize an DMA address.
++ * @e_addr: Raw DMA address
++ * @e_len: Raw DMA length
++ * @ne_addr: Normalized second DMA address
++ * @ne_len: Normalized second DMA length
++ *
++ * If the address does not span a 4GB page boundary, the contents of @ne_addr
++ * and @ne_len are undefined.  @e_len is updated to reflect a normalization.
++ *
++ * Example:
++ *
++ *    ffffabc0ffffeeee        (e_addr) start of DMA address
++ *    0000000020000000        (e_len)  length of DMA transfer
++ *    ffffabc11fffeeed        end of DMA transfer
++ *
++ * Is the 4GB boundary crossed?
++ *
++ *    ffffabc0ffffeeee        (e_addr)
++ *    ffffabc11fffeeed        (e_addr + e_len - 1)
++ *    00000001e0000003        ((e_addr ^ (e_addr + e_len - 1))
++ *    0000000100000000        ((e_addr ^ (e_addr + e_len - 1)) & ~(0xffffffff)
++ *
++ * Compute start of second DMA segment:
++ *
++ *    ffffabc0ffffeeee        (e_addr)
++ *    ffffabc1ffffeeee        (0x100000000 + e_addr)
++ *    ffffabc100000000        (0x100000000 + e_addr) & ~(0xffffffff)
++ *    ffffabc100000000        (ne_addr)
++ *    
++ * Compute length of second DMA segment:
++ *
++ *    00000000ffffeeee        (e_addr & 0xffffffff)
++ *    0000000000001112        (0x100000000 - (e_addr & 0xffffffff))
++ *    000000001fffeeee        (e_len - (0x100000000 - (e_addr & 0xffffffff))
++ *    000000001fffeeee        (ne_len)
++ *
++ * Adjust length of first DMA segment
++ *
++ *    0000000020000000        (e_len)
++ *    0000000000001112        (e_len - ne_len)
++ *    0000000000001112        (e_len)
++ *
++ * Returns non-zero if the specified address was normalized, else zero.
++ */
++static __inline__ int
++qla2x00_normalize_dma_addr(
++    dma_addr_t *e_addr,  uint32_t *e_len,
++    dma_addr_t *ne_addr, uint32_t *ne_len)
++{
++      int normalized;
++
++      normalized = 0;
++      if ((*e_addr ^ (*e_addr + *e_len - 1)) & ~(0xFFFFFFFFULL)) {
++              /* Compute normalized crossed address and len */
++              *ne_addr = (0x100000000ULL + *e_addr) & ~(0xFFFFFFFFULL);
++              *ne_len = *e_len - (0x100000000ULL - (*e_addr & 0xFFFFFFFFULL));
++              *e_len -= *ne_len;
++
++              normalized++;
++      }
++      return (normalized);
++}
++
++static __inline__ void qla2x00_poll(scsi_qla_host_t *);
++static inline void 
++qla2x00_poll(scsi_qla_host_t *ha)
++{
++      qla2x00_intr_handler(0, ha, NULL);
++}
++
++
++static __inline__ void qla2x00_enable_intrs(scsi_qla_host_t *);
++static __inline__ void qla2x00_disable_intrs(scsi_qla_host_t *);
++
++static inline void 
++qla2x00_enable_intrs(scsi_qla_host_t *ha)
++{
++      unsigned long flags = 0;
++      device_reg_t *reg;
++
++      spin_lock_irqsave(&ha->hardware_lock, flags);
++      reg = ha->iobase;
++      ha->interrupts_on = 1;
++      /* enable risc and host interrupts */
++      WRT_REG_WORD(&reg->ictrl, ICR_EN_INT | ICR_EN_RISC);
++      CACHE_FLUSH(&reg->ictrl);
++      spin_unlock_irqrestore(&ha->hardware_lock, flags);
++
++}
++
++static inline void 
++qla2x00_disable_intrs(scsi_qla_host_t *ha)
++{
++      unsigned long flags = 0;
++      device_reg_t *reg;
++
++      spin_lock_irqsave(&ha->hardware_lock, flags);
++      reg = ha->iobase;
++      ha->interrupts_on = 0;
++      /* disable risc and host interrupts */
++      WRT_REG_WORD(&reg->ictrl, 0);
++      CACHE_FLUSH(&reg->ictrl);
++      spin_unlock_irqrestore(&ha->hardware_lock, flags);
++}
++
++
++static __inline__ int qla2x00_is_wwn_zero(uint8_t *);
++
++/*
++ * qla2x00_is_wwn_zero - Check for zero node name
++ *
++ * Input:
++ *      wwn = Pointer to WW name to check
++ *
++ * Returns:
++ *      TRUE if name is 0 else FALSE
++ *
++ * Context:
++ *      Kernel context.
++ */
++static __inline__ int
++qla2x00_is_wwn_zero(uint8_t *wwn)
++{
++      int cnt;
++
++      for (cnt = 0; cnt < WWN_SIZE ; cnt++, wwn++) {
++              if (*wwn != 0)
++                      break;
++      }
++      /* if zero return TRUE */
++      if (cnt == WWN_SIZE)
++              return (1);
++      else
++              return (0);
++}
++
++static __inline__ uint8_t
++qla2x00_suspend_lun(scsi_qla_host_t *, os_lun_t *, int, int);
++static __inline__ uint8_t
++qla2x00_delay_lun(scsi_qla_host_t *, os_lun_t *, int);
++
++static __inline__ uint8_t
++qla2x00_suspend_lun(scsi_qla_host_t *ha, os_lun_t *lq, int time, int count)
++{
++      return (__qla2x00_suspend_lun(ha, lq, time, count, 0));
++}
++
++static __inline__ uint8_t
++qla2x00_delay_lun(scsi_qla_host_t *ha, os_lun_t *lq, int time)
++{
++      return (__qla2x00_suspend_lun(ha, lq, time, 1, 1));
++}
++
++
++
++static __inline__ void qla2x00_chg_endian(uint8_t *, size_t);
++/*
++ * qla2x00_chg_endian
++ *    Change endianess of byte array.
++ *
++ * Input:
++ *    buf = array pointer.
++ *    size = size of array in bytes.
++ *
++ * Context:
++ *    Kernel context.
++ */
++static __inline__ void
++qla2x00_chg_endian(uint8_t *buf, size_t size) 
++{
++      uint8_t byte;
++      size_t cnt1;
++      size_t cnt;
++
++      cnt1 = size - 1;
++      for (cnt = 0; cnt < size / 2; cnt++) {
++              byte = buf[cnt1];
++              buf[cnt1] = buf[cnt];
++              buf[cnt] = byte;
++              cnt1--;
++      }
++}
++
++static __inline__ void qla2x00_check_fabric_devices(scsi_qla_host_t *);
++/*
++ * This routine will wait for fabric devices for
++ * the reset delay.
++ */
++static __inline__ void qla2x00_check_fabric_devices(scsi_qla_host_t *ha) 
++{
++      uint16_t        fw_state;
++
++      qla2x00_get_firmware_state(ha, &fw_state);
++}
++
++static inline void qla2x00_filter_command(scsi_qla_host_t *ha, srb_t *sp);
++static inline void
++qla2x00_filter_command(scsi_qla_host_t *ha, srb_t *sp)
++{
++      Scsi_Cmnd       *cp = sp->cmd;
++      uint8_t         *strp;
++
++      /*
++       * Special case considertaion on an Inquiry command (0x12) for Lun 0,
++       * device responds with no devices (0x7F), then Linux will not scan
++       * further Luns. While reporting that some device exists on Lun 0 Linux
++       * will scan all devices on this target.
++       */
++      if (qla2xenbinq && (cp->cmnd[0] == INQUIRY) && (SCSI_LUN_32(cp) == 0)) {
++              strp = (uint8_t *)cp->request_buffer;
++              if (*strp == 0x7f) {
++                      /* Make lun unassigned and processor type */
++                      *strp = 0x23;
++              }
++      }
++}
++
++static __inline__ void * qla2x00_kmem_zalloc(int, int, int);
++/*
++ * qla2x00_kmem_zalloc
++ * Allocate and zero out the block of memory
++ */
++static __inline__ void *
++qla2x00_kmem_zalloc(int siz, int code, int id) 
++{
++      uint8_t *bp;
++
++      if ((bp = kmalloc(siz, code)) != NULL) {
++              memset(bp, 0, siz);
++      }
++#if QL_TRACE_MEMORY
++      if (mem_trace_ptr == 1000)
++              mem_trace_ptr = 0;
++      mem_trace[mem_trace_ptr] = (u_long ) bp;
++      mem_id[mem_trace_ptr++] = (u_long ) id;
++#endif
++
++      return ((void *)bp);
++}
++
++
++static __inline__ ms_iocb_entry_t *
++qla2x00_prep_ms_iocb(scsi_qla_host_t *, uint32_t, uint32_t);
++/**
++ * qla2x00_prep_ms_iocb() - Prepare common MS IOCB fields for SNS CT query.
++ * @ha: HA context
++ * @req_size: request size in bytes
++ * @rsp_size: response size in bytes
++ *
++ * Returns a pointer to the @ha's ms_iocb.
++ */
++static __inline__ ms_iocb_entry_t *
++qla2x00_prep_ms_iocb(scsi_qla_host_t *ha, uint32_t req_size, uint32_t rsp_size)
++{
++      ms_iocb_entry_t *ms_pkt;
++
++      ms_pkt = ha->ms_iocb;
++      memset(ms_pkt, 0, sizeof(ms_iocb_entry_t));
++
++      ms_pkt->entry_type = MS_IOCB_TYPE;
++      ms_pkt->entry_count = 1;
++#if defined(EXTENDED_IDS)
++      ms_pkt->loop_id = __constant_cpu_to_le16(SIMPLE_NAME_SERVER);
++#else
++      ms_pkt->loop_id = SIMPLE_NAME_SERVER;
++#endif
++      ms_pkt->control_flags =
++          __constant_cpu_to_le16(CF_READ | CF_HEAD_TAG);
++      ms_pkt->timeout = __constant_cpu_to_le16(25);
++      ms_pkt->cmd_dsd_count = __constant_cpu_to_le16(1);
++      ms_pkt->total_dsd_count = __constant_cpu_to_le16(2);
++      ms_pkt->rsp_bytecount = cpu_to_le32(rsp_size);
++      ms_pkt->req_bytecount = cpu_to_le32(req_size);
++
++      ms_pkt->dseg_req_address[0] = cpu_to_le32(LSD(ha->ct_sns_dma));
++      ms_pkt->dseg_req_address[1] = cpu_to_le32(MSD(ha->ct_sns_dma));
++      ms_pkt->dseg_req_length = ms_pkt->req_bytecount;
++
++      ms_pkt->dseg_rsp_address[0] = cpu_to_le32(LSD(ha->ct_sns_dma));
++      ms_pkt->dseg_rsp_address[1] = cpu_to_le32(MSD(ha->ct_sns_dma));
++      ms_pkt->dseg_rsp_length = ms_pkt->rsp_bytecount;
++
++      return (ms_pkt);
++}
++
++
+--- /dev/null  Thu Apr 11 07:25:15 2002
++++ linux-2.5.73-n9560/drivers/scsi/qla2xxx/qla_iocb.c Thu Jul  3 15:34:42 2003
+@@ -0,0 +1,1276 @@
++/******************************************************************************
++ *                  QLOGIC LINUX SOFTWARE
++ *
++ * QLogic ISP2x00 device driver for Linux 2.5.x
++ * Copyright (C) 2003 Qlogic Corporation
++ * (www.qlogic.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, 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 "qla_os.h"
++#include "qla_def.h"
++
++static inline uint16_t qla2x00_get_cmd_direction(Scsi_Cmnd *cmd);
++
++static inline int qla2x00_cmd_build_iocb(scsi_qla_host_t *ha,
++    srb_t *sp, cmd_entry_t *cmd_pkt, uint16_t *req_q_cnt,
++    uint16_t *req_ring_index, request_t **request_ring_ptr,
++    uint16_t *tot_iocbs, uint16_t *tot_dsds);
++
++static inline int qla2x00_cmd_build_64bit_iocbs(scsi_qla_host_t *ha,
++    srb_t *sp, cmd_entry_t *cmd_pkt, uint16_t *req_q_cnt,
++    uint16_t *req_ring_index, request_t **request_ring_ptr,
++    uint16_t *tot_iocbs, uint16_t *tot_dsds);
++
++static inline int qla2x00_cmd_build_32bit_iocbs(scsi_qla_host_t *ha,
++    srb_t *sp, cmd_entry_t *cmd_pkt, uint16_t *req_q_cnt,
++    uint16_t *req_ring_index, request_t **request_ring_ptr,
++    uint16_t *tot_iocbs, uint16_t *tot_dsds);
++
++static inline int qla2x00_check_request_ring(scsi_qla_host_t *ha,
++    uint16_t tot_iocbs, uint16_t req_ring_index, uint16_t *req_q_cnt);
++
++static inline cont_a64_entry_t *qla2x00_prep_a64_cont_packet(
++    scsi_qla_host_t *ha,
++    uint16_t *req_ring_index, request_t **request_ring_ptr);
++
++static inline cont_entry_t *qla2x00_prep_cont_packet(scsi_qla_host_t *ha,
++    uint16_t *req_ring_index, request_t **request_ring_ptr);
++
++
++/* Command queuing function */
++
++/**
++ * qla2x00_get_cmd_direction() - Determine control_flag data direction.
++ * @cmd: SCSI command
++ *
++ * This is ridiculous, the mid-layer applications should perform this step for
++ * all commands sent down through the SCSI layers.  The following is a terrible
++ * hack.
++ *
++ * Returns the proper CF_* direction based on CDB.
++ */
++static inline uint16_t
++qla2x00_get_cmd_direction(Scsi_Cmnd *cmd)
++{
++      uint16_t cflags;
++
++      cflags = 0;
++
++#if defined(SANE_USAGE_OF_CMD_DIRECTION)
++      /* Set transfer direction */
++      if (cmd->sc_data_direction == SCSI_DATA_WRITE)
++              cflags = CF_WRITE;
++      else if (cmd->sc_data_direction == SCSI_DATA_READ)
++              cflags = CF_READ;
++      else {
++              switch (cmd->data_cmnd[0]) {
++              case WRITE_6:
++              case WRITE_10:
++              case WRITE_12:
++              case WRITE_BUFFER:
++              case WRITE_LONG:
++              case WRITE_SAME:
++              case WRITE_VERIFY:
++              case WRITE_VERIFY_12:
++              case FORMAT_UNIT:
++              case SEND_VOLUME_TAG:
++              case MODE_SELECT:
++              case SEND_DIAGNOSTIC:
++              case MODE_SELECT_10:
++                      cflags = CF_WRITE;
++                      break;
++              default:
++                      cflags = CF_READ;
++                      break;
++              }
++      }
++#else
++      switch (cmd->data_cmnd[0]) {
++      case WRITE_6:
++      case WRITE_10:
++      case WRITE_12:
++      case WRITE_BUFFER:
++      case WRITE_LONG:
++      case WRITE_SAME:
++      case WRITE_VERIFY:
++      case WRITE_VERIFY_12:
++      case FORMAT_UNIT:
++      case SEND_VOLUME_TAG:
++      case MODE_SELECT:
++      case SEND_DIAGNOSTIC:
++      case MODE_SELECT_10:
++              cflags = CF_WRITE;
++              break;
++      default:
++              if (cmd->sc_data_direction == SCSI_DATA_WRITE)
++                      cflags = CF_WRITE;
++              else
++                      cflags = CF_READ;
++              break;
++      }
++#endif
++
++      return (cflags);
++}
++
++/**
++ * qla2x00_check_request_ring() - Checks request ring for additional IOCB space.
++ * @ha: HA context
++ * @tot_iocbs: Number of IOCBs required
++ * @req_ring_index: Current index to request ring
++ * @req_q_cnt: Number of free request entries
++ *
++ * Returns non-zero if no additional room available on request ring, else zero.
++ */
++static inline int
++qla2x00_check_request_ring(scsi_qla_host_t *ha,
++    uint16_t tot_iocbs, uint16_t req_ring_index, uint16_t *req_q_cnt)
++{
++      uint16_t        ret;
++      uint16_t        cnt;
++      device_reg_t    *reg;
++
++      reg = ha->iobase;
++
++      /* If room for request in request ring for at least N IOCB */
++      ret = 0;
++      if ((tot_iocbs + 2) >= *req_q_cnt) {
++              /*
++               * Calculate number of free request entries.
++               */
++              cnt = RD_REG_WORD(ISP_REQ_Q_OUT(reg));
++              if (req_ring_index < cnt)
++                      *req_q_cnt = cnt - req_ring_index;
++              else
++                      *req_q_cnt = REQUEST_ENTRY_CNT - (req_ring_index - cnt);
++      }
++      if ((tot_iocbs + 2) >= *req_q_cnt) {
++              DEBUG5(printk("scsi(%ld): in-ptr=%x req_q_cnt=%x "
++                  "tot_iocbs=%x.\n",
++                  ha->host_no, req_ring_index, *req_q_cnt, tot_iocbs));
++
++              ret++;
++      }
++#if defined(IOCB_THROLLE_USAGE)
++      if ((ha->iocb_cnt + tot_iocbs) >= ha->iocb_hiwat) {
++              DEBUG5(printk("%s(): Not Enough IOCBS for request. "
++                  "iocb_cnt=%x, tot_iocbs=%x, hiwat=%x.\n",
++                  __func__, ha->iocb_cnt, tot_iocbs, ha->iocb_hiwat));
++#if defined(IOCB_HIT_RATE)
++              ha->iocb_overflow_cnt++;
++#endif
++              ret++;
++      }
++#endif
++
++      return (ret);
++}
++
++/**
++ * qla2x00_prep_a64_cont_packet() - Initialize an A64 continuation packet.
++ * @ha: HA context
++ * @req_ring_index: Current index to request ring
++ * @req_ring_ptr: Current pointer to request ring
++ *
++ * Returns a pointer to the continuation packet.
++ */
++static inline cont_a64_entry_t *
++qla2x00_prep_a64_cont_packet(scsi_qla_host_t *ha,
++    uint16_t *req_ring_index, request_t **request_ring_ptr)
++{
++      cont_a64_entry_t *cont_pkt;
++
++      /* Adjust ring index. */
++      *req_ring_index += 1;
++      if (*req_ring_index == REQUEST_ENTRY_CNT) {
++              *req_ring_index = 0;
++              *request_ring_ptr = ha->request_ring;
++      } else
++              *request_ring_ptr += 1;
++
++      cont_pkt = (cont_a64_entry_t *)(*request_ring_ptr);
++
++      /* Load packet defaults. */
++      *((uint32_t *)(&cont_pkt->entry_type)) =
++          __constant_cpu_to_le32(CONTINUE_A64_TYPE);
++      //cont_pkt->entry_type = CONTINUE_A64_TYPE;
++      //cont_pkt->entry_count = 0;
++      //cont_pkt->sys_define = (uint8_t)req_ring_index;
++
++      return (cont_pkt);
++}
++
++/**
++ * qla2x00_prep_cont_packet() - Initialize a continuation packet.
++ * @ha: HA context
++ * @req_ring_index: Current index to request ring
++ * @req_ring_ptr: Current pointer to request ring
++ *
++ * Returns a pointer to the continuation packet.
++ */
++static inline cont_entry_t *
++qla2x00_prep_cont_packet(scsi_qla_host_t *ha,
++    uint16_t *req_ring_index, request_t **request_ring_ptr)
++{
++      cont_entry_t *cont_pkt;
++
++      /* Adjust ring index. */
++      *req_ring_index += 1;
++      if (*req_ring_index == REQUEST_ENTRY_CNT) {
++              *req_ring_index = 0;
++              *request_ring_ptr = ha->request_ring;
++      } else
++              *request_ring_ptr += 1;
++
++      cont_pkt = (cont_entry_t *)(*request_ring_ptr);
++
++      /* Load packet defaults. */
++      *((uint32_t *)(&cont_pkt->entry_type)) =
++          __constant_cpu_to_le32(CONTINUE_TYPE);
++      //cont_pkt->entry_type = CONTINUE_TYPE;
++      //cont_pkt->entry_count = 0;
++      //cont_pkt->sys_define = (uint8_t)req_ring_index;
++
++      return (cont_pkt);
++}
++
++static inline int
++qla2x00_cmd_build_64bit_iocbs(scsi_qla_host_t *ha,
++    srb_t *sp,
++    cmd_entry_t *cmd_pkt,
++    uint16_t *req_q_cnt,
++    uint16_t *req_ring_index, request_t **request_ring_ptr,
++    uint16_t *tot_iocbs, uint16_t *tot_dsds)
++{
++      uint16_t        avail_dsds;
++      uint32_t        *cur_dsd;
++      Scsi_Cmnd       *cmd;
++
++      cmd = sp->cmd;
++
++      /* No data transfer */
++      if (cmd->request_bufflen == 0 ||
++          cmd->sc_data_direction == SCSI_DATA_NONE) {
++              cmd_pkt->byte_count = __constant_cpu_to_le32(0);
++              return (QL_STATUS_SUCCESS);
++      }
++
++      cmd_pkt->control_flags |= cpu_to_le16(qla2x00_get_cmd_direction(cmd));
++      sp->dir = cmd_pkt->control_flags &
++          __constant_cpu_to_le16(CF_READ | CF_WRITE);
++
++      /* Two DSDs are available in the command 64 IOCB */
++      avail_dsds = 2;
++      cur_dsd = (uint32_t *)&cmd_pkt->dseg_0_address;
++
++      /* Load data segments */
++      if (cmd->use_sg != 0) {
++              struct  scatterlist *cur_seg;
++              struct  scatterlist *end_seg;
++              int     nseg;
++
++              cur_seg = (struct scatterlist *)cmd->request_buffer;
++              nseg = pci_map_sg(ha->pdev, cur_seg, cmd->use_sg,
++                  scsi_to_pci_dma_dir(cmd->sc_data_direction));
++              end_seg = cur_seg + nseg;
++              while (cur_seg < end_seg) {
++                      int             failed;
++                      dma_addr_t      sle_dma;
++                      uint32_t        sle_len;
++                      dma_addr_t      nml_dma;
++                      uint32_t        nml_len;
++                      uint32_t        normalized;
++                      cont_a64_entry_t *cont_pkt;
++
++                      /* Allocate additional continuation packets? */
++                      if (avail_dsds == 0) {
++                              *tot_iocbs += 1;
++                              failed = qla2x00_check_request_ring(ha,
++                                  *tot_iocbs,
++                                  *req_ring_index,
++                                  req_q_cnt);
++                              if (failed) {
++                                      goto mapped_queuing_error_64;
++                              }
++
++                              cont_pkt = qla2x00_prep_a64_cont_packet(ha,
++                                  req_ring_index,
++                                  request_ring_ptr);
++
++                              cur_dsd = (uint32_t *)&cont_pkt->dseg_0_address;
++                              avail_dsds = 5;
++                      }
++
++                      sle_dma = sg_dma_address(cur_seg);
++                      sle_len = sg_dma_len(cur_seg);
++
++                      normalized = qla2x00_normalize_dma_addr(
++                          &sle_dma, &sle_len,
++                          &nml_dma, &nml_len);
++
++                      /* One entry always consumed */
++                      *cur_dsd++ = cpu_to_le32(LSD(sle_dma));
++                      *cur_dsd++ = cpu_to_le32(MSD(sle_dma));
++                      *cur_dsd++ = cpu_to_le32(sle_len);
++                      *tot_dsds += 1;
++                      avail_dsds--;
++
++                      cur_seg++;
++                      if (!normalized)
++                              continue;
++
++                      /*
++                       * Allocate additional continuation packets?
++                       */
++                      if (avail_dsds == 0) {
++                              *tot_iocbs += 1;
++                              failed = qla2x00_check_request_ring(ha,
++                                  *tot_iocbs,
++                                  *req_ring_index,
++                                  req_q_cnt);
++                              if (failed)
++                                      goto mapped_queuing_error_64;
++
++                              cont_pkt = qla2x00_prep_a64_cont_packet(ha,
++                                  req_ring_index,
++                                  request_ring_ptr);
++
++                              cur_dsd = (uint32_t *)&cont_pkt->dseg_0_address;
++                              avail_dsds = 5;
++                      }
++
++                      *cur_dsd++ = cpu_to_le32(LSD(nml_dma));
++                      *cur_dsd++ = cpu_to_le32(MSD(nml_dma));
++                      *cur_dsd++ = cpu_to_le32(nml_len);
++                      *tot_dsds += 1;
++                      avail_dsds--;
++              }
++      }
++      else {
++              /*
++               * No more than 1 (one) IOCB is needed for this type of 
++               * request, even if the DMA address spans the 4GB page 
++               * boundary.
++               *
++               * @tot_dsds == 1 if non-spanning, else 2
++               */
++              dma_addr_t      req_dma;
++              uint32_t        req_len;
++              dma_addr_t      nml_dma;
++              uint32_t        nml_len;
++              uint32_t        normalized;
++              struct page     *page;
++              unsigned long   offset;
++
++              page = virt_to_page(cmd->request_buffer);
++              offset = ((unsigned long)cmd->request_buffer & ~PAGE_MASK);
++              req_dma = pci_map_page(ha->pdev,
++                  page,
++                  offset,
++                  cmd->request_bufflen,
++                  scsi_to_pci_dma_dir(cmd->sc_data_direction));
++              req_len = cmd->request_bufflen;
++
++              sp->saved_dma_handle = req_dma;
++
++              normalized = qla2x00_normalize_dma_addr(
++                  &req_dma, &req_len,
++                  &nml_dma, &nml_len);
++
++              /* One entry always consumed */
++              *cur_dsd++ = cpu_to_le32(LSD(req_dma));
++              *cur_dsd++ = cpu_to_le32(MSD(req_dma));
++              *cur_dsd++ = cpu_to_le32(req_len);
++              *tot_dsds += 1;
++
++              if (normalized) {
++                      *cur_dsd++ = cpu_to_le32(LSD(nml_dma));
++                      *cur_dsd++ = cpu_to_le32(MSD(nml_dma));
++                      *cur_dsd++ = cpu_to_le32(nml_len);
++                      *tot_dsds += 1;
++              }
++      }
++
++      return (QL_STATUS_SUCCESS);
++
++mapped_queuing_error_64:
++      pci_unmap_sg(ha->pdev, (struct scatterlist *)cmd->request_buffer,
++          cmd->use_sg, scsi_to_pci_dma_dir(cmd->sc_data_direction));
++      return (QL_STATUS_ERROR);
++}
++
++static inline int
++qla2x00_cmd_build_32bit_iocbs(scsi_qla_host_t *ha,
++    srb_t *sp,
++    cmd_entry_t *cmd_pkt,
++    uint16_t *req_q_cnt,
++    uint16_t *req_ring_index, request_t **request_ring_ptr,
++    uint16_t *tot_iocbs, uint16_t *tot_dsds)
++{
++      uint16_t        avail_dsds;
++      uint32_t        *cur_dsd;
++      Scsi_Cmnd       *cmd;
++
++      cmd = sp->cmd;
++
++      /* No data transfer */
++      if (cmd->request_bufflen == 0 ||
++          cmd->sc_data_direction == SCSI_DATA_NONE) {
++              cmd_pkt->byte_count = __constant_cpu_to_le32(0);
++              return (QL_STATUS_SUCCESS);
++      }
++
++      cmd_pkt->control_flags |= cpu_to_le16(qla2x00_get_cmd_direction(cmd));
++      sp->dir = cmd_pkt->control_flags &
++          __constant_cpu_to_le16(CF_READ | CF_WRITE);
++
++      /* Three DSDs are available in the command IOCB */
++      avail_dsds = 3;
++      cur_dsd = (uint32_t *)&cmd_pkt->dseg_0_address;
++
++      /* Load data segments */
++      if (cmd->use_sg != 0) {
++              struct  scatterlist *cur_seg;
++              struct  scatterlist *end_seg;
++              int     nseg;
++
++              cur_seg = (struct scatterlist *)cmd->request_buffer;
++              nseg = pci_map_sg(ha->pdev, cur_seg, cmd->use_sg,
++                  scsi_to_pci_dma_dir(cmd->sc_data_direction));
++              end_seg = cur_seg + nseg;
++
++              while (cur_seg < end_seg) {
++                      int             failed;
++                      dma_addr_t      sle_dma;
++                      uint32_t        sle_len;
++                      cont_entry_t    *cont_pkt;
++
++                      /* Allocate additional continuation packets? */
++                      if (avail_dsds == 0) {
++                              *tot_iocbs += 1;
++                              failed = qla2x00_check_request_ring(ha,
++                                  *tot_iocbs,
++                                  *req_ring_index,
++                                  req_q_cnt);
++                              if (failed) {
++                                      goto mapped_queuing_error_32;
++                              }
++
++                              cont_pkt = qla2x00_prep_cont_packet(ha,
++                                  req_ring_index,
++                                  request_ring_ptr);
++
++                              cur_dsd = (uint32_t *)&cont_pkt->dseg_0_address;
++                              avail_dsds = 7;
++                      }
++
++                      sle_dma = sg_dma_address(cur_seg);
++                      sle_len = sg_dma_len(cur_seg);
++
++                      /* One entry always consumed */
++                      *cur_dsd++ = cpu_to_le32(sle_dma);
++                      *cur_dsd++ = cpu_to_le32(sle_len);
++                      *tot_dsds += 1;
++                      avail_dsds--;
++
++                      cur_seg++;
++              }
++      }
++      else {
++              /*
++               * No more than 1 (one) IOCB is needed for this type of request.
++               */
++              dma_addr_t      req_dma;
++              uint32_t        req_len;
++              struct page     *page;
++              unsigned long   offset;
++
++              page = virt_to_page(cmd->request_buffer);
++              offset = ((unsigned long)cmd->request_buffer & ~PAGE_MASK);
++              req_dma = pci_map_page(ha->pdev,
++                  page,
++                  offset,
++                  cmd->request_bufflen,
++                  scsi_to_pci_dma_dir(cmd->sc_data_direction));
++              req_len = cmd->request_bufflen;
++
++              sp->saved_dma_handle = req_dma;
++
++              /* One entry always consumed */
++              *cur_dsd++ = cpu_to_le32(req_dma);
++              *cur_dsd++ = cpu_to_le32(req_len);
++              *tot_dsds += 1;
++      }
++
++      return (QL_STATUS_SUCCESS);
++
++mapped_queuing_error_32:
++      pci_unmap_sg(ha->pdev, (struct scatterlist *)cmd->request_buffer,
++          cmd->use_sg, scsi_to_pci_dma_dir(cmd->sc_data_direction));
++      return (QL_STATUS_ERROR);
++}
++
++static inline int
++qla2x00_cmd_build_iocb(scsi_qla_host_t *ha,
++    srb_t *sp,
++    cmd_entry_t *cmd_pkt,
++    uint16_t *req_q_cnt,
++    uint16_t *req_ring_index, request_t **request_ring_ptr,
++    uint16_t *tot_iocbs, uint16_t *tot_dsds)
++{
++      int             ret;
++
++      ret = QL_STATUS_ERROR;
++
++      if (ha->flags.enable_64bit_addressing) {
++              *((uint32_t *)(&cmd_pkt->entry_type)) =
++                  __constant_cpu_to_le32(COMMAND_A64_TYPE);
++              //cmd_pkt->entry_type = COMMAND_A64_TYPE;
++              //cmd_pkt->entry_count = (uint8_t)tot_iocbs;
++              //cmd_pkt->sys_define = (uint8_t)ha->req_ring_index;
++              //cmd_pkt->entry_status = 0;
++
++              ret = qla2x00_cmd_build_64bit_iocbs(ha,
++                  sp, cmd_pkt, req_q_cnt, req_ring_index, request_ring_ptr,
++                  tot_iocbs, tot_dsds);
++
++      } else {
++              *((uint32_t *)(&cmd_pkt->entry_type)) =
++                  __constant_cpu_to_le32(COMMAND_TYPE);
++              //cmd_pkt->entry_type = COMMAND_TYPE;
++              //cmd_pkt->entry_count = (uint8_t)tot_iocbs;
++              //cmd_pkt->sys_define = (uint8_t)ha->req_ring_index;
++              //cmd_pkt->entry_status = 0;
++
++              ret = qla2x00_cmd_build_32bit_iocbs(ha,
++                  sp, cmd_pkt, req_q_cnt, req_ring_index, request_ring_ptr,
++                  tot_iocbs, tot_dsds);
++      }
++
++      return (ret);
++}
++
++/**
++ * qla2x00_start_scsi() - Send a SCSI command to the ISP
++ * @sp: command to send to the ISP
++ *
++ * Returns non-zero if a failure occured, else zero.
++ */
++int
++qla2x00_start_scsi(srb_t *sp)
++{
++      int             ret;
++      unsigned long   flags;
++      uint16_t        failed;
++      scsi_qla_host_t *ha;
++      fc_lun_t        *fclun;
++      Scsi_Cmnd       *cmd;
++      uint16_t        req_q_cnt;
++      uint16_t        req_ring_index;
++      request_t       *request_ring_ptr;
++      uint32_t        *clr_ptr;
++      uint32_t        found;
++      uint32_t        index;
++      uint32_t        handle;
++      uint16_t        tot_iocbs;
++      uint16_t        tot_dsds;
++      cmd_entry_t     *cmd_pkt;
++      uint32_t        timeout;
++
++      device_reg_t    *reg;
++      uint16_t        reg_flushed;
++
++      ENTER(__func__);
++
++      /* Setup device pointers. */
++      ret = 0;
++      fclun = sp->lun_queue->fclun;
++      ha = fclun->fcport->ha;
++
++      cmd = sp->cmd;
++      reg = ha->iobase;
++
++      DEBUG3(printk("scsi(%ld): cmd=%p sp=%p CDB=%x\n",
++          ha->host_no,
++          cmd, sp, cmd->cmnd[0]));
++
++      /* Send marker if required */
++      if (ha->marker_needed != 0) {
++              if (qla2x00_marker(ha, 0, 0, MK_SYNC_ALL) != QLA2X00_SUCCESS) {
++                      return (QL_STATUS_ERROR);
++              }
++              ha->marker_needed = 0;
++      }
++
++      /* Acquire ring specific lock */
++      spin_lock_irqsave(&ha->hardware_lock, flags);
++
++      /* Save ha fields for post-update */
++      req_ring_index = ha->req_ring_index;
++      request_ring_ptr = ha->request_ring_ptr;
++      req_q_cnt = ha->req_q_cnt;
++
++      tot_dsds = 0;
++      tot_iocbs = 1;
++
++      /* Allocate space for an additional IOCB */
++      failed = qla2x00_check_request_ring(ha,
++          tot_iocbs, req_ring_index, &req_q_cnt);
++      if (failed)
++              goto queuing_error;
++
++      /* Check for room in outstanding command list. */
++      found = 0;
++      handle = ha->current_outstanding_cmd;
++      for (index = 1; index < MAX_OUTSTANDING_COMMANDS; index++) {
++              handle++;
++              if (handle == MAX_OUTSTANDING_COMMANDS)
++                      handle = 1;
++              if (ha->outstanding_cmds[handle] == 0) {
++                      found = 1;
++                      ha->current_outstanding_cmd = handle;
++                      break;
++              }
++      }
++      if (!found) {
++              DEBUG5(printk("scsi(%ld): Unable to queue command -- NO ROOM "
++                  "IN OUTSTANDING ARRAY (req_q_cnt=%lx).\n",
++                  ha->host_no,
++                  (u_long)ha->req_q_cnt));
++              goto queuing_error;
++      }
++
++      /*
++       * Build command packet.
++       */
++      cmd_pkt = (cmd_entry_t *)request_ring_ptr;
++
++      cmd_pkt->handle = handle;
++
++      /* Zero out remaining portion of packet. */
++      clr_ptr = (uint32_t *)cmd_pkt + 2;
++      for (index = 2; index < REQUEST_ENTRY_SIZE / 4; index++)
++              *clr_ptr++ = 0;
++
++      /* Set target ID */
++#if defined(EXTENDED_IDS)
++      cmd_pkt->target = cpu_to_le16(fclun->fcport->loop_id & 0xFF);
++#else
++      cmd_pkt->target = (uint8_t)fclun->fcport->loop_id;
++#endif
++
++      /* Set LUN number*/
++#if VSA
++      if ((cmd->data_cmnd[0] == 0x26) ||
++          (cmd->data_cmnd[0] == 0xA0) ||
++          (cmd->data_cmnd[0] == 0xCB) ) {
++              cmd_pkt->lun = cpu_to_le16(fclun->lun);
++      } else if ((fclun->fcport->flags & FC_VSA))
++              cmd_pkt->lun = cpu_to_le16(fclun->lun | 0x4000);
++      else
++              cmd_pkt->lun = cpu_to_le16(fclun->lun);
++#else
++      cmd_pkt->lun = cpu_to_le16(fclun->lun);
++#endif
++
++      /* Update tagged queuing modifier */
++      cmd_pkt->control_flags = __constant_cpu_to_le16(CF_SIMPLE_TAG);
++      if (cmd->device->tagged_queue) {
++              switch (cmd->tag) {
++              case HEAD_OF_QUEUE_TAG:
++                      cmd_pkt->control_flags =
++                          __constant_cpu_to_le16(CF_HEAD_TAG);
++                      break;
++              case ORDERED_QUEUE_TAG:
++                      cmd_pkt->control_flags =
++                          __constant_cpu_to_le16(CF_ORDERED_TAG);
++                      break;
++              }
++      }
++
++      /*
++       * Allocate at least 5 (+ QLA_CMD_TIMER_DELTA) seconds for RISC timeout.
++       */
++      timeout = (uint32_t) CMD_TIMEOUT(cmd)/HZ;
++      if (timeout > 65535)
++              cmd_pkt->timeout = __constant_cpu_to_le16(0);
++      if (timeout > 25)
++              cmd_pkt->timeout = cpu_to_le16((uint16_t)timeout -
++                  (5 + QLA_CMD_TIMER_DELTA));
++      else
++              cmd_pkt->timeout = cpu_to_le16((uint16_t)timeout);
++
++      /* Load SCSI command packet. */
++      memcpy(cmd_pkt->scsi_cdb, cmd->cmnd, cmd->cmd_len);
++
++      cmd_pkt->byte_count = cpu_to_le32((uint32_t)cmd->request_bufflen);
++
++      /* Load IOCB segments */
++      ret = qla2x00_cmd_build_iocb(ha,
++          sp,
++          cmd_pkt,
++          &req_q_cnt, &req_ring_index, &request_ring_ptr,
++          &tot_iocbs, &tot_dsds);
++      if (ret)
++              goto queuing_error;
++
++      /* Set total data segment count. */
++      cmd_pkt->dseg_count = cpu_to_le16(tot_dsds);
++      cmd_pkt->entry_count = (uint8_t)tot_iocbs;
++
++      /* Update ha fields */
++      ha->req_ring_index = req_ring_index;
++      ha->request_ring_ptr = request_ring_ptr;
++      ha->req_q_cnt = req_q_cnt;
++      ha->req_q_cnt -= tot_iocbs;
++#if defined(IOCB_THROLLE_USAGE)
++      ha->iocb_cnt += tot_iocbs;
++
++      sp->iocb_cnt = tot_iocbs;
++#endif
++
++      /* Add command to the active array */
++      ha->outstanding_cmds[handle] = sp;
++      CMD_HANDLE(sp->cmd) = (unsigned char *)(u_long)handle;
++
++      /* Adjust ring index. */
++      ha->req_ring_index++;
++      if (ha->req_ring_index == REQUEST_ENTRY_CNT) {
++              ha->req_ring_index = 0;
++              ha->request_ring_ptr = ha->request_ring;
++      } else
++              ha->request_ring_ptr++;
++
++      ha->actthreads++;
++      ha->total_ios++;
++      sp->ha = ha;
++      sp->lun_queue->out_cnt++;
++      sp->flags |= SRB_DMA_VALID;
++      sp->state = SRB_ACTIVE_STATE;
++      sp->u_start = jiffies;
++
++      /* Set chip new ring index. */
++      reg_flushed = CACHE_FLUSH(ISP_REQ_Q_IN(reg));
++      WRT_REG_WORD(ISP_REQ_Q_IN(reg), ha->req_ring_index);
++
++      spin_unlock_irqrestore(&ha->hardware_lock, flags);
++      return (QL_STATUS_SUCCESS);
++
++queuing_error:
++      spin_unlock_irqrestore(&ha->hardware_lock, flags);
++      return (QL_STATUS_ERROR);
++}
++
++
++/**
++ * qla2x00_marker() - Send a marker IOCB to the firmware.
++ * @ha: HA context
++ * @loop_id: loop ID
++ * @lun: LUN
++ * @type: marker modifier
++ *
++ * Can be called from both normal and interrupt context.
++ *
++ * Returns non-zero if a failure occured, else zero.
++ */
++int
++__qla2x00_marker(scsi_qla_host_t *ha,
++    uint16_t loop_id,
++    uint16_t lun,
++    uint8_t type)
++{
++      mrk_entry_t     *pkt;
++
++      ENTER(__func__);
++
++      pkt = (mrk_entry_t *)qla2x00_req_pkt(ha);
++      if (pkt == NULL) {
++              DEBUG2_3(printk("%s(): **** FAILED ****\n", __func__));
++
++              return (QL_STATUS_ERROR);
++      }
++
++      pkt->entry_type = MARKER_TYPE;
++      pkt->modifier = type;
++
++      if (type != MK_SYNC_ALL) {
++              pkt->lun = cpu_to_le16(lun);
++#if defined(EXTENDED_IDS)
++              pkt->target = cpu_to_le16(loop_id & 0xFF);
++#else
++              pkt->target = (uint8_t)loop_id;
++#endif
++      }
++
++      /* Issue command to ISP */
++      qla2x00_isp_cmd(ha);
++
++      LEAVE(__func__);
++
++      return (QL_STATUS_SUCCESS);
++}
++
++int 
++qla2x00_marker(scsi_qla_host_t *ha,
++    uint16_t loop_id,
++    uint16_t lun,
++    uint8_t type)
++{
++      int ret;
++      unsigned long flags = 0;
++
++      spin_lock_irqsave(&ha->hardware_lock, flags);
++      ret = __qla2x00_marker(ha, loop_id, lun, type);
++      spin_unlock_irqrestore(&ha->hardware_lock, flags);
++
++      return (ret);
++}
++
++/**
++ * qla2x00_req_pkt() - Retrieve a request packet from the request ring.
++ * @ha: HA context
++ *
++ * Note: The caller must hold the hardware lock before calling this routine.
++ *
++ * Returns NULL if function failed, else, a pointer to the request packet.
++ */
++request_t *
++qla2x00_req_pkt(scsi_qla_host_t *ha)
++{
++      device_reg_t    *reg = ha->iobase;
++      request_t       *pkt = NULL;
++      uint16_t        cnt;
++      uint32_t        *dword_ptr;
++      uint32_t        timer;
++      uint16_t        req_cnt = 1;
++
++      ENTER(__func__);
++
++      /* Wait 1 second for slot. */
++      for (timer = HZ; timer; timer--) {
++              if ((req_cnt + 2) >= ha->req_q_cnt) {
++                      /* Calculate number of free request entries. */
++                      cnt = qla2x00_debounce_register(ISP_REQ_Q_OUT(reg));
++                      if  (ha->req_ring_index < cnt)
++                              ha->req_q_cnt = cnt - ha->req_ring_index;
++                      else
++                              ha->req_q_cnt = REQUEST_ENTRY_CNT -
++                                  (ha->req_ring_index - cnt);
++              }
++              /* If room for request in request ring. */
++              if ((req_cnt + 2) < ha->req_q_cnt) {
++                      ha->req_q_cnt--;
++                      pkt = ha->request_ring_ptr;
++
++                      /* Zero out packet. */
++                      dword_ptr = (uint32_t *)pkt;
++                      for (cnt = 0; cnt < REQUEST_ENTRY_SIZE / 4; cnt++)
++                              *dword_ptr++ = 0;
++
++                      /* Set system defined field. */
++                      pkt->sys_define = (uint8_t)ha->req_ring_index;
++
++                      /* Set entry count. */
++                      pkt->entry_count = 1;
++
++                      break;
++              }
++
++              /* Release ring specific lock */
++              spin_unlock(&ha->hardware_lock);
++
++              udelay(2);   /* 2 us */
++
++              /* Check for pending interrupts. */
++              /* During init we issue marker directly */
++              if (!ha->marker_needed)
++                      qla2x00_poll(ha);
++
++              spin_lock_irq(&ha->hardware_lock);
++      }
++      if (!pkt) {
++              DEBUG2_3(printk("%s(): **** FAILED ****\n", __func__));
++      }
++
++      LEAVE(__func__);
++
++      return (pkt);
++}
++
++/**
++ * qla2x00_ms_req_pkt() - Retrieve a Management Server request packet from
++ *                            the request ring.
++ * @ha: HA context
++ * @sp: pointer to handle post function call
++ *
++ * Note: The caller must hold the hardware lock before calling this routine.
++ *
++ * Returns NULL if function failed, else, a pointer to the request packet.
++ */
++request_t *
++qla2x00_ms_req_pkt(scsi_qla_host_t *ha, srb_t  *sp)
++{
++      device_reg_t    *reg = ha->iobase;
++      request_t       *pkt = NULL;
++      uint16_t        cnt, i, index;
++      uint32_t        *dword_ptr;
++      uint32_t        timer;
++      uint8_t         found = 0;
++      uint16_t        req_cnt = 1;
++
++      ENTER(__func__);
++
++      /* Wait 1 second for slot. */
++      for (timer = HZ; timer; timer--) {
++              if ((req_cnt + 2) >= ha->req_q_cnt) {
++                      /* Calculate number of free request entries. */
++                      cnt = qla2x00_debounce_register(ISP_REQ_Q_OUT(reg));
++                      if (ha->req_ring_index < cnt) {
++                              ha->req_q_cnt = cnt - ha->req_ring_index;
++                      } else {
++                              ha->req_q_cnt = REQUEST_ENTRY_CNT -
++                                  (ha->req_ring_index - cnt);
++                      }
++              }
++
++              /* Check for room in outstanding command list. */
++              cnt = ha->current_outstanding_cmd;
++              for (index = 1; index < MAX_OUTSTANDING_COMMANDS; index++) {
++                      cnt++;
++                      if (cnt == MAX_OUTSTANDING_COMMANDS)
++                              cnt = 1;
++
++                      if (ha->outstanding_cmds[cnt] == 0) {
++                              found = 1;
++                              ha->current_outstanding_cmd = cnt;
++                              break;
++                      }
++              }
++
++              /* If room for request in request ring. */
++              if (found && (req_cnt + 2) < ha->req_q_cnt) {
++                      pkt = ha->request_ring_ptr;
++
++                      /* Zero out packet. */
++                      dword_ptr = (uint32_t *)pkt;
++                      for (i = 0; i < REQUEST_ENTRY_SIZE / 4; i++ )
++                              *dword_ptr++ = 0;
++
++                      DEBUG5(printk("%s(): putting sp=%p in "
++                          "outstanding_cmds[%x]\n",
++                          __func__,
++                          sp, cnt));
++
++                      ha->outstanding_cmds[cnt] = sp;
++
++                      /* save the handle */
++                      CMD_HANDLE(sp->cmd) = (unsigned char *) (u_long) cnt;
++                      CMD_SP(sp->cmd) = (void *)sp;
++
++                      ha->req_q_cnt--;
++                      pkt->handle = (uint32_t)cnt;
++
++                      /* Set system defined field. */
++                      pkt->sys_define = (uint8_t)ha->req_ring_index;
++                      pkt->entry_status = 0;
++
++                      break;
++              }
++
++              /* Release ring specific lock */
++              spin_unlock(&ha->hardware_lock);
++              udelay(20);
++
++              /* Check for pending interrupts. */
++              qla2x00_poll(ha);
++
++              spin_lock_irq(&ha->hardware_lock);
++      }
++      if (!pkt) {
++              DEBUG2_3(printk("%s(): **** FAILED ****\n", __func__));
++      }
++
++      LEAVE(__func__);
++
++      return (pkt);
++}
++
++/**
++ * qla2x00_isp_cmd() - Modify the request ring pointer.
++ * @ha: HA context
++ *
++ * Note: The caller must hold the hardware lock before calling this routine.
++ */
++void
++qla2x00_isp_cmd(scsi_qla_host_t *ha)
++{
++      device_reg_t *reg = ha->iobase;
++
++      ENTER(__func__);
++
++      DEBUG5(printk("%s(): IOCB data:\n", __func__));
++      DEBUG5(qla2x00_dump_buffer(
++          (uint8_t *)ha->request_ring_ptr, REQUEST_ENTRY_SIZE));
++
++      /* Adjust ring index. */
++      ha->req_ring_index++;
++      if (ha->req_ring_index == REQUEST_ENTRY_CNT) {
++              ha->req_ring_index = 0;
++              ha->request_ring_ptr = ha->request_ring;
++      } else
++              ha->request_ring_ptr++;
++
++      /* Set chip new ring index. */
++      WRT_REG_WORD(ISP_REQ_Q_IN(reg), ha->req_ring_index);
++
++      LEAVE(__func__);
++}
++
++// TODO: Complete implementation.
++// TODO: Add support for EXTENDED_IDS.
++#ifdef COMPLETE_IMPLEMENTATION
++
++/* MAILBOX IOCB stuff */
++
++/**
++ * qla2x00_send_login_port_iocb() - Login to a device.
++ * @ha: SCSI driver HA context
++ * @ipdev: IP device to login to
++ *
++ * This routine will build and send a mailbox IOCB to login to a fabric port.
++ *
++ * The qla2x00_mailbox_iocb_done() routine will be called upon IOCB
++ * completion, where further processing is performed.
++ *
++ * Returns QL_STATUS_SUCCESS if the operation succeeded.
++ */
++static int
++qla2x00_send_login_port_iocb(scsi_qla_host_t *ha, fcdev_t *device)
++{
++      unsigned long   flags = 0;
++      struct mbx_entry *mbxentry;
++
++      DEBUG2(printk("%s(): port ID: %x\n",
++                      __func__,
++                      device->port_id[2]<<16 |
++                      device->port_id[1]<<8 |
++                      device->port_id[0]);)
++
++      /* Send marker if required */
++      if (ha->marker_needed != 0) {
++              if (qla2x00_marker(ha, 0, 0, MK_SYNC_ALL) != QLA2X00_SUCCESS)
++                      return (QL_STATUS_ERROR);
++              ha->marker_needed = 0;
++      }
++
++      spin_lock_irqsave(&ha->hardware_lock, flags);
++
++      mbxentry = (struct mbx_entry *)qla2x00_req_pkt(ha);
++      if (mbxentry == NULL) {
++              DEBUG2(printk("%s(): failed\n", __func__);)
++
++              spin_unlock_irqrestore(&ha->hardware_lock, flags);
++
++              return (QL_STATUS_ERROR);
++      }
++
++      /* Build fabric login MBX IOCB */
++      mbxentry->entry_type = ET_MAILBOX_COMMAND;
++      mbxentry->entry_count = 1;
++      mbxentry->sys_define1 = SOURCE_SCSI;
++      mbxentry->entry_status = 0;
++      mbxentry->handle = cpu_to_le32(device->dev_id |
++                              (MBC_LOGIN_FABRIC_PORT << 16));
++      mbxentry->loop_id = device->loop_id;
++      mbxentry->mb0 = __constant_cpu_to_le16(MBC_LOGIN_FABRIC_PORT);
++      mbxentry->mb1 = cpu_to_le16((device->loop_id << 8) | 
++                              (MBC_NO_PROCESS_LOGIN |
++                               MBC_NO_PLOGI_IF_LOGGED_IN));
++      mbxentry->mb2 = cpu_to_le16(device->port_id[2]);
++      mbxentry->mb3 = cpu_to_le16((device->port_id[1] << 8) |
++                              device->port_id[0]);
++      mbxentry->mb6 = __constant_cpu_to_le16(0);
++      mbxentry->mb7 = __constant_cpu_to_le16(0);
++
++      /* Issue command to ISP */
++      qla2x00_isp_cmd(ha);
++
++      spin_unlock_irqrestore(&ha->hardware_lock, flags);
++
++      return (QL_STATUS_SUCCESS);
++}
++
++/**
++ * qla2x00_send_logout_port_iocb() - Logout an FC device.
++ * @ha: SCSI driver HA context
++ * @device: FC device to logout
++ *
++ * This routine will build and send a mailbox IOCB to logout a fabric port.
++ *
++ * The qla2x00_mailbox_iocb_done() routine will be called upon IOCB
++ * completion, where further processing is performed.
++ *
++ * Returns QL_STATUS_SUCCESS if the operation succeeded.
++ */
++static int
++qla2x00_send_logout_port_iocb(scsi_qla_host_t *ha, fcdev_t *device)
++{
++      unsigned long   flags = 0;
++      struct mbx_entry *mbxentry;
++
++      DEBUG2(printk("%s(): port ID: %x\n",
++                      __func__,
++                      device->port_id[2]<<16 |
++                      device->port_id[1]<<8 |
++                      device->port_id[0]);)
++
++      /* Send marker if required */
++      if (ha->marker_needed != 0) {
++              if (qla2x00_marker(ha, 0, 0, MK_SYNC_ALL) != QLA2X00_SUCCESS)
++                      return (QL_STATUS_ERROR);
++              ha->marker_needed = 0;
++      }
++
++      spin_lock_irqsave(&ha->hardware_lock, flags);
++
++      mbxentry = (struct mbx_entry *)qla2x00_req_pkt(ha);
++      if (mbxentry == NULL) {
++              DEBUG3(printk("%s(): failed\n", __func__);)
++
++              spin_unlock_irqrestore(&ha->hardware_lock, flags);
++
++              return (QL_STATUS_ERROR);
++      }
++
++      /* Build fabric logout MBX IOCB */
++      mbxentry->entry_type = ET_MAILBOX_COMMAND;
++      mbxentry->entry_count = 1;
++      mbxentry->sys_define1 = SOURCE_SCSI;
++      mbxentry->entry_status = 0;
++      mbxentry->handle = cpu_to_le32(device->dev_id |
++                              (MBC_LOGOUT_FABRIC_PORT << 16));
++      mbxentry->loop_id = device->loop_id;
++      mbxentry->mb0 = __constant_cpu_to_le16(MBC_LOGOUT_FABRIC_PORT);
++      mbxentry->mb1 = cpu_to_le16(device->loop_id << 8);
++      mbxentry->mb2 = __constant_cpu_to_le16(0);
++      mbxentry->mb3 = __constant_cpu_to_le16(0);
++      mbxentry->mb6 = __constant_cpu_to_le16(0);
++      mbxentry->mb7 = __constant_cpu_to_le16(0);
++
++      /* Issue command to ISP */
++      qla2x00_isp_cmd(ha);
++
++      spin_unlock_irqrestore(&ha->hardware_lock, flags);
++
++      return (QL_STATUS_SUCCESS);
++}
++
++/**
++ * qla2x00_mailbox_iocb_done() - Process an mailbox IOCB completion.
++ * @ha: SCSI driver HA context
++ * @mbxentry: completed mailbox IOCB entry
++ *
++ * This routine is currently used for fabric login and logouts only.
++ */
++static void
++qla2x00_mailbox_iocb_done(scsi_qla_host_t *ha, struct mbx_entry *mbxentry)
++{
++      int             status;
++      uint16_t        cmd;
++      uint16_t        index;
++      fcdev           *device;
++
++// FIXME: endianess?
++      /* Parse-out originating mailbox command */
++      cmd = MSW(mbxentry->handle);
++
++      DEBUG2(printk("%s: cmd %x, status %x, mb0 %x, mb1 %x, mb2 %x\n",
++                      __func__,
++                      cmd,
++                      mbxentry->status,
++                      mbxentry->mb0,
++                      mbxentry->mb1,
++                      mbxentry->mb2);)
++
++      /* Get device block pointer */
++      index = LSW(mbxentry->handle);
++      if (index >= QLLAN_MAX_IP_DEVICES) {
++              /* Bad handle from ISP */
++              DEBUG3(printk("%s: bad handle from isp\n", __func__);)
++
++              /* TODO: Cleanup??? */
++
++              return;
++      }
++// FIXME FROM HERE!!!
++      ipdev = &ha->ipdev_db[index];
++
++      if (cmd == MBC_LOGOUT_FABRIC_PORT) {
++              /* Check fabric logout completion status */
++              if (/*mbxentry->status == CS_COMPLETE && */
++                      mbxentry->mb0 == MBS_COMMAND_COMPLETE) {
++
++                      /* Logout successful -- do nothing */
++              }
++              else {
++                      DEBUG12(printk("%s: fabric logout failed\n", __func__);)
++              }
++      }
++      else {
++              /* Check fabric login completion status */
++              /* Note: sometimes ISP returns Status=0x30 and MB0=0x4000 */
++              /* Therefore, only check mb0 for now */
++              if (/* mbxentry->status == CS_COMPLETE && */
++                      mbxentry->mb0 == MBS_COMMAND_COMPLETE) {
++
++                      /* Login successful */
++                      ipdev->flags |= IP_DEV_FLAG_PRESENT;
++              }
++              else if (mbxentry->mb0 == MBS_PORT_ID_IN_USE) {
++                      /* Different loop ID already assigned to port ID */
++                      /* Use the one that is already assigned */
++                      qla2x00_free_loopid(ha, ipdev->loop_id);
++                      ipdev->loop_id = mbxentry->mb1;
++
++                      /* Do logout first and then relogin */
++                      qla2x00_ip_send_logout_port_iocb(ha, ipdev, 1);
++                      qla2x00_ip_send_login_port_iocb(ha, ipdev, 1);
++              }
++              else if (mbxentry->mb0 == MBS_LOOP_ID_IN_USE) {
++                      /* Loop ID already used for different port ID */
++                      /* Get a new loop ID and reissue login request */
++                      status = qla2x00_reserve_loopid(ha, &ipdev->loop_id);
++                      if (status == QL_STATUS_SUCCESS) {
++                              qla2x00_ip_send_login_port_iocb(ha, ipdev, 1);
++                      }
++                      else {
++                              DEBUG12(printk("%s: out of loop IDs\n",
++                                              __func__);)
++
++                              qla2x00_free_ip_block(ha, ipdev);
++                      }
++              }
++              else {
++                      /* Login failed, return resources */
++                      DEBUG12(printk("%s: fabric login failed\n", __func__);)
++
++                      qla2x00_free_loopid(ha, ipdev->loop_id);
++                      qla2x00_free_ip_block(ha, ipdev);
++              }
++      }
++}
++
++#endif
++
++
+--- /dev/null  Thu Apr 11 07:25:15 2002
++++ linux-2.5.73-n9560/drivers/scsi/qla2xxx/qla_ip.c   Thu Jul  3 15:34:42 2003
+@@ -0,0 +1,1769 @@
++/******************************************************************************
++ *                  QLOGIC LINUX SOFTWARE
++ *
++ * QLogic ISP2x00 device driver for Linux 2.5.x
++ * Copyright (C) 2003 Qlogic Corporation
++ * (www.qlogic.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, 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.
++ *
++ ******************************************************************************/
++
++/****************************************************************************
++              Please see revision.notes for revision history.
++*****************************************************************************/
++
++static __u8   hwbroadcast_addr[ETH_ALEN] = { [0 ... ETH_ALEN-1] = 0xFF };
++
++
++/**
++ * qla2x00_ip_initialize() - Initialize RISC IP support.
++ * @ha: SCSI driver HA context
++ *
++ * Prior to RISC IP initialization, this routine, if necessary, will reset all
++ * buffers in the receive buffer ring.
++ *
++ * Returns TRUE if the RISC IP initialization succeeds.
++ */
++static int
++qla2x00_ip_initialize(scsi_qla_host_t *ha)
++{
++      int             i;
++      int             status;
++      unsigned long   flags;
++      device_reg_t    *reg;
++      static mbx_cmd_t mc;
++      mbx_cmd_t       *mcp = &mc;
++      struct ip_init_cb *ipinit_cb;
++      dma_addr_t      ipinit_cb_dma;
++
++      DEBUG12(printk("%s: enter\n", __func__);)
++
++      status = FALSE;
++
++      /* Initialize IP data in ha */
++      ha->ipdev_db_top = NULL;
++      ha->ipdev_db_bottom = NULL;
++      ha->ipdev_db_next_free = &ha->ipdev_db[0];
++      for (i = 0; i < QLLAN_MAX_IP_DEVICES; i++) {
++              ha->ipdev_db[i].index = i;
++              ha->ipdev_db[i].next = &ha->ipdev_db[i+1];
++      }
++      ha->ipdev_db[QLLAN_MAX_IP_DEVICES-1].next = NULL;
++
++      /* Reset/pack buffers owned by RISC in receive buffer ring */
++      if (ha->rec_entries_in != ha->rec_entries_out) {
++              struct buffer_cb        *bcb;
++              uint16_t                rec_out;
++              struct risc_rec_entry   *rec_entry;
++
++              bcb = ha->receive_buffers;
++              rec_out = ha->rec_entries_out;
++
++              /*
++               * Must locate all RISC owned buffers and pack them in the
++               * buffer ring.
++               */
++              /* between IpBufferOut and IpBufferIN */
++              for (i = 0; i < ha->max_receive_buffers; i++, bcb++) {
++                      if (test_bit(BCB_RISC_OWNS_BUFFER, &bcb->state)) {
++                              /*
++                               * Set RISC owned buffer into receive buffer
++                               * ring.
++                               */
++                              rec_entry = &ha->risc_rec_q[rec_out];
++                              rec_entry->handle = bcb->handle;
++                              rec_entry->data_addr_low =
++                                      LSD(bcb->skb_data_dma);
++                              rec_entry->data_addr_high =
++                                      MSD(bcb->skb_data_dma);
++                              if (rec_out < IP_BUFFER_QUEUE_DEPTH - 1)
++                                      rec_out++;
++                              else
++                                      rec_out = 0;
++                      }
++              }
++
++              /* Verify correct number of RISC owned buffers were found */
++              if (rec_out != ha->rec_entries_in) {
++                      /* Incorrect number of RISC owned buffers?? */
++                      DEBUG12(printk("%s: incorrect number of RISC "
++                                      "owned buffers, disable IP\n",
++                                      __func__);)
++                      ha->flags.enable_ip = FALSE;
++                      return (FALSE);
++              }
++      }
++
++      /* Init RISC buffer pointer */
++      spin_lock_irqsave(&ha->hardware_lock, flags);
++      reg = ha->iobase;
++      WRT_REG_WORD(&reg->mailbox8, ha->rec_entries_in);
++      spin_unlock_irqrestore(&ha->hardware_lock, flags);
++
++      /* Wait for a ready state from the adapter */
++      while (!ha->init_done || ha->dpc_active) {
++              set_current_state(TASK_INTERRUPTIBLE);
++              schedule_timeout(HZ);
++      }
++
++      /* Setup IP initialization control block */
++      ipinit_cb = pci_alloc_consistent(ha->pdev,
++                              sizeof(struct ip_init_cb), 
++                              &ipinit_cb_dma);
++      if (ipinit_cb) {
++              memset(ipinit_cb, 0, sizeof(struct ip_init_cb));
++              ipinit_cb->version = IPICB_VERSION;
++              ipinit_cb->firmware_options =
++                      __constant_cpu_to_le16(
++                              IPICB_OPTION_NO_BROADCAST_FASTPOST |
++                               IPICB_OPTION_64BIT_ADDRESSING);
++              ipinit_cb->header_size = cpu_to_le16(ha->header_size);
++              ipinit_cb->mtu = cpu_to_le16((uint16_t)ha->mtu);
++              ipinit_cb->receive_buffer_size =
++                      cpu_to_le16((uint16_t)ha->receive_buff_data_size);
++              ipinit_cb->receive_queue_size =
++                       __constant_cpu_to_le16(IP_BUFFER_QUEUE_DEPTH);
++              ipinit_cb->low_water_mark =
++                       __constant_cpu_to_le16(IPICB_LOW_WATER_MARK);
++              ipinit_cb->receive_queue_addr[0] =
++                      cpu_to_le16(LSW(ha->risc_rec_q_dma));
++              ipinit_cb->receive_queue_addr[1] =
++                      cpu_to_le16(MSW(ha->risc_rec_q_dma));
++              ipinit_cb->receive_queue_addr[2] =
++                      cpu_to_le16(LSW(MSD(ha->risc_rec_q_dma)));
++              ipinit_cb->receive_queue_addr[3] =
++                      cpu_to_le16(MSW(MSD(ha->risc_rec_q_dma)));
++              ipinit_cb->receive_queue_in = cpu_to_le16(ha->rec_entries_out);
++              ipinit_cb->fast_post_count =
++                       __constant_cpu_to_le16(IPICB_FAST_POST_COUNT);
++              ipinit_cb->container_count =
++                       __constant_cpu_to_le16(IPICB_BUFFER_CONTAINER_COUNT);
++              ipinit_cb->resource_allocation =
++                       __constant_cpu_to_le16(IPICB_IOCB_RESERVE_COUNT);
++
++              /* Issue mailbox command to initialize IP firmware */
++              mcp->mb[0] = MBC_INITIALIZE_IP;
++              mcp->mb[2] = MSW(ipinit_cb_dma);
++              mcp->mb[3] = LSW(ipinit_cb_dma);
++              mcp->mb[6] = MSW(MSD(ipinit_cb_dma));
++              mcp->mb[7] = LSW(MSD(ipinit_cb_dma));
++              mcp->out_mb = MBX_7|MBX_6|MBX_3|MBX_2|MBX_0;
++              mcp->in_mb = MBX_0;
++              mcp->tov = 30;
++              mcp->buf_size = sizeof(struct ip_init_cb);
++              mcp->flags = MBX_DMA_OUT;
++
++              status = qla2x00_mailbox_command(ha, mcp);
++              if (status == QL_STATUS_SUCCESS) {
++                      /* IP initialization successful */
++                      DEBUG12(printk("%s: successful\n", __func__);)
++
++                      ha->flags.enable_ip = TRUE;
++
++                      /* Force database update */
++                      set_bit(LOOP_RESYNC_NEEDED, &ha->dpc_flags);
++                      set_bit(LOCAL_LOOP_UPDATE, &ha->dpc_flags);
++                      set_bit(REGISTER_FC4_NEEDED, &ha->dpc_flags);
++
++                      /* qla2x00_loop_resync(ha); */
++                      if (ha->dpc_wait && !ha->dpc_active) {
++                              up(ha->dpc_wait);
++                      }
++                      status = TRUE;
++              }
++              else {
++                      DEBUG12(printk("%s: MBC_INITIALIZE_IP "
++                                      "failed %x MB0 %x\n",
++                                      __func__, 
++                                      status,
++                                      mcp->mb[0]);)
++                      status = FALSE;
++              }
++              pci_free_consistent(ha->pdev, sizeof(struct ip_init_cb),
++                                      ipinit_cb, ipinit_cb_dma);
++
++      }
++      else {
++              DEBUG12(printk("%s: memory allocation error\n", __func__);)
++      }
++
++      return (status);
++}
++
++/**
++ * qla2x00_ip_send_complete() - Handle IP send completion.
++ * @ha: SCSI driver HA context
++ * @handle: handle to completed send_cb
++ * @comp_status: Firmware completion status of send_cb
++ *
++ * Upon cleanup of the internal active-scb queue, the IP driver is notified of
++ * the completion.
++ */
++static void
++qla2x00_ip_send_complete(scsi_qla_host_t *ha,
++                      uint32_t handle, uint16_t comp_status)
++{
++      struct send_cb *scb;
++
++      /* Set packet pointer from queue entry handle */
++      if (handle < MAX_SEND_PACKETS) {
++              scb = ha->active_scb_q[handle];
++              if (scb) {
++                      ha->ipreq_cnt--;
++                      ha->active_scb_q[handle] = NULL;
++
++                      scb->comp_status = comp_status;
++                      pci_unmap_single(ha->pdev,
++                                      scb->skb_data_dma,
++                                      scb->skb->len,
++                                      PCI_DMA_TODEVICE);
++      
++                      /* Return send packet to IP driver */
++                      (*ha->send_completion_routine)(scb);
++                      return;
++              }
++      }
++
++      /* Invalid handle from RISC, reset RISC firmware */
++      printk(KERN_WARNING
++              "%s: Bad IP send handle %x - aborting ISP\n",
++              __func__, handle);
++
++      set_bit(ISP_ABORT_NEEDED, &ha->dpc_flags);
++}
++
++/**
++ * qla2x00_ip_receive() - Handle IP receive IOCB.
++ * @ha: SCSI driver HA context
++ * @pkt: RISC IP receive packet
++ *
++ * Upon preparation of one or more buffer_cbs, the IP driver is notified of
++ * the received packet.
++ */
++static void
++qla2x00_ip_receive(scsi_qla_host_t *ha, response_t *pkt)
++{
++      uint32_t        handle;
++      uint32_t        packet_size;
++      uint16_t        linked_bcb_cnt;
++      uint32_t        rec_data_size;
++      uint16_t        comp_status;
++      struct buffer_cb *bcb;
++      struct buffer_cb *nbcb;
++      struct ip_rec_entry *iprec_entry;
++
++      DEBUG12(printk("%s: enter\n", __func__);)
++
++      iprec_entry = (struct ip_rec_entry *)pkt;
++      comp_status = le16_to_cpu(iprec_entry->comp_status);
++
++      /* If split buffer, set header size for 1st buffer */
++      if (comp_status & IPREC_STATUS_SPLIT_BUFFER)
++              rec_data_size = ha->header_size;
++      else
++              rec_data_size = ha->receive_buff_data_size;
++
++      handle = iprec_entry->buffer_handles[0];
++      if (handle >= ha->max_receive_buffers) {
++              /* Invalid handle from RISC, reset RISC firmware */
++              printk(KERN_WARNING
++                      "%s: Bad IP buffer handle %x (> buffer_count)...Post "
++                      "ISP Abort\n",
++                      __func__,
++                      handle);
++              set_bit(ISP_ABORT_NEEDED, &ha->dpc_flags);
++              return;
++      }
++
++      bcb = &ha->receive_buffers[handle];
++
++      if (!test_and_clear_bit(BCB_RISC_OWNS_BUFFER, &bcb->state)) {
++              /* Invalid handle from RISC, reset RISC firmware */
++              printk(KERN_WARNING
++                      "%s: Bad IP buffer handle %x (!RISC_owned)...Post "
++                      "ISP Abort\n",
++                      __func__,
++                      handle);
++              set_bit(ISP_ABORT_NEEDED, &ha->dpc_flags);
++              return;
++      }
++
++      packet_size = le16_to_cpu(iprec_entry->sequence_length);
++      bcb->comp_status = comp_status;
++      bcb->packet_size = packet_size;
++      nbcb = bcb;
++
++      /* Prepare any linked buffers */
++      for (linked_bcb_cnt = 1; ; linked_bcb_cnt++) {
++              if (packet_size > rec_data_size) {
++                      nbcb->rec_data_size = rec_data_size;
++                      packet_size -= rec_data_size;
++
++                      /*
++                       * If split buffer, only use header size on 1st buffer
++                       */
++                      rec_data_size = ha->receive_buff_data_size;
++
++                      handle = iprec_entry->buffer_handles[linked_bcb_cnt];
++                      if (handle >= ha->max_receive_buffers) {
++                              /*
++                               * Invalid handle from RISC reset RISC firmware
++                               */
++                              printk(KERN_WARNING
++                                      "%s: Bad IP buffer handle %x (> "
++                                      "buffer_count - PS)...Post ISP Abort\n",
++                                      __func__,
++                                      handle);
++                              set_bit(ISP_ABORT_NEEDED, &ha->dpc_flags);
++                              return;
++                      }
++                      nbcb->next_bcb = &ha->receive_buffers[handle];
++                      nbcb = nbcb->next_bcb;
++
++                      if (!test_and_clear_bit(BCB_RISC_OWNS_BUFFER,
++                                                      &nbcb->state)) {
++                              /*
++                               * Invalid handle from RISC reset RISC firmware
++                               */
++                              printk(KERN_WARNING
++                                      "%s: Bad IP buffer handle %x "
++                                      "(!RISC_owned - PS)...Post ISP Abort\n",
++                                      __func__,
++                                      handle);
++                              set_bit(ISP_ABORT_NEEDED, &ha->dpc_flags);
++                              return;
++                      }
++              }
++              else {
++                      /* Single buffer_cb */
++                      nbcb->rec_data_size = packet_size;
++                      nbcb->next_bcb = NULL;
++                      break;
++              }
++      }
++
++      /* Check for incoming ARP packet with matching IP address */
++      if (le16_to_cpu(iprec_entry->service_class) == 0) {
++              uint8_t port_id[3];
++              struct ip_device *ipdev;
++              struct packet_header *packethdr;
++
++              packethdr = (struct packet_header *)bcb->skb_data;
++
++              /* Scan list of IP devices to see if login needed */
++              for (ipdev = ha->ipdev_db_top; ipdev; ipdev = ipdev->next) {
++                      if (!memcmp(&ipdev->port_name[2],
++                              packethdr->networkh.s.na.addr, ETH_ALEN)) {
++                              /* Device already in IP list, skip login */
++                              goto skip_device_login;
++                      }
++              }
++
++              /* Device not in list, need to do login */
++              port_id[2] = iprec_entry->s_idhigh;
++// FIXME: endianess?
++              port_id[1] = MSB(iprec_entry->s_idlow);
++              port_id[0] = LSB(iprec_entry->s_idlow);
++
++              /* Make sure its not a local device */
++              if (port_id[2] == ha->d_id.b.domain &&
++                      port_id[1] == ha->d_id.b.area) {
++
++                      goto skip_device_login;
++              }
++
++              if (qla2x00_add_new_ip_device(ha,
++                                      PUBLIC_LOOP_DEVICE,
++                                      port_id,
++                                      packethdr->networkh.s.fcaddr,
++                                      TRUE,
++                                      1) == QL_STATUS_FATAL_ERROR) {
++
++                      /* Fatal error, reinitialize */
++                      set_bit(ISP_ABORT_NEEDED, &ha->dpc_flags);
++              }
++
++      }
++
++skip_device_login:
++
++      /* Pass received packet to IP driver */
++      bcb->linked_bcb_cnt = linked_bcb_cnt;
++      (*ha->receive_packets_routine)(ha->receive_packets_context, bcb);
++
++      /* Keep track of RISC buffer pointer (for IP reinit) */
++      ha->rec_entries_out += linked_bcb_cnt;
++      if (ha->rec_entries_out >= IP_BUFFER_QUEUE_DEPTH)
++              ha->rec_entries_out -= IP_BUFFER_QUEUE_DEPTH;
++}
++
++/**
++ * qla2x00_ip_receive_fastpost() - Handle IP receive fastpost.
++ * @ha: SCSI driver HA context
++ * @type: RISC fastpost type
++ *
++ * Upon preparation of one or more buffer_cbs, the IP driver is notified of
++ * the received packet.
++ */
++static void
++qla2x00_ip_receive_fastpost(scsi_qla_host_t *ha, uint16_t type)
++{
++      uint32_t        handle;
++      uint32_t        packet_size;
++      uint16_t        linked_bcb_cnt;
++      uint32_t        rec_data_size;
++      volatile uint16_t *next_mb;
++      device_reg_t    *reg = ha->iobase;
++      struct buffer_cb *bcb;
++      struct buffer_cb *nbcb;
++
++      DEBUG12(printk("%s: enter\n", __func__);)
++
++      next_mb = &reg->mailbox10;
++
++      /* If split buffer, set header size for 1st buffer */
++      if (type == MBA_IP_RECEIVE_COMPLETE_SPLIT)
++              rec_data_size = ha->header_size;
++      else
++              rec_data_size = ha->receive_buff_data_size;
++
++      handle = RD_REG_WORD(next_mb);
++      if (handle >= ha->max_receive_buffers) {
++              goto invalid_handle;
++      }
++
++      bcb = &ha->receive_buffers[handle];
++
++      if (!test_and_clear_bit(BCB_RISC_OWNS_BUFFER, &bcb->state)) {
++              goto invalid_handle;
++      }
++
++      packet_size = RD_REG_WORD(&reg->mailbox3);
++      /* Fastpost entries are always successfully transferred */
++      bcb->comp_status = CS_COMPLETE;
++      bcb->packet_size = packet_size;
++      nbcb = bcb;
++
++      /* Prepare any linked buffers */
++      for (linked_bcb_cnt = 1; ; linked_bcb_cnt++) {
++              if (packet_size > rec_data_size) {
++                      nbcb->rec_data_size = rec_data_size;
++                      packet_size -= rec_data_size;
++                      /*
++                       * If split buffer, only use header size on 1st buffer
++                       */
++                      rec_data_size = ha->receive_buff_data_size;
++
++                      next_mb++;
++                      handle = RD_REG_WORD(next_mb);
++                      if (handle >= ha->max_receive_buffers) {
++invalid_handle:
++                              printk(KERN_WARNING
++                                      "%s: bad IP receive fast post handle "
++                                      "%x\n", 
++                                      __func__,
++                                      handle);
++                              set_bit(ISP_ABORT_NEEDED, &ha->dpc_flags);
++                              return;
++                      }
++
++                      nbcb->next_bcb = &ha->receive_buffers[handle];
++                      nbcb = nbcb->next_bcb;
++
++                      if (!test_and_clear_bit(BCB_RISC_OWNS_BUFFER,
++                                                      &nbcb->state)) {
++                              goto invalid_handle;
++                      }
++              }
++              else {
++                      /* Single buffer_cb */
++                      nbcb->rec_data_size = packet_size;
++                      nbcb->next_bcb = NULL;
++                      break;
++              }
++      }
++
++      /* Pass received packet to IP driver */
++      bcb->linked_bcb_cnt = linked_bcb_cnt;
++      (*ha->receive_packets_routine)(ha->receive_packets_context, bcb);
++
++      /* Keep track of RISC buffer pointer (for IP reinit) */
++      ha->rec_entries_out += linked_bcb_cnt;
++      if (ha->rec_entries_out >= IP_BUFFER_QUEUE_DEPTH)
++              ha->rec_entries_out -= IP_BUFFER_QUEUE_DEPTH;
++}
++
++/**
++ * qla2x00_convert_to_arp() - Convert an IP send packet to an ARP packet
++ * @ha: SCSI driver HA context
++ * @scb: The send_cb structure to convert
++ *
++ * Returns TRUE if conversion successful.
++ */
++static int
++qla2x00_convert_to_arp(scsi_qla_host_t *ha, struct send_cb *scb)
++{
++      struct sk_buff          *skb;
++      struct packet_header    *packethdr;
++      struct arp_header       *arphdr;
++      struct ip_header        *iphdr;
++
++      DEBUG12(printk("%s: convert packet to ARP\n", __func__);)
++
++      skb = scb->skb;
++      packethdr = scb->header;
++      arphdr = (struct arp_header *)skb->data;
++      iphdr  = (struct ip_header *)skb->data;
++
++      if (packethdr->snaph.ethertype == __constant_htons(ETH_P_IP)) {
++              /* Convert IP packet to ARP packet */
++              packethdr->networkh.d.na.naa = NAA_IEEE_MAC_TYPE;
++              packethdr->networkh.d.na.unused = 0;
++              memcpy(packethdr->networkh.d.na.addr,
++                              hwbroadcast_addr, ETH_ALEN);
++              packethdr->snaph.ethertype = __constant_htons(ETH_P_ARP);
++
++              arphdr->ar_tip = iphdr->iph.daddr;
++              arphdr->ar_sip = iphdr->iph.saddr;
++              arphdr->arph.ar_hrd = __constant_htons(ARPHRD_IEEE802);
++              arphdr->arph.ar_pro = __constant_htons(ETH_P_IP);
++              arphdr->arph.ar_hln = ETH_ALEN;
++              arphdr->arph.ar_pln = sizeof(iphdr->iph.daddr); /* 4 */
++              arphdr->arph.ar_op = __constant_htons(ARPOP_REQUEST);
++              memcpy(arphdr->ar_sha, packethdr->networkh.s.na.addr, ETH_ALEN);
++              memset(arphdr->ar_tha, 0, ETH_ALEN);
++
++              skb->len = sizeof(struct arp_header);
++
++              return (TRUE);
++      }
++      else {
++              return (FALSE);
++      }
++}
++
++/**
++ * qla2x00_get_ip_loopid() - Retrieve loop id of an IP device.
++ * @ha: SCSI driver HA context
++ * @packethdr: IP device to remove
++ * @loop_id: loop id of discovered device
++ *
++ * This routine will interrogate the packet header to determine if the sender is
++ * in the list of active IP devices.  The first two bytes of the destination
++ * address will be modified to match the port name stored in the active IP
++ * device list.
++ *
++ * Returns TRUE if a valid loop id is returned.
++ */
++static int
++qla2x00_get_ip_loopid(scsi_qla_host_t *ha,
++              struct packet_header *packethdr, uint8_t *loop_id)
++{
++      struct ip_device *ipdev;
++
++      /* Scan list of logged in IP devices for match */
++      for (ipdev = ha->ipdev_db_top; ipdev; ipdev = ipdev->next) {
++              if (memcmp(&ipdev->port_name[2],
++                              &(packethdr->networkh.d.fcaddr[2]), ETH_ALEN))
++                      continue;
++
++              /* Found match, return loop ID  */
++              *loop_id = (uint8_t)ipdev->loop_id;
++
++              /* Update first 2 bytes of port name */
++              packethdr->networkh.d.fcaddr[0] = ipdev->port_name[0];
++              packethdr->networkh.d.fcaddr[1] = ipdev->port_name[1];
++
++              if (ipdev != ha->ipdev_db_top) {
++                      /* Device not at top, move it to top of list */
++                      /* Unhook it first */
++                      if (ipdev == ha->ipdev_db_bottom) {
++                              ha->ipdev_db_bottom = ipdev->last;
++                              ipdev->last->next = NULL;
++                      }
++                      else {
++                              ipdev->last->next = ipdev->next;
++                              ipdev->next->last = ipdev->last;
++                      }
++
++                      /* Now put it at top of list */
++                      ipdev->next = ha->ipdev_db_top;
++                      ipdev->last = NULL;
++                      ha->ipdev_db_top->last = ipdev;
++                      ha->ipdev_db_top = ipdev;
++              }
++              return (TRUE);
++      }
++
++      /* Check for broadcast packet */
++      if (!memcmp(packethdr->networkh.d.na.addr,
++                              hwbroadcast_addr, ETH_ALEN)) {
++              /* Broadcast packet, return broadcast loop ID  */
++              *loop_id = BROADCAST;
++
++              /* Update destination NAA of header */
++              packethdr->networkh.d.na.naa = NAA_IEEE_MAC_TYPE;
++              packethdr->networkh.d.na.unused = 0;
++
++              return (TRUE);
++      }
++
++      /* Check for multicast packet */
++      if (packethdr->networkh.d.na.addr[0] & 0x01) {
++              /* Use broadcast loop ID for multicast packets  */
++              *loop_id = BROADCAST;
++
++              /* Update destination NAA of header */
++              packethdr->networkh.d.na.naa = NAA_IEEE_MAC_TYPE;
++              packethdr->networkh.d.na.unused = 0;
++
++              return (TRUE);
++      }
++
++      /* TODO */
++      /* Try sending FARP IOCB to request login */
++
++      DEBUG12(printk("%s: ID not found for "
++                      "XX XX %02x %02x %02x %02x %02x %02x\n",
++                      __func__,
++                      packethdr->networkh.d.na.addr[0],
++                      packethdr->networkh.d.na.addr[1],
++                      packethdr->networkh.d.na.addr[2],
++                      packethdr->networkh.d.na.addr[3],
++                      packethdr->networkh.d.na.addr[4],
++                      packethdr->networkh.d.na.addr[5]);)
++
++      return (FALSE);
++}
++
++/**
++ * qla2x00_reserve_loopid() - Reserve an unused public loop id.
++ * @ha: SCSI driver HA context
++ * @loop_id: loop id reserved
++ *
++ * Returns QL_STATUS_SUCCESS if a valid loop id is returned.
++ */
++static int
++qla2x00_reserve_loopid(scsi_qla_host_t *ha, uint16_t *loop_id)
++{
++      int i;
++
++      /* Look for unused loop ID */
++      for (i = ha->min_external_loopid; i < ha->max_public_loop_ids; i++) {
++              if (ha->fabricid[i].in_use)
++                      continue;
++
++              /* Found free loop ID */
++              ha->fabricid[i].in_use = TRUE;
++              *loop_id = i;
++
++              DEBUG12(printk("%s: assigned loop ID %x\n",
++                              __func__,
++                              *loop_id);)
++
++              return (QL_STATUS_SUCCESS);
++      }
++
++      /* Out of loop IDs */
++      *loop_id = ha->max_public_loop_ids + 1;     /* Set out of range */
++
++      DEBUG12(printk("%s: out of loop IDs\n", __func__);)
++
++      return (QL_STATUS_RESOURCE_ERROR);
++}
++
++/**
++ * qla2x00_free_loopid() - Free a public loop id.
++ * @ha: SCSI driver HA context
++ * @loop_id: loop id to free
++ */
++static void
++qla2x00_free_loopid(scsi_qla_host_t *ha, uint16_t loop_id)
++{
++      if (loop_id < ha->max_public_loop_ids) {
++              ha->fabricid[loop_id].in_use = FALSE;
++              DEBUG12(printk("%s: free loop ID %x\n",
++                              __func__,
++                              loop_id);)
++      }
++      else {
++              DEBUG12(printk("%s: loop ID %x out of range\n",
++                              __func__,
++                              loop_id);)
++      }
++}
++
++
++/**
++ * qla2x00_add_new_ip_device() - Add a new IP capable device to the list.
++ * @ha: SCSI driver HA context
++ * @loop_id: loop id, if a private loop, of the new device
++ * @port_id: port id of the new device
++ * @port_name: port name of the new device
++ * @force_add: should the function force the addition of the device
++ * @ha_locked: Flag indicating if the function is called with the hardware lock
++ *
++ * Prior to RISC IP initialization, this routine, if necessary, will reset all
++ * buffers in the receive buffer ring.
++ *
++ * Returns QL_STATUS_SUCCESS if there were no errors adding the device.
++ */
++static int
++qla2x00_add_new_ip_device(scsi_qla_host_t *ha,
++                           uint16_t loop_id,
++                           uint8_t *port_id,
++                           uint8_t *port_name,
++                           int force_add,
++                           uint32_t ha_locked)
++{
++      int     status;
++      struct ip_device *ipdev;
++
++      /* Get free IP device block */
++      status = qla2x00_reserve_ip_block(ha, &ipdev);
++      if (status == QL_STATUS_RESOURCE_ERROR) {
++              if (!force_add)
++                      return (status);
++
++              /*
++               * Out of IP blocks, bump public device at bottom of list
++               */
++              DEBUG12(printk("%s: bump device from IP list\n", __func__);)
++
++              for (ipdev = ha->ipdev_db_bottom; ipdev; ipdev = ipdev->last) {
++                      if (!(ipdev->flags & IP_DEV_FLAG_PUBLIC_DEVICE))
++                              continue;
++
++                      /* Do fabric logout and free loop ID */
++                      qla2x00_ip_send_logout_port_iocb(ha, ipdev, ha_locked);
++                      qla2x00_free_loopid(ha, ipdev->loop_id);
++
++                      /* Move device to top of list */
++                      qla2x00_free_ip_block(ha, ipdev);
++                      status = qla2x00_reserve_ip_block(ha, &ipdev);
++                      break;
++              }
++              if (status != QL_STATUS_SUCCESS)
++                      return (status);
++      }
++
++      /* Save IP port name */
++      memcpy(ipdev->port_name, port_name, WWN_SIZE);
++
++      if (loop_id != PUBLIC_LOOP_DEVICE) {
++              /* Private loop device */
++              ipdev->loop_id = loop_id;
++              ipdev->flags = IP_DEV_FLAG_PRESENT;
++
++              DEBUG12(printk("%s: WWN:%02x%02x%02x%02x%02x%02x%02x%02x, "
++                              "LoopID:%x\n",
++                              __func__,
++                              ipdev->port_name[0],
++                              ipdev->port_name[1],
++                              ipdev->port_name[2],
++                              ipdev->port_name[3],
++                              ipdev->port_name[4],
++                              ipdev->port_name[5],
++                              ipdev->port_name[6],
++                              ipdev->port_name[7],
++                              ipdev->loop_id);)
++      }
++      else {
++              /* Public device */
++              /* Reserve public loop ID, save it in database */
++              status = qla2x00_reserve_loopid(ha, &ipdev->loop_id);
++              if (status == QL_STATUS_RESOURCE_ERROR) {
++                      struct ip_device *ipdev_bump;
++
++                      if (!force_add) { 
++                              /* Failed to get loop ID */
++                              DEBUG12(printk("%s: failed to get loop ID\n",
++                                              __func__);)
++                              qla2x00_free_ip_block(ha, ipdev);
++
++                              return (status);
++                      }
++
++                      /*
++                       * Out of loop IDs, bump public device at bottom of
++                       * list.
++                       */
++                      DEBUG12(printk("%s: bump device from IP list\n",
++                                      __func__);)
++
++                      for (ipdev_bump = ha->ipdev_db_bottom;
++                              ipdev_bump;
++                              ipdev_bump = ipdev_bump->last) {
++
++                              if (!(ipdev_bump->flags &
++                                              IP_DEV_FLAG_PUBLIC_DEVICE))
++                                      continue;
++
++                              /*
++                               * Do fabric logout, steal loop ID, free bumped
++                               * IP block.
++                               */
++                              qla2x00_ip_send_logout_port_iocb(ha,
++                                              ipdev_bump, ha_locked);
++                              ipdev->loop_id = ipdev_bump->loop_id;
++                              qla2x00_free_ip_block(ha, ipdev_bump);
++
++                              status = QL_STATUS_SUCCESS;
++                              break;
++                      }
++
++                      if (status != QL_STATUS_SUCCESS) {
++                              /* Failed to get loop ID */
++                              DEBUG12(printk("%s: failed to get loop ID\n",
++                                              __func__);)
++                              qla2x00_free_ip_block(ha, ipdev);
++
++                              return (status);
++                      }
++              }
++
++              /* Save device data */
++              ipdev->port_id[0] = port_id[0];
++              ipdev->port_id[1] = port_id[1];
++              ipdev->port_id[2] = port_id[2];
++              ipdev->flags = IP_DEV_FLAG_PUBLIC_DEVICE;
++
++              /* Login public device */
++              status = qla2x00_ip_send_login_port_iocb(ha, ipdev, ha_locked);
++              if (status == QL_STATUS_SUCCESS) {
++                      DEBUG12(printk("%s: "
++                                      "WWN:%02x%02x%02x%02x%02x%02x%02x%02x, "
++                                      "LoopID:%x, PortID:%x\n",
++                                      __func__,
++                                      ipdev->port_name[0],
++                                      ipdev->port_name[1],
++                                      ipdev->port_name[2],
++                                      ipdev->port_name[3],
++                                      ipdev->port_name[4],
++                                      ipdev->port_name[5],
++                                      ipdev->port_name[6],
++                                      ipdev->port_name[7],
++                                      ipdev->loop_id,
++                                      ipdev->port_id[2]<<16 |
++                                      ipdev->port_id[1]<<8 |
++                                      ipdev->port_id[0]);)
++              }
++              else {
++                      /* Login failed, return resources */
++                      qla2x00_free_loopid(ha, ipdev->loop_id);
++                      qla2x00_free_ip_block(ha, ipdev);
++              }
++      }
++
++      return (status);
++}
++
++/**
++ * qla2x00_free_ip_block() - Remove an IP device from the active IP list.
++ * @ha: SCSI driver HA context
++ * @ipdev: IP device to remove
++ */
++static void
++qla2x00_free_ip_block(scsi_qla_host_t *ha, struct ip_device *ipdev)
++{
++      /* Unhook IP device block from active list */
++      if (ipdev->last == NULL)
++              ha->ipdev_db_top = ipdev->next;
++      else
++              ipdev->last->next = ipdev->next;
++
++      if (ipdev->next == NULL)
++              ha->ipdev_db_bottom = ipdev->last;
++      else
++              ipdev->next->last = ipdev->last;
++
++      /* Add IP device block to free list */
++      ipdev->next = ha->ipdev_db_next_free;
++      ha->ipdev_db_next_free = ipdev;
++}
++
++/**
++ * qla2x00_reserve_ip_block() - Move an IP device to the IP device list.
++ * @ha: SCSI driver HA context
++ * @ipdevblk: reserved IP device to add 
++ *
++ * This routine will move the unused @ipdevblk from the free list to the top of
++ * the active IP device list.
++ *
++ * Returns QL_STATUS_SUCCESS if the operation succeeded.
++ */
++static int
++qla2x00_reserve_ip_block(scsi_qla_host_t *ha, struct ip_device **ipdevblk)
++{
++      struct ip_device *ipdev;
++
++      /* Get free IP device block */
++      ipdev = ha->ipdev_db_next_free;
++      if (ipdev) { 
++              /* Remove IP device block from free list */
++              ha->ipdev_db_next_free = ipdev->next;
++
++              /* Add IP device block to top of IP device list */
++              ipdev->next = ha->ipdev_db_top;
++              ipdev->last = NULL;
++              if (ha->ipdev_db_top == NULL)
++                      ha->ipdev_db_bottom = ipdev;
++              else
++                      ha->ipdev_db_top->last = ipdev;
++              ha->ipdev_db_top = ipdev;
++
++              *ipdevblk = ipdev;
++
++              return (QL_STATUS_SUCCESS);
++      }
++
++      /* Out of IP blocks */
++      DEBUG12(printk("%s: out of IP blocks\n", __func__);)
++
++      return (QL_STATUS_RESOURCE_ERROR);
++}
++
++/**
++ * qla2x00_update_ip_device_data() - Update IP device list with driver data.
++ * @ha: SCSI driver HA context
++ * @fcdev: SCSI driver FC device list
++ *
++ * This routine searchs for the device port name in the current IP database and
++ * updates the IP device list.
++ *
++ * If device found:
++ *    - Handle device movement between public and private loops
++ *    - Mark device present
++ *    - Log in device if necessary
++ * If device not found and private loop device:
++ *    - Insert the new entry in database
++ * If device not found and public IP device:
++ *    - Ignore device until packet received from device
++ *
++ * Returns QL_STATUS_SUCCESS if the operation succeeded.
++ */
++static int
++qla2x00_update_ip_device_data(scsi_qla_host_t *ha, fcdev_t *fcdev)
++{
++      int     status;
++      struct ip_device *ipdev;
++
++      status = 0;
++
++      if (!ha->flags.enable_ip) {
++              /* IP not enabled, just return */
++              return (QL_STATUS_SUCCESS);
++      }
++
++      /* Scan list of IP devices for match */
++      for (ipdev = ha->ipdev_db_top; ipdev; ipdev = ipdev->next) {
++              if (memcmp(fcdev->wwn, ipdev->port_name, WWN_SIZE))
++                      continue;
++
++              /* Found device in IP device list */
++              DEBUG12(printk("%s: already in IP list, port ID: %x\n",
++                              __func__,
++                              ipdev->port_id[2] << 16 |
++                               ipdev->port_id[1] << 8 |
++                               ipdev->port_id[0]);)
++
++              if (fcdev->flag != DEV_PUBLIC &&
++                      !(ipdev->flags & IP_DEV_FLAG_PUBLIC_DEVICE)) {
++                      /*
++                       * Device on private loop now, was on private loop
++                       * before.
++                       */
++                      DEBUG12(printk("%s: was private loop, now "
++                                      "private loop\n",
++                                      __func__);)
++
++                      /* Update private loop ID in database */
++                      ipdev->loop_id = fcdev->loop_id;
++                      ipdev->flags |= IP_DEV_FLAG_PRESENT;
++              }
++              else if (fcdev->flag != DEV_PUBLIC &&
++                              (ipdev->flags & IP_DEV_FLAG_PUBLIC_DEVICE)) {
++                      /*
++                       * Device on private loop now, was public device before.
++                       */
++                      DEBUG12(printk("%s: was public, now private loop\n",
++                                      __func__);)
++
++                      /*
++                       * If loop ID changed, logout device and free loop ID.
++                       */
++                      if (fcdev->loop_id != ipdev->loop_id) { 
++                              qla2x00_ip_send_logout_port_iocb(ha, ipdev, 0);
++                              qla2x00_free_loopid(ha, ipdev->loop_id);
++
++                              /*
++                               * Clear public device flag and save private
++                               * loop ID in database.
++                               */
++                              ipdev->flags &= ~IP_DEV_FLAG_PUBLIC_DEVICE;
++                              ipdev->loop_id = fcdev->loop_id;
++                      }
++                      ipdev->flags |= IP_DEV_FLAG_PRESENT;
++              }
++              else if (fcdev->flag == DEV_PUBLIC &&
++                              !(ipdev->flags & IP_DEV_FLAG_PUBLIC_DEVICE)) {
++                      /*
++                       * Device public now, was on private loop before.
++                       */
++                      DEBUG12(printk("%s: was private loop, now public\n",
++                                      __func__);)
++
++                      /*
++                       * Reserve public loop ID, save it in database.
++                       */
++                      status = qla2x00_reserve_loopid(ha, &ipdev->loop_id);
++                      if (status == QL_STATUS_SUCCESS) { 
++                              /*
++                               * Save port ID and set public device flag.
++                               */
++                              ipdev->port_id[0] = fcdev->d_id.r.d_id[0];
++                              ipdev->port_id[1] = fcdev->d_id.r.d_id[1];
++                              ipdev->port_id[2] = fcdev->d_id.r.d_id[2];
++                              ipdev->flags |= IP_DEV_FLAG_PUBLIC_DEVICE;
++
++                              /* Login public device */
++                              status = qla2x00_ip_send_login_port_iocb(ha,
++                                                      ipdev, 0);
++                      }
++                      if (status == QL_STATUS_RESOURCE_ERROR) {
++                              /* Out of loop IDs */
++                              ipdev->flags &= ~IP_DEV_FLAG_PUBLIC_DEVICE;
++                      }
++              }
++              else {
++                      /*
++                       * Device public now, was public device before.
++                       */
++                      DEBUG12(printk("%s: was public, now public\n",
++                                      __func__);)
++
++                      /* Check if port ID changed */
++                      if (ipdev->port_id[0] != fcdev->d_id.r.d_id[0] ||
++                              ipdev->port_id[1] != fcdev->d_id.r.d_id[1] ||
++                              ipdev->port_id[2] != fcdev->d_id.r.d_id[2]) {
++
++                              /* Save new port ID */
++                              ipdev->port_id[0] = fcdev->d_id.r.d_id[0];
++                              ipdev->port_id[1] = fcdev->d_id.r.d_id[1];
++                              ipdev->port_id[2] = fcdev->d_id.r.d_id[2];
++
++                              DEBUG12(printk("%s: Port ID changed\n",
++                                              __func__);)
++
++                              /* Logout public device */
++                              qla2x00_ip_send_logout_port_iocb(ha, ipdev, 0);
++                      }
++
++                      /* Login public device */
++                      status = qla2x00_ip_send_login_port_iocb(ha, ipdev, 0);
++                      if (status == QL_STATUS_RESOURCE_ERROR) {
++                              /* Out of loop IDs */
++                              ipdev->flags &= ~IP_DEV_FLAG_PUBLIC_DEVICE;
++                      }
++              }
++              return (status);
++      }
++
++      /* Device not found in database */
++      DEBUG12(printk("%s: device NOT in list\n", __func__);)
++
++      /* If private loop device, add device to IP list */
++      /* Public devices will be added as needed when packet received */
++      if (fcdev->flag != DEV_PUBLIC) {
++              /* Add (force) new private loop device to IP list */
++              status = qla2x00_add_new_ip_device(ha,
++                                      fcdev->loop_id,
++                                      NULL,
++                                      fcdev->wwn,
++                                      TRUE,
++                                      0);
++      }
++
++      /* The following code is temporary, until FARP supported */
++      /* Login all IP public devices for now */
++      if (fcdev->flag == DEV_PUBLIC) {
++              /* Add (don't force) new public device to IP list */
++              status = qla2x00_add_new_ip_device(ha,
++                                      PUBLIC_LOOP_DEVICE,
++                                      (uint8_t *)&fcdev->d_id,
++                                      fcdev->wwn,
++                                      FALSE,
++                                      0);
++      }
++
++      return (status);
++}
++
++/**
++ * qla2x00_ip_send_login_port_iocb() - Login to an IP device.
++ * @ha: SCSI driver HA context
++ * @ipdev: IP device to login to
++ * @ha_locked: Flag indicating if the function is called with the hardware lock
++ *
++ * This routine will build and send a mailbox IOCB to login to a fabric port.
++ *
++ * The qla2x00_ip_mailbox_iocb_done() routine will be called upon IOCB
++ * completion, where further processing is performed.
++ *
++ * Returns QL_STATUS_SUCCESS if the operation succeeded.
++ */
++static int
++qla2x00_ip_send_login_port_iocb(scsi_qla_host_t *ha,
++                              struct ip_device *ipdev, uint32_t ha_locked)
++{
++      unsigned long   flags = 0;
++      struct mbx_entry *mbxentry;
++
++      DEBUG12(printk("%s: port ID: %x\n",
++                      __func__,
++                      ipdev->port_id[2]<<16 |
++                      ipdev->port_id[1]<<8 |
++                      ipdev->port_id[0]);)
++
++      /* Send marker if required */
++      if (ha->marker_needed != 0) {
++              if (ha_locked) {
++                      if(__qla2x00_marker(ha,
++                                      0, 0, MK_SYNC_ALL) != QLA2X00_SUCCESS)
++                              return (QL_STATUS_ERROR);
++              }
++              else {
++                      if(qla2x00_marker(ha,
++                                      0, 0, MK_SYNC_ALL) != QLA2X00_SUCCESS)
++                              return (QL_STATUS_ERROR);
++              }
++              ha->marker_needed = 0;
++      }
++
++      if (!ha_locked)
++              spin_lock_irqsave(&ha->hardware_lock, flags);
++
++      mbxentry = (struct mbx_entry *)qla2x00_req_pkt(ha);
++      if (mbxentry == NULL) {
++              DEBUG12(printk("%s: failed\n", __func__);)
++
++              if (!ha_locked)
++                      spin_unlock_irqrestore(&ha->hardware_lock, flags);
++
++              return (QL_STATUS_ERROR);
++      }
++
++      /* Build fabric login MBX IOCB */
++      mbxentry->entry_type = ET_MAILBOX_COMMAND;
++      mbxentry->entry_count = 1;
++      mbxentry->sys_define1 = SOURCE_IP;
++      mbxentry->entry_status = 0;
++      mbxentry->handle = cpu_to_le32(ipdev->index |
++                              (MBC_LOGIN_FABRIC_PORT << 16));
++      mbxentry->loop_id = ipdev->loop_id;
++      mbxentry->mb0 = __constant_cpu_to_le16(MBC_LOGIN_FABRIC_PORT);
++      mbxentry->mb1 = cpu_to_le16((ipdev->loop_id << 8) | 
++                              (MBC_NO_PROCESS_LOGIN |
++                               MBC_NO_PLOGI_IF_LOGGED_IN));
++      mbxentry->mb2 = cpu_to_le16(ipdev->port_id[2]);
++      mbxentry->mb3 = cpu_to_le16((ipdev->port_id[1] << 8) |
++                              ipdev->port_id[0]);
++      mbxentry->mb6 = __constant_cpu_to_le16(0);
++      mbxentry->mb7 = __constant_cpu_to_le16(0);
++
++      /* Issue command to ISP */
++      qla2x00_isp_cmd(ha);
++
++      if (!ha_locked)
++              spin_unlock_irqrestore(&ha->hardware_lock, flags);
++
++      return (QL_STATUS_SUCCESS);
++}
++
++/**
++ * qla2x00_ip_send_logout_port_iocb() - Logout an IP device.
++ * @ha: SCSI driver HA context
++ * @ipdev: IP device to logout
++ * @ha_locked: Flag indicating if the function is called with the hardware lock
++ *
++ * This routine will build and send a mailbox IOCB to logout a fabric port.
++ *
++ * The qla2x00_ip_mailbox_iocb_done() routine will be called upon IOCB
++ * completion, where further processing is performed.
++ *
++ * Returns QL_STATUS_SUCCESS if the operation succeeded.
++ */
++static int
++qla2x00_ip_send_logout_port_iocb(scsi_qla_host_t *ha,
++                              struct ip_device *ipdev, uint32_t ha_locked)
++{
++      unsigned long   flags = 0;
++      struct mbx_entry *mbxentry;
++
++      DEBUG12(printk("%s: port ID: %x\n",
++                      __func__,
++                      ipdev->port_id[2]<<16 |
++                      ipdev->port_id[1]<<8 |
++                      ipdev->port_id[0]);)
++
++      /* Send marker if required */
++      if (ha->marker_needed != 0) {
++              if (ha_locked) {
++                      if(__qla2x00_marker(ha,
++                                      0, 0, MK_SYNC_ALL) != QLA2X00_SUCCESS)
++                              return (QL_STATUS_ERROR);
++              }
++              else {
++                      if(qla2x00_marker(ha,
++                                      0, 0, MK_SYNC_ALL) != QLA2X00_SUCCESS)
++                              return (QL_STATUS_ERROR);
++              }
++              ha->marker_needed = 0;
++      }
++
++      if (!ha_locked)
++              spin_lock_irqsave(&ha->hardware_lock, flags);
++
++      mbxentry = (struct mbx_entry *)qla2x00_req_pkt(ha);
++      if (mbxentry == NULL) {
++              DEBUG12(printk("%s: failed\n", __func__);)
++
++              if (!ha_locked)
++                      spin_unlock_irqrestore(&ha->hardware_lock, flags);
++
++              return (QL_STATUS_ERROR);
++      }
++
++      /* Build fabric logout MBX IOCB */
++      mbxentry->entry_type = ET_MAILBOX_COMMAND;
++      mbxentry->entry_count = 1;
++      mbxentry->sys_define1 = SOURCE_IP;
++      mbxentry->entry_status = 0;
++      mbxentry->handle = cpu_to_le32(ipdev->index |
++                              (MBC_LOGOUT_FABRIC_PORT << 16));
++      mbxentry->loop_id = ipdev->loop_id;
++      mbxentry->mb0 = __constant_cpu_to_le16(MBC_LOGOUT_FABRIC_PORT);
++      mbxentry->mb1 = cpu_to_le16(ipdev->loop_id << 8);
++      mbxentry->mb2 = __constant_cpu_to_le16(0);
++      mbxentry->mb3 = __constant_cpu_to_le16(0);
++      mbxentry->mb6 = __constant_cpu_to_le16(0);
++      mbxentry->mb7 = __constant_cpu_to_le16(0);
++
++      /* Issue command to ISP */
++      qla2x00_isp_cmd(ha);
++
++      if (!ha_locked)
++              spin_unlock_irqrestore(&ha->hardware_lock, flags);
++
++      return (QL_STATUS_SUCCESS);
++}
++
++/**
++ * qla2x00_ip_mailbox_iocb_done() - Process an mailbox IOCB completion.
++ * @ha: SCSI driver HA context
++ * @mbxentry: completed mailbox IOCB entry
++ *
++ * This routine is currently used for fabric login and logouts only.
++ */
++static void
++qla2x00_ip_mailbox_iocb_done(scsi_qla_host_t *ha, struct mbx_entry *mbxentry)
++{
++      int             status;
++      uint16_t        cmd;
++      uint16_t        index;
++      struct ip_device *ipdev;
++// FIXME: endianess?
++      /* Parse-out originating mailbox command */
++      cmd = MSW(mbxentry->handle);
++
++      DEBUG12(printk("%s: cmd %x, status %x, mb0 %x, mb1 %x, mb2 %x\n",
++                      __func__,
++                      cmd,
++                      mbxentry->status,
++                      mbxentry->mb0,
++                      mbxentry->mb1,
++                      mbxentry->mb2);)
++
++      /* Get device block pointer */
++      index = LSW(mbxentry->handle);
++      if (index >= QLLAN_MAX_IP_DEVICES) {
++              /* Bad handle from ISP */
++              DEBUG12(printk("%s: bad handle from isp\n", __func__);)
++
++              /* TODO: Cleanup??? */
++
++              return;
++      }
++
++      ipdev = &ha->ipdev_db[index];
++
++      if (cmd == MBC_LOGOUT_FABRIC_PORT) {
++              /* Check fabric logout completion status */
++              if (/*mbxentry->status == CS_COMPLETE && */
++                      mbxentry->mb0 == MBS_COMMAND_COMPLETE) {
++
++                      /* Logout successful -- do nothing */
++              }
++              else {
++                      DEBUG12(printk("%s: fabric logout failed\n", __func__);)
++              }
++      }
++      else {
++              /* Check fabric login completion status */
++              /* Note: sometimes ISP returns Status=0x30 and MB0=0x4000 */
++              /* Therefore, only check mb0 for now */
++              if (/* mbxentry->status == CS_COMPLETE && */
++                      mbxentry->mb0 == MBS_COMMAND_COMPLETE) {
++
++                      /* Login successful */
++                      ipdev->flags |= IP_DEV_FLAG_PRESENT;
++              }
++              else if (mbxentry->mb0 == MBS_PORT_ID_IN_USE) {
++                      /* Different loop ID already assigned to port ID */
++                      /* Use the one that is already assigned */
++                      qla2x00_free_loopid(ha, ipdev->loop_id);
++                      ipdev->loop_id = mbxentry->mb1;
++
++                      /* Do logout first and then relogin */
++                      qla2x00_ip_send_logout_port_iocb(ha, ipdev, 1);
++                      qla2x00_ip_send_login_port_iocb(ha, ipdev, 1);
++              }
++              else if (mbxentry->mb0 == MBS_LOOP_ID_IN_USE) {
++                      /* Loop ID already used for different port ID */
++                      /* Get a new loop ID and reissue login request */
++                      status = qla2x00_reserve_loopid(ha, &ipdev->loop_id);
++                      if (status == QL_STATUS_SUCCESS) {
++                              qla2x00_ip_send_login_port_iocb(ha, ipdev, 1);
++                      }
++                      else {
++                              DEBUG12(printk("%s: out of loop IDs\n",
++                                              __func__);)
++
++                              qla2x00_free_ip_block(ha, ipdev);
++                      }
++              }
++              else {
++                      /* Login failed, return resources */
++                      DEBUG12(printk("%s: fabric login failed\n", __func__);)
++
++                      qla2x00_free_loopid(ha, ipdev->loop_id);
++                      qla2x00_free_ip_block(ha, ipdev);
++              }
++      }
++}
++
++
++/**
++ * qla2x00_ip_inquiry() - Discover IP-capable adapters.
++ * @adapter_num: adapter number to check (instance)
++ * @inq_data: return bd_inquiry data of the discovered adapter
++ *
++ * This routine is called by the IP driver to discover adapters that support IP
++ * and to get adapter parameters from the SCSI driver.
++ *
++ * Returns TRUE if the specified adapter supports IP.
++ */
++#if defined (ISP2200)
++int
++qla2200_ip_inquiry(uint16_t adapter_num, struct bd_inquiry *inq_data)
++#elif defined(ISP2300)
++int
++qla2300_ip_inquiry(uint16_t adapter_num, struct bd_inquiry *inq_data)
++#endif
++{
++      int     found;
++      struct list_head *hal;
++      scsi_qla_host_t *ha;
++
++      /* Verify structure size and version */
++      if ((inq_data->length != BDI_LENGTH) ||
++              (inq_data->version != BDI_VERSION)) {
++
++              DEBUG12(printk("%s: incompatable structure\n", __func__);)
++              return (FALSE);
++      }
++
++      /* Find the specified host adapter */
++      ha = NULL;
++      found = 0;
++      read_lock(&qla_hostlist_lock);
++      list_for_each(hal, &qla_hostlist) {
++              ha = list_entry(hal, scsi_qla_host_t, list);
++
++              if (ha->instance == adapter_num) {
++                      found++;
++                      break;
++              }
++      }
++      read_unlock(&qla_hostlist_lock);
++
++      if (found) {
++              if (!ha->flags.online)
++                      return (FALSE);
++
++              DEBUG12(printk("%s: found adapter %d\n",
++                              __func__,
++                              adapter_num);)
++
++              /* Return inquiry data to backdoor IP driver */
++              set_bit(BDI_IP_SUPPORT, &inq_data->options);
++              if (ha->flags.enable_64bit_addressing)
++                      set_bit(BDI_64BIT_ADDRESSING, &inq_data->options);
++              inq_data->ha = ha;                
++              inq_data->risc_rec_q = ha->risc_rec_q;
++              inq_data->risc_rec_q_size = IP_BUFFER_QUEUE_DEPTH;
++              inq_data->link_speed = ha->current_speed;
++              memcpy(inq_data->port_name, ha->ip_port_name, WWN_SIZE);
++              inq_data->pdev = ha->pdev;
++              inq_data->ip_enable_routine = qla2x00_ip_enable;
++              inq_data->ip_disable_routine = qla2x00_ip_disable;
++              inq_data->ip_add_buffers_routine = qla2x00_add_buffers;
++              inq_data->ip_send_packet_routine = qla2x00_send_packet;
++              inq_data->ip_tx_timeout_routine = qla2x00_tx_timeout;
++              return (TRUE);
++      }
++      return (FALSE);
++}
++
++/**
++ * qla2x00_ip_enable() - Create IP-driver/SCSI-driver IP connection.
++ * @ha: SCSI driver HA context
++ * @enable_data: bd_enable data describing the IP connection
++ *
++ * This routine is called by the IP driver to enable an IP connection to the
++ * SCSI driver and to pass in IP driver parameters.
++ *
++ * The HA context is propagated with the specified @enable_data and the
++ * Firmware is initialized for IP support.
++ * 
++ * Returns TRUE if the IP connection was successfully enabled.
++ */
++static int
++qla2x00_ip_enable(scsi_qla_host_t *ha, struct bd_enable *enable_data)
++{
++      int status;
++
++      DEBUG12(printk("%s: enable adapter %d\n", __func__, (int)ha->host_no);)
++
++      status = FALSE;
++
++      /* Verify structure size and version and adapter online */
++      if (!(ha->flags.online) ||
++              (enable_data->length != BDE_LENGTH) ||
++              (enable_data->version != BDE_VERSION)) {
++
++              DEBUG12(printk("%s: incompatable structure or offline\n",
++                              __func__);)
++              return (status);
++      }
++
++      /* Save parameters from IP driver */
++      ha->mtu = enable_data->mtu;
++      ha->header_size = enable_data->header_size;
++      ha->receive_buffers = enable_data->receive_buffers;
++      ha->max_receive_buffers = enable_data->max_receive_buffers;
++      ha->receive_buff_data_size = enable_data->receive_buff_data_size;
++      if (test_bit(BDE_NOTIFY_ROUTINE, &enable_data->options)) {
++              ha->notify_routine = enable_data->notify_routine;
++              ha->notify_context = enable_data->notify_context;
++      }
++      ha->send_completion_routine = enable_data->send_completion_routine;
++      ha->receive_packets_routine = enable_data->receive_packets_routine;
++      ha->receive_packets_context = enable_data->receive_packets_context;
++
++      /* Enable RISC IP support */
++      status = qla2x00_ip_initialize(ha);
++      if (!status) {
++              DEBUG12(printk("%s: IP initialization failed", __func__);)
++              ha->notify_routine = NULL;
++      }
++      return (status);
++}
++
++/**
++ * qla2x00_ip_disable() - Remove IP-driver/SCSI-driver IP connection.
++ * @ha: SCSI driver HA context
++ *
++ * This routine is called by the IP driver to disable a previously created IP
++ * connection.
++ *
++ * A Firmware call to disable IP support is issued.
++ */
++static void
++qla2x00_ip_disable(scsi_qla_host_t *ha)
++{
++      int     rval;
++      static mbx_cmd_t mc;
++      mbx_cmd_t *mcp = &mc;
++
++      DEBUG12(printk("%s: disable adapter %d\n", __func__, (int)ha->host_no);)
++
++      /* Wait for a ready state from the adapter */
++      while (!ha->init_done || ha->dpc_active) {
++              set_current_state(TASK_INTERRUPTIBLE);
++              schedule_timeout(HZ);
++      }
++
++      /* Disable IP support */
++      ha->flags.enable_ip = FALSE;
++
++      mcp->mb[0] = MBC_DISABLE_IP;
++      mcp->out_mb = MBX_0;
++      mcp->in_mb = MBX_0;
++      mcp->tov = 30;
++      mcp->flags = 0;
++      rval = qla2x00_mailbox_command(ha, mcp);
++      if (rval == QL_STATUS_SUCCESS) {
++              /* IP disabled successful */
++              DEBUG12(printk(KERN_INFO
++                              "%s: successful\n", __func__);)
++      }
++      else {
++              DEBUG12(printk(KERN_WARNING
++                              "%s: MBC_DISABLE_IP failed\n", __func__);)
++      }
++
++      /* Reset IP parameters */
++      ha->rec_entries_in = 0;
++      ha->rec_entries_out = 0;
++      ha->notify_routine = NULL;
++}
++
++/**
++ * qla2x00_add_buffers() - Adds buffers to the receive buffer queue.
++ * @ha: SCSI driver HA context
++ * @rec_count: The number of receive buffers to add to the queue
++ * @ha_locked: Flag indicating if the function is called with the hardware lock
++ *
++ * This routine is called by the IP driver to pass new buffers to the receive
++ * buffer queue.
++ */
++static void
++qla2x00_add_buffers(scsi_qla_host_t *ha, uint16_t rec_count, int ha_locked)
++{
++      int             i;
++      uint16_t        rec_in;
++      uint16_t        handle;
++      unsigned long   flags = 0;
++      device_reg_t    *reg;
++      struct risc_rec_entry *risc_rec_q;
++      struct buffer_cb *bcbs;
++
++      flags = 0;
++      risc_rec_q = ha->risc_rec_q;
++      rec_in = ha->rec_entries_in;
++      bcbs = ha->receive_buffers;
++
++      /* Set RISC owns buffer flag on new entries */
++      for (i = 0; i < rec_count; i++) {
++              handle = risc_rec_q[rec_in].handle;
++              set_bit(BCB_RISC_OWNS_BUFFER, &(bcbs[handle].state));
++              if (rec_in < IP_BUFFER_QUEUE_DEPTH - 1)
++                      rec_in++;
++              else
++                      rec_in = 0;
++      }
++      
++      /* Update RISC buffer pointer */
++      if (!ha_locked)
++              spin_lock_irqsave(&ha->hardware_lock, flags);
++
++      reg = ha->iobase;
++      WRT_REG_WORD(&reg->mailbox8, rec_in);
++      ha->rec_entries_in = rec_in;
++
++      if (!ha_locked)
++              spin_unlock_irqrestore(&ha->hardware_lock, flags);
++}
++
++/**
++ * qla2x00_send_packet() - Transmit a send_cb.
++ * @ha: SCSI driver HA context
++ * @scb: The send_cb structure to send
++ *
++ * This routine is called by the IP driver to pass @scb (IP packet) to the ISP
++ * for transmission.
++ *
++ * Returns QL_STATUS_SUCCESS if @scb was sent, QL_STATUS_RESOURCE_ERROR if the
++ * RISC was too busy to send, or QL_STATUS_ERROR.
++ */
++static int
++qla2x00_send_packet(scsi_qla_host_t *ha, struct send_cb *scb)
++{
++      int             i;
++      uint16_t        cnt;
++      uint16_t        temp;
++      uint32_t        handle;
++      unsigned long   flags;
++      struct ip_cmd_entry *ipcmd_entry;
++      struct sk_buff  *skb;
++      device_reg_t    *reg;
++
++      DEBUG12(printk("%s: enter\n", __func__);)
++
++      skb = scb->skb;
++      reg = ha->iobase;
++
++      /* Check adapter state */
++      if (!ha->flags.online) {
++              return (QL_STATUS_ERROR);
++      }
++
++      /* Send marker if required */
++      if (ha->marker_needed != 0) {
++              if(qla2x00_marker(ha, 0, 0, MK_SYNC_ALL) != QLA2X00_SUCCESS) {
++                      printk(KERN_WARNING
++                              "%s: Unable to issue marker.\n",
++                              __func__);
++                      return (QL_STATUS_ERROR);
++              }
++              ha->marker_needed = 0;
++      }
++
++      /* Acquire ring specific lock */
++      spin_lock_irqsave(&ha->hardware_lock, flags);
++
++      if (ha->req_q_cnt < 4) {
++              /* Update number of free request entries */
++              cnt = qla2x00_debounce_register(ISP_REQ_Q_OUT(reg));
++              if (ha->req_ring_index < cnt)
++                      ha->req_q_cnt = cnt - ha->req_ring_index;
++              else
++                      ha->req_q_cnt = REQUEST_ENTRY_CNT -
++                                              (ha->req_ring_index - cnt);
++      }
++
++      if (ha->req_q_cnt >= 4) {
++              /* Get tag handle for command */
++              handle = ha->current_scb_q_idx;
++              for (i = 0; i < MAX_SEND_PACKETS; i++) {
++                      handle++;
++                      if (handle == MAX_SEND_PACKETS)
++                              handle = 0;
++                      if (ha->active_scb_q[handle] == NULL) {
++                              ha->current_scb_q_idx = handle;
++                              goto found_handle;
++                      }
++              }
++      }
++
++      /* Low on resources, try again later */
++      spin_unlock_irqrestore(&ha->hardware_lock, flags);
++      printk(KERN_WARNING
++              "%s: Low on resources, try again later...\n",
++              __func__);
++
++      return (QL_STATUS_RESOURCE_ERROR);
++
++found_handle:
++
++      /* Build ISP command packet */
++      ipcmd_entry = (struct ip_cmd_entry *)ha->request_ring_ptr;
++
++      /* OPTIMIZATION ??? */
++      /* Throughput increases an additional 10 Mbps with the following code */
++      *((uint32_t *)(&ipcmd_entry->entry_type)) = 
++                       __constant_cpu_to_le32(ET_IP_COMMAND_64 | (1 << 8));
++      //ipcmd_entry->entry_type = ET_IP_COMMAND_64;
++      //ipcmd_entry->entry_count = 1;
++      //ipcmd_entry->sys_define = 0;
++      //ipcmd_entry->entry_status = 0;
++      
++      ipcmd_entry->handle = handle;
++      ipcmd_entry->reserved_1 = 0;
++
++      /* Get destination loop ID for packet */
++      if (!qla2x00_get_ip_loopid(ha, scb->header, &ipcmd_entry->loop_id)) {
++              /* Failed to get loop ID, convert packet to ARP */
++              if (qla2x00_convert_to_arp(ha, scb)) {
++                      /* Broadcast ARP */
++                      ipcmd_entry->loop_id = BROADCAST;
++              }
++              else {
++                      /* Return packet */
++                      spin_unlock_irqrestore(&ha->hardware_lock, flags);
++                      printk(KERN_WARNING
++                              "%s: Unable to determine loop id for "
++                              "destination.\n",
++                              __func__);
++                      return (QL_STATUS_ERROR);
++              }
++      }
++
++      /* Default five second firmware timeout */
++      ipcmd_entry->timeout = __constant_cpu_to_le16(5);
++      ipcmd_entry->control_flags = __constant_cpu_to_le16(CF_WRITE);
++      ipcmd_entry->reserved_2 = 0;
++      ipcmd_entry->service_class = __constant_cpu_to_le16(0);
++
++      ipcmd_entry->data_seg_count = __constant_cpu_to_le16(2);
++      ipcmd_entry->ds.data_segs64[0].address[0] =
++                      cpu_to_le32(LSD(scb->header_dma));
++      ipcmd_entry->ds.data_segs64[0].address[1] =
++                      cpu_to_le32(MSD(scb->header_dma));
++      ipcmd_entry->ds.data_segs64[0].length =
++                      __constant_cpu_to_le32(sizeof(struct packet_header));
++      scb->skb_data_dma = pci_map_single(ha->pdev,
++                                      skb->data, skb->len,
++                                      PCI_DMA_TODEVICE);
++      ipcmd_entry->ds.data_segs64[1].address[0] =
++                      cpu_to_le32(LSD(scb->skb_data_dma));
++      ipcmd_entry->ds.data_segs64[1].address[1] =
++                      cpu_to_le32(MSD(scb->skb_data_dma));
++      ipcmd_entry->ds.data_segs64[1].length = cpu_to_le32(skb->len);
++
++      ipcmd_entry->byte_count =
++                      cpu_to_le32(skb->len + sizeof(struct packet_header));
++
++      /* Adjust ring index. */
++      ha->req_ring_index++;
++      if (ha->req_ring_index == REQUEST_ENTRY_CNT) {
++              ha->req_ring_index = 0;
++              ha->request_ring_ptr = ha->request_ring;
++      } else
++              ha->request_ring_ptr++;
++
++      ha->ipreq_cnt++;
++      ha->req_q_cnt--;
++      ha->active_scb_q[handle] = scb;
++
++      /* Set chip new ring index. */
++      temp = CACHE_FLUSH(ISP_REQ_Q_IN(reg));
++      WRT_REG_WORD(ISP_REQ_Q_IN(reg), ha->req_ring_index);
++
++      spin_unlock_irqrestore(&ha->hardware_lock, flags);
++
++      return (QL_STATUS_SUCCESS);
++}
++
++/**
++ * qla2x00_tx_timeout() - Handle transmission timeout.
++ * @ha: SCSI driver HA context
++ *
++ * This routine is called by the IP driver to handle packet transmission
++ * timeouts.
++ *
++ * Returns QL_STATUS_SUCCESS if timeout handling completed successfully.
++ */
++static int
++qla2x00_tx_timeout(scsi_qla_host_t *ha)
++{
++      /* TODO: complete interface */
++
++      /* Reset RISC firmware for basic recovery */
++      printk(KERN_WARNING
++              "%s: A transmission timeout occured - aborting ISP\n",
++              __func__);
++      set_bit(ISP_ABORT_NEEDED, &ha->dpc_flags);
++
++      return (QL_STATUS_SUCCESS);
++}
+--- /dev/null  Thu Apr 11 07:25:15 2002
++++ linux-2.5.73-n9560/drivers/scsi/qla2xxx/qla_ip.h   Thu Jul  3 15:34:42 2003
+@@ -0,0 +1,420 @@
++/******************************************************************************
++ *                  QLOGIC LINUX SOFTWARE
++ *
++ * QLogic ISP2x00 IP network driver for Linux 2.5.x
++ * Copyright (C) 2003 Qlogic Corporation
++ * (www.qlogic.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, 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.
++ *
++ ******************************************************************************/
++
++/****************************************************************************
++              Please see revision.notes for revision history.
++*****************************************************************************/
++
++#if !defined(_QLA_IP_H_)
++#define _QLA_IP_H_
++
++#define MAX_SEND_PACKETS              32      /* Maximum # send packets */
++#define MAX_RECEIVE_BUFFERS           64      /* Maximum # receive buffers */
++#define MIN_RECEIVE_BUFFERS           8       /* Minimum # receive buffers */
++#define IP_BUFFER_QUEUE_DEPTH         (MAX_RECEIVE_BUFFERS+1)
++
++/* Async notification types */
++#define NOTIFY_EVENT_LINK_DOWN                1       /* Link went down */
++#define NOTIFY_EVENT_LINK_UP          2       /* Link is back up */
++#define NOTIFY_EVENT_RESET_DETECTED   3       /* Reset detected */
++
++/* QLogic subroutine status definitions */
++#define QL_STATUS_SUCCESS             0
++#define QL_STATUS_ERROR                       1
++#define QL_STATUS_FATAL_ERROR         2
++#define QL_STATUS_RESOURCE_ERROR      3
++#define QL_STATUS_LOOP_ID_IN_USE      4
++#define QL_STATUS_NO_DATA             5
++
++/************************************************************************/
++/* RFC 2625 -- networking structure definitions                         */
++/************************************************************************/
++
++/* Network header definitions */
++struct network_address
++{
++#if defined(__LITTLE_ENDIAN_BITFIELD)
++      __u16   unused:12,
++              naa:4;
++#elif defined (__BIG_ENDIAN_BITFIELD)
++      __u16   naa:4,
++              unused:12;
++#else
++#error  "Please fix <asm/byteorder.h>"
++#endif
++
++#define NAA_IEEE_MAC_TYPE     1               /* NAA code - IEEE MAC addr */
++
++      __u8    addr[6];
++};
++
++struct network_header
++{
++      union
++      {
++              struct network_address  na;
++              __u8    fcaddr[8];
++      } d;
++
++      union
++      {
++              struct network_address  na;
++              __u8    fcaddr[8];
++      } s;
++};
++
++/* SNAP header definitions */
++/* from linux/if_fc.h */
++struct snap_header
++{
++      __u8  dsap;                             /* destination SAP */
++      __u8  ssap;                             /* source SAP */
++#define LLC_SAP_IEEE_802DOT2  0xAA            /* LLC SAP code - IEEE 802.2 */
++
++      __u8  llc;                              /* LLC control field */
++#define LLC_CONTROL           0x03            /* LLC control code */
++
++      __u8  protid[3];                        /* protocol id */
++#define SNAP_OUI              0x00            /* SNAP OUI code */
++
++      __u16 ethertype;                        /* ether type field */
++};
++
++/* Packet header definitions */
++struct packet_header
++{
++      struct network_header   networkh;
++      struct snap_header      snaph;
++};
++
++/* ARP header definitions */
++/* from linux/if_arp.h */
++struct arp_header
++{
++      struct arphdr   arph;
++      __u8            ar_sha[ETH_ALEN];       /* sender hardware address */
++      __u32           ar_sip;                 /* sender IP address */
++        __u8          ar_tha[ETH_ALEN];       /* target hardware address */
++      __u32           ar_tip;                 /* target IP address */
++};
++
++/* IP header definitions */
++struct ip_header
++{
++      struct iphdr    iph;
++      __u32           options;                /* IP packet options */
++};
++
++
++/************************************************************************/
++/* Support structures.                                                  */
++/************************************************************************/
++
++/* Definitions for IP support */
++#define LOOP_ID_MASK          0x00FF
++#define PLE_NOT_SCSI_DEVICE   0x8000          /* Upper bit of loop ID set */
++                                              /*  if not SCSI */
++
++/* Receive buffer control block definitions */
++struct buffer_cb
++{
++      uint16_t        handle;                 /* ISP buffer handle */
++      uint16_t        comp_status;            /* completion status from FW */
++
++      uint32_t        state;                  /* Buffer CB state */
++#define BCB_RISC_OWNS_BUFFER  1
++
++      struct sk_buff  *skb;                   /* Socket buffer */
++      uint8_t         *skb_data;              /* Socket buffer data */
++      dma_addr_t      skb_data_dma;           /* SKB data physical address */
++      uint32_t        rec_data_size;          /* Size of received data */
++      uint32_t        packet_size;            /* Size of packet received */
++
++      uint16_t        linked_bcb_cnt;         /* # of linked CBs for packet */
++      uint16_t        unused2;
++      struct buffer_cb *next_bcb;             /* Next buffer CB */
++};
++
++/* Send control block definitions */
++struct send_cb
++{
++      uint16_t        comp_status;            /* completion status from FW */
++#define SCB_CS_COMPLETE               0x0             
++#define SCB_CS_INCOMPLETE     0x1
++#define SCB_CS_RESET          0x4
++#define SCB_CS_ABORTED                0x5
++#define SCB_CS_TIMEOUT                0x6
++#define SCB_CS_PORT_UNAVAILABLE       0x28
++#define SCB_CS_PORT_LOGGED_OUT        0x29
++#define SCB_CS_PORT_CONFIG_CHG        0x2A
++#define SCB_CS_FW_RESOURCE_UNAVAILABLE        0x2C
++
++      uint16_t        unused1;
++
++      void            *qdev;                  /* netdev private structure */
++
++      struct packet_header *header;           /* Network and SNAP headers */
++      dma_addr_t      header_dma;             /* Header physical address */
++
++      struct sk_buff  *skb;                   /* socket buffer to send */
++      dma_addr_t      skb_data_dma;           /* skb data physical address */
++};
++
++/* IP device data structure */
++#define QLLAN_MAX_IP_DEVICES  64      /* Maximum number of IP devices */
++
++struct ip_device
++{
++      uint16_t        index;
++      uint16_t        unused1;
++
++      uint32_t        flags;
++#define IP_DEV_FLAG_PRESENT           0x00000001 
++#define IP_DEV_FLAG_PUBLIC_DEVICE     0x00000002
++
++      uint16_t        loop_id;
++#define PUBLIC_LOOP_DEVICE            ((uint16_t)-1)
++
++      uint16_t        unused2;
++      uint8_t         port_id[3];
++      uint8_t         unused3;
++      uint8_t         port_name[8]; 
++
++      struct ip_device *next;
++      struct ip_device *last;
++};
++
++/************************************************************************/
++/* Definitions for Backdoor Inquiry.                                   */
++/************************************************************************/
++
++struct bd_inquiry
++{
++      uint16_t        length;                 /* Length of structure */
++#define BDI_LENGTH            sizeof(struct bd_inquiry)
++
++      uint16_t        version;                /* Structure version number */
++/* NOTE: Update this value anytime the structure changes */
++#define BDI_VERSION           2
++
++                                              /* Exports */
++      uint32_t        options;                /*  supported options */
++#define BDI_IP_SUPPORT                1               /*   IP supported */
++#define BDI_64BIT_ADDRESSING  2               /*   64bit address supported */
++
++      void            *ha;                    /*  Driver ha pointer */
++      void            *risc_rec_q;            /*  RISC receive queue */
++      uint16_t        risc_rec_q_size;        /*   size */
++
++      uint16_t        link_speed;             /* Current link speed */
++#define BDI_1GBIT_PORTSPEED   1               /*   operating at 1GBIT */
++#define BDI_2GBIT_PORTSPEED   2               /*   operating at 2GBIT */
++#define BDI_10GBIT_PORTSPEED  4               /*   operating at 10GBIT */
++
++      uint8_t         port_name[8];           /*  Adapter port name */
++
++      struct pci_dev  *pdev;                  /* PCI device information */
++
++      /* Pointers to SCSI-backdoor callbacks */
++      void            *ip_enable_routine;
++      void            *ip_disable_routine;
++      void            *ip_add_buffers_routine;
++      void            *ip_send_packet_routine;
++      void            *ip_tx_timeout_routine;
++
++      uint32_t        unused2[9];
++};
++
++/************************************************************************/
++/* Definitions for Backdoor Enable.                                    */
++/************************************************************************/
++
++struct bd_enable
++{
++      uint16_t        length;                 /* Length of structure */
++#define BDE_LENGTH            sizeof(struct bd_enable)
++
++      uint16_t        version;                /* Structure version number */
++/* NOTE: Update this value anytime the structure changes */
++#define BDE_VERSION           2
++
++                                              /* Imports */
++      uint32_t        options;                /*  supported options */
++#define BDE_NOTIFY_ROUTINE    1               /*  notify routine imported */
++
++      uint32_t        mtu;                    /*  maximum transfer size */
++      uint16_t        header_size;            /*  split header size */
++      uint16_t        unused1;
++
++      void            *receive_buffers;       /*  receive buffers array */
++      uint16_t        max_receive_buffers;    /*  max # receive buffers */
++      uint16_t        unused2;
++      uint32_t        receive_buff_data_size; /*  buffer size */
++
++      /* Pointers to IP-backdoor callbacks */
++      void            *notify_routine;
++      void            *notify_context;
++      void            *send_completion_routine;
++      void            *receive_packets_routine;
++      void            *receive_packets_context;
++
++      uint32_t        unused3[9];
++};
++
++
++/************************************************************************/
++/* RISC interface structures                                            */
++/************************************************************************/
++
++/* IP mailbox commands */
++#define MBC_INITIALIZE_IP               0x0077
++#define MBC_DISABLE_IP                  0x0079
++
++/* IP async events */
++#define MBA_IP_TRANSMIT_COMPLETE        0x8022
++#define MBA_IP_RECEIVE_COMPLETE         0x8023
++#define MBA_IP_BROADCAST_RECEIVED       0x8024
++#define MBA_IP_RECEIVE_BUFFERS_LOW      0x8025
++#define MBA_IP_OUT_OF_BUFFERS           0x8026
++#define MBA_IP_RECEIVE_COMPLETE_SPLIT   0x8027
++
++/* IP fast post completions for 2300 */
++#define RHS_IP_SEND_COMPLETE            0x18
++#define RHS_IP_RECV_COMPLETE            0x19
++#define RHS_IP_RECV_DA_COMPLETE         0x1B
++
++/* RISC IP receive buffer queue entry structure */
++struct risc_rec_entry
++{
++      uint32_t        data_addr_low;
++      uint32_t        data_addr_high;
++      uint16_t        handle;
++      uint16_t        unused;
++};
++
++/* Firmware IP initialization control block definitions */
++struct ip_init_cb
++{
++      uint8_t         version;
++#define IPICB_VERSION                         0x01
++
++      uint8_t         reserved_1;
++
++      uint16_t        firmware_options;
++#define IPICB_OPTION_64BIT_ADDRESSING         0x0001
++#define IPICB_OPTION_NO_BROADCAST_FASTPOST    0x0002
++#define IPICB_OPTION_OUT_OF_BUFFERS_EVENT     0x0004
++
++      uint16_t        header_size;
++      uint16_t        mtu;
++      uint16_t        receive_buffer_size;
++      uint16_t        reserved_2;
++      uint16_t        reserved_3;
++      uint16_t        reserved_4;
++      uint16_t        reserved_5;
++
++      uint16_t        receive_queue_size;
++      uint16_t        low_water_mark;
++#define IPICB_LOW_WATER_MARK                  0
++
++      uint16_t        receive_queue_addr[4];
++      uint16_t        receive_queue_in;
++      uint16_t        fast_post_count;
++#define IPICB_FAST_POST_COUNT                 4
++
++      uint16_t        container_count;
++#define IPICB_BUFFER_CONTAINER_COUNT          64
++
++      uint16_t        resource_allocation;
++#define IPICB_IOCB_RESERVE_COUNT              250
++};
++
++
++/* IP IOCB types */
++
++/* Data segment descriptor structures */
++struct data_seg
++{
++      uint32_t        address;
++      uint32_t        length;
++};
++
++struct data_seg_a64
++{
++      uint32_t        address[2];
++      uint32_t        length;
++};
++
++/* IP Command IOCB structure */
++struct ip_cmd_entry
++{
++      uint8_t         entry_type;
++#define ET_IP_COMMAND_32              0x13
++#define ET_IP_COMMAND_64              0x1B
++
++      uint8_t         entry_count;
++      uint8_t         sys_define;
++      uint8_t         entry_status;
++
++      uint32_t        handle;
++      uint8_t         reserved_1;
++      uint8_t         loop_id;
++      uint16_t        comp_status;
++      uint16_t        control_flags;
++      uint16_t        reserved_2;
++      uint16_t        timeout;
++      uint16_t        data_seg_count;
++      uint16_t        service_class;
++      uint16_t        reserved_3[7];
++      uint32_t        byte_count;
++      union
++      {
++              struct data_seg         data_segs[3];
++              struct data_seg_a64     data_segs64[2];
++      } ds;
++};
++
++/* IP Receive IOCB structure */
++#define ET_IP_RECEIVE_CONTINUATION  0x2B
++
++struct ip_rec_entry
++{
++      uint8_t         entry_type;
++#define ET_IP_RECEIVE                 0x23
++
++      uint8_t         entry_count;
++      uint8_t         segment_count;
++      uint8_t         entry_status;
++
++      uint16_t        s_idlow;
++      uint8_t         s_idhigh;
++      uint8_t         reserved_1;
++      uint8_t         reserved_2;
++      uint8_t         loop_id;
++      uint16_t        comp_status;
++#define IPREC_STATUS_SPLIT_BUFFER     0x0001
++
++      uint16_t        service_class;
++      uint16_t        sequence_length;
++
++#define IPREC_MAX_HANDLES             24
++      uint16_t        buffer_handles[IPREC_MAX_HANDLES];
++};
++
++#endif /* _QLA_IP_H_ */
+--- /dev/null  Thu Apr 11 07:25:15 2002
++++ linux-2.5.73-n9560/drivers/scsi/qla2xxx/qla_isr.c  Thu Jul  3 15:34:42 2003
+@@ -0,0 +1,1474 @@
++/*
++ *                  QLOGIC LINUX SOFTWARE
++ *
++ * QLogic ISP2x00 device driver for Linux 2.5.x
++ * Copyright (C) 2003 Qlogic Corporation
++ * (www.qlogic.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, 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 "qla_os.h"
++
++#include "qla_def.h"
++
++static void qla2x00_mbx_completion(scsi_qla_host_t *, uint16_t);
++static void qla2x00_async_event(scsi_qla_host_t *, uint32_t);
++static void qla2x00_process_completed_request(struct scsi_qla_host *, int);
++static void qla2x00_response_pkt(scsi_qla_host_t *, uint16_t);
++static void qla2x00_status_entry(scsi_qla_host_t *, sts_entry_t *);
++static void qla2x00_status_cont_entry(scsi_qla_host_t *, sts_cont_entry_t *);
++static void qla2x00_error_entry(scsi_qla_host_t *, response_t *);
++static void qla2x00_ms_entry(scsi_qla_host_t *, ms_iocb_entry_t *);
++
++static int qla2x00_check_sense(Scsi_Cmnd *cp, os_lun_t *);
++
++/**
++ * qla2x00_intr_handler() - Process interrupts for the ISP.
++ * @irq:
++ * @dev_id: SCSI driver HA context
++ * @regs:
++ *
++ * Called by system whenever the host adapter generates an interrupt.
++ *
++ * Returns handled flag.
++ */
++irqreturn_t
++qla2x00_intr_handler(int irq, void *dev_id, struct pt_regs *regs)
++{
++      scsi_qla_host_t *ha;
++      device_reg_t    *reg;
++      uint32_t        mbx;
++      uint16_t        stat;
++      int             status = 0;
++      unsigned long   flags = 0;
++      unsigned long   mbx_flags = 0;
++      unsigned long   intr_iter;
++
++      /* Don't loop forever, interrupt are OFF */
++      intr_iter = 50; 
++
++      ha = (scsi_qla_host_t *) dev_id;
++      if (!ha) {
++              printk(KERN_INFO
++                  "%s(): NULL host pointer\n", __func__);
++              return (IRQ_NONE);
++      }
++
++      reg = ha->iobase;
++
++      spin_lock_irqsave(&ha->hardware_lock, flags);
++
++      for (;;) {
++              /* Relax CPU! */
++              if (!(intr_iter--))
++                      break;
++
++#if defined(ISP2100) || defined(ISP2200)
++              if ((RD_REG_WORD(&reg->istatus) & ISR_RISC_INT) == 0) {
++                      break;
++              }
++
++              if (RD_REG_WORD(&reg->semaphore) & BIT_0) {
++                      WRT_REG_WORD(&reg->hccr, HCCR_CLR_RISC_INT);
++
++                      /* Get mailbox data. */
++                      mbx = RD_REG_WORD(&reg->mailbox0);
++                      if (mbx > 0x3fff && mbx < 0x8000) {
++                              qla2x00_mbx_completion(ha, (uint16_t)mbx);
++                              status |= MBX_INTERRUPT;
++                      } else if (mbx > 0x7fff && mbx < 0xc000) {
++                              qla2x00_async_event(ha, mbx);
++                      } else {
++                              /*EMPTY*/
++                              DEBUG2(printk("scsi(%ld): Unrecognized "
++                                  "interrupt type (%d)\n",
++                                  ha->host_no, mbx));
++                      }
++                      /* Release mailbox registers. */
++                      WRT_REG_WORD(&reg->semaphore, 0);
++              } else {
++                      stat = RD_REG_WORD(&reg->mailbox5);
++                      qla2x00_response_pkt(ha, stat);
++
++                      WRT_REG_WORD(&reg->hccr, HCCR_CLR_RISC_INT);
++              }
++
++#else /* ISP2300 */
++              if ((ha->pdev->device == QLA2312_DEVICE_ID ||
++                  ha->pdev->device == QLA2322_DEVICE_ID) &&
++                  (RD_REG_WORD(&reg->istatus) & ISR_RISC_INT) == 0) {
++                      break;
++              }
++
++              stat = RD_REG_WORD(&reg->host_status_lo);
++              if ((stat & HSR_INT) == 0) {
++                      break;
++              }
++              if (stat & HSR_RISC_PAUSED) {
++                      uint16_t hccr;
++
++                      hccr = RD_REG_WORD(&reg->hccr);
++                      printk(KERN_INFO
++                          "scsi(%ld): RISC paused, dumping HCCR (%x)\n",
++                          ha->host_no,
++                          hccr);
++
++                      /*
++                       * Issue a "HARD" reset in order for the RISC interrupt
++                       * bit to be cleared.  Schedule a big hammmer to get
++                       * out of the RISC PAUSED state.
++                       */
++                      WRT_REG_WORD(&reg->hccr, HCCR_RESET_RISC);
++                      set_bit(ISP_ABORT_NEEDED, &ha->dpc_flags);
++                      break;
++              }
++              mbx = RD_REG_WORD(&reg->host_status_hi);
++              switch (stat & 0xff) {
++              case 0x1:
++              case 0x2:
++              case 0x10:
++              case 0x11:
++                      qla2x00_mbx_completion(ha, (uint16_t)mbx);
++                      status |= MBX_INTERRUPT;
++
++                      /* Release mailbox registers. */
++                      WRT_REG_WORD(&reg->semaphore, 0);
++                      break;
++              case 0x12:
++                      qla2x00_async_event(ha, mbx);
++                      break;
++              case 0x13:
++                      qla2x00_response_pkt(ha, (uint16_t)mbx);
++                      break;
++              case 0x16:
++                      mbx = mbx << 16 | MBA_SCSI_COMPLETION;
++                      qla2x00_async_event(ha, mbx);
++                      break;
++#if defined(FC_IP_SUPPORT)
++              case 0x18:
++                      WRT_REG_WORD(&reg->hccr, HCCR_CLR_RISC_INT);
++                      qla2x00_ip_send_complete(ha, mbx, CS_COMPLETE);
++                      continue;
++                      break;
++              case 0x19:
++                      qla2x00_ip_receive_fastpost(ha,
++                          MBA_IP_RECEIVE_COMPLETE);
++                      break;
++              case 0x1b:
++                      qla2x00_ip_receive_fastpost(ha,
++                          MBA_IP_RECEIVE_COMPLETE_SPLIT);
++                      break;
++#endif
++              default:
++                      DEBUG2(printk("scsi(%ld): Unrecognized interrupt type "
++                          "(%d)\n",
++                          ha->host_no, stat & 0xff));
++                      break;
++              }
++
++              WRT_REG_WORD(&reg->hccr, HCCR_CLR_RISC_INT);
++#endif
++      }
++
++      spin_unlock_irqrestore(&ha->hardware_lock, flags);
++
++      ha->total_isr_cnt++;
++
++      if (test_bit(MBX_INTR_WAIT, &ha->mbx_cmd_flags) &&
++          (status & MBX_INTERRUPT) && ha->flags.mbox_int) {
++
++              /* There was a mailbox completion */
++              DEBUG3(printk("%s(%ld): Going to get mbx reg lock.\n",
++                  __func__, ha->host_no));
++
++              QLA_MBX_REG_LOCK(ha);
++
++              MBOX_TRACE(ha, BIT_5);
++              if (ha->mcp == NULL) {
++                      DEBUG3(printk("%s(%ld): Error mbx pointer.\n",
++                          __func__, ha->host_no));
++              } else {
++                      DEBUG3(printk("%s(%ld): Going to set mbx intr flags. "
++                          "cmd=%x.\n",
++                          __func__, ha->host_no, ha->mcp->mb[0]));
++              }
++              set_bit(MBX_INTERRUPT, &ha->mbx_cmd_flags);
++
++              DEBUG3(printk("%s(%ld): Going to wake up mbx function for "
++                  "completion.\n",
++                  __func__, ha->host_no));
++
++              MBOX_TRACE(ha,BIT_6);
++              up(&ha->mbx_intr_sem);
++
++              DEBUG3(printk("%s(%ld): Going to release mbx reg lock.\n",
++                  __func__, ha->host_no));
++              QLA_MBX_REG_UNLOCK(ha);
++      }
++
++      if (!list_empty(&ha->done_queue))
++              schedule_work(&ha->run_qla_task);
++
++      /* Wakeup the DPC routine */
++      if ((!ha->flags.mbox_busy &&
++          (test_bit(ISP_ABORT_NEEDED, &ha->dpc_flags) ||
++              test_bit(RESET_MARKER_NEEDED, &ha->dpc_flags) ||
++              test_bit(LOOP_RESYNC_NEEDED, &ha->dpc_flags))) &&
++                  ha->dpc_wait && !ha->dpc_active) {
++
++              up(ha->dpc_wait);
++      }
++
++      return (IRQ_HANDLED);
++}
++
++/**
++ * qla2x00_mbx_completion() - Process mailbox command completions.
++ * @ha: SCSI driver HA context
++ * @mb0: Mailbox0 register
++ */
++static void
++qla2x00_mbx_completion(scsi_qla_host_t *ha, uint16_t mb0)
++{
++      uint16_t                cnt;
++      uint16_t                *wptr;
++      device_reg_t            *reg = ha->iobase;
++
++      ENTER(__func__);
++
++      /* Load return mailbox registers. */
++      ha->flags.mbox_int = TRUE;
++      ha->mailbox_out[0] = mb0;
++      wptr = (uint16_t *)&reg->mailbox1;
++
++      for (cnt = 1; cnt < MAILBOX_REGISTER_COUNT; cnt++) {
++#if defined(ISP2200)
++              if (cnt == 8) 
++                      wptr = (uint16_t *)&reg->mailbox8;
++#endif
++              if (cnt == 4 || cnt == 5)
++                      ha->mailbox_out[cnt] = qla2x00_debounce_register(wptr);
++              else
++                      ha->mailbox_out[cnt] = RD_REG_WORD(wptr);
++      
++              wptr++;
++      }
++
++      if (ha->mcp) {
++              DEBUG3(printk("%s(%ld): Got mailbox completion. cmd=%x.\n",
++                  __func__, ha->host_no, ha->mcp->mb[0]));
++      } else {
++              DEBUG2_3(printk("%s(%ld): MBX pointer ERROR!\n",
++                  __func__, ha->host_no));
++      }
++
++      LEAVE(__func__);
++}
++
++/**
++ * qla2x00_async_event() - Process aynchronous events.
++ * @ha: SCSI driver HA context
++ * @mb0: Mailbox0 register
++ */
++static void
++qla2x00_async_event(scsi_qla_host_t *ha, uint32_t mbx)
++{
++      uint32_t        index;
++      uint16_t        mb[4];
++      device_reg_t    *reg = ha->iobase;
++      uint8_t         rscn_queue_index;
++
++      ENTER(__func__);
++
++      /* Setup to process completions */
++      mb[0] = LSW(mbx);
++      switch(mb[0]) {
++      case MBA_SCSI_COMPLETION:       /* Fast Post */
++#if defined(ISP2100) || defined(ISP2200)
++              mb[1] = RD_REG_WORD(&reg->mailbox1);
++#else
++              mb[1] = MSW(mbx);
++#endif
++              mb[2] = RD_REG_WORD(&reg->mailbox2);
++
++              DEBUG5(printk("%s(): mailbox response completion.\n",
++                  __func__));
++
++              if (!ha->flags.online)
++                      break;
++
++              /* Get outstanding command index  */
++              index = (uint32_t)(mb[2] << 16 | mb[1]);
++              qla2x00_process_completed_request(ha, index);
++              break;
++
++#if defined(FC_IP_SUPPORT)
++      case MBA_IP_TRANSMIT_COMPLETE:  /* IP Completion */
++              mb[1] = RD_REG_WORD(&reg->mailbox1);
++
++              qla2x00_ip_send_complete(ha, mb[1], CS_COMPLETE);
++              break;
++
++      case MBA_IP__RECEIVE_COMPLETE:
++      case MBA_IP_RECEIVE_COMPLETE_SPLIT:
++              qla2x00_ip_receive_fastpost(ha, mb[0]);
++              break;
++#endif /* FC_IP_SUPPORT */
++
++      case MBA_RESET:                 /* Reset */
++              DEBUG2(printk("scsi(%ld): Asynchronous RESET.\n", ha->host_no));
++
++              set_bit(RESET_MARKER_NEEDED, &ha->dpc_flags);
++              break;
++
++      case MBA_SYSTEM_ERR:            /* System Error */
++              mb[1] = RD_REG_WORD(&reg->mailbox1);
++              mb[2] = RD_REG_WORD(&reg->mailbox2);
++              mb[3] = RD_REG_WORD(&reg->mailbox3);
++
++              printk(KERN_INFO
++                  "scsi(%ld): ISP System Error - mbx1=%xh mbx2=%xh "
++                  "mbx3=%xh.\n",
++                  ha->host_no, mb[1], mb[2], mb[3]);
++
++              qla2x00_dump_isp(ha, 1);
++
++              set_bit(ISP_ABORT_NEEDED, &ha->dpc_flags);
++              break;
++
++      case MBA_REQ_TRANSFER_ERR:      /* Request Transfer Error */
++              DEBUG2(printk("scsi(%ld): ISP Request Transfer Error.\n",
++                  ha->host_no));
++              printk(KERN_WARNING
++                  "scsi(%ld): ISP Request Transfer Error.\n", ha->host_no);
++
++              set_bit(ISP_ABORT_NEEDED, &ha->dpc_flags);
++              break;
++
++      case MBA_RSP_TRANSFER_ERR:      /* Response Transfer Error */
++              DEBUG2(printk("scsi(%ld): ISP Response Transfer Error.\n",
++                  ha->host_no));
++              printk(KERN_WARNING
++                  "scsi(%ld): ISP Response Transfer Error.\n", ha->host_no);
++
++              set_bit(ISP_ABORT_NEEDED, &ha->dpc_flags);
++              break;
++
++      case MBA_WAKEUP_THRES:          /* Request Queue Wake-up */
++              DEBUG2(printk("scsi(%ld): Asynchronous WAKEUP_THRES.\n",
++                  ha->host_no));
++              break;
++
++      case MBA_LIP_OCCURRED:          /* Loop Initialization Procedure */
++              mb[1] = RD_REG_WORD(&reg->mailbox1);
++
++              DEBUG2(printk("scsi(%ld): Asynchronous LIP Occured.\n",
++                  ha->host_no));
++              printk(KERN_INFO
++                  "scsi(%ld): Asynchronous LIP Occured.\n", ha->host_no);
++
++              /* Save LIP sequence. */
++              ha->lip_seq = mb[1];
++              if (ha->loop_state != LOOP_DOWN) {
++                      ha->loop_state = LOOP_DOWN;
++                      atomic_set(&ha->loop_down_timer, LOOP_DOWN_TIME);
++                      qla2x00_mark_all_devices_lost(ha);
++              }
++
++              set_bit(COMMAND_WAIT_NEEDED, &ha->dpc_flags);
++              set_bit(REGISTER_FC4_NEEDED, &ha->dpc_flags);
++
++              ha->flags.management_server_logged_in = 0;
++
++              /* Update AEN queue. */
++              if (ha->ioctl->flags & IOCTL_AEN_TRACKING_ENABLE) {
++                      qla2x00_enqueue_aen(ha, MBA_LIP_OCCURRED, NULL);
++              }
++
++              ha->total_lip_cnt++;
++              break;
++
++      case MBA_LOOP_UP:               /* Loop Up Event */
++              mb[1] = RD_REG_WORD(&reg->mailbox1);
++
++              DEBUG2(printk("scsi(%ld): Asynchronous LOOP UP.\n",
++                  ha->host_no));
++              printk(KERN_INFO
++                  "scsi(%ld): LOOP UP detected.\n", ha->host_no);
++
++              ha->flags.management_server_logged_in = 0;
++
++              /* Update AEN queue. */
++              if (ha->ioctl->flags & IOCTL_AEN_TRACKING_ENABLE) {
++                      qla2x00_enqueue_aen(ha, MBA_LOOP_UP, NULL);
++              }
++
++              /* Save the current speed for use by ioctl and IP driver */
++              ha->current_speed = EXT_DEF_PORTSPEED_1GBIT;
++#if defined(ISP2300)
++              if (mb[1] == 1)
++                      ha->current_speed = EXT_DEF_PORTSPEED_2GBIT;
++#endif
++              break;
++
++      case MBA_LOOP_DOWN:             /* Loop Down Event */
++              DEBUG2(printk("scsi(%ld): Asynchronous LOOP DOWN.\n",
++                  ha->host_no));
++              printk(KERN_INFO
++                  "scsi(%ld): LOOP DOWN detected.\n", ha->host_no);
++
++              if (ha->loop_state != LOOP_DOWN) {
++                      ha->loop_state = LOOP_DOWN;
++                      atomic_set(&ha->loop_down_timer, LOOP_DOWN_TIME);
++                      qla2x00_mark_all_devices_lost(ha);
++              }
++
++              ha->flags.management_server_logged_in = 0;
++              ha->current_speed = 0; /* reset value */
++
++              /* Update AEN queue. */
++              if (ha->ioctl->flags & IOCTL_AEN_TRACKING_ENABLE) {
++                      qla2x00_enqueue_aen(ha, MBA_LOOP_DOWN, NULL);
++              }
++              break;
++
++      case MBA_LIP_RESET:             /* LIP reset occurred */
++              DEBUG2(printk("scsi(%ld): Asynchronous LIP RESET.\n",
++                  ha->host_no));
++              printk(KERN_INFO
++                  "scsi(%ld): LIP reset occured.\n", ha->host_no);
++
++              if (ha->loop_state != LOOP_DOWN) {
++                      ha->loop_state = LOOP_DOWN;
++                      atomic_set(&ha->loop_down_timer, LOOP_DOWN_TIME);
++                      qla2x00_mark_all_devices_lost(ha);
++              }
++
++              set_bit(COMMAND_WAIT_NEEDED, &ha->dpc_flags);
++              set_bit(RESET_MARKER_NEEDED, &ha->dpc_flags);
++
++              ha->operating_mode = LOOP;
++              ha->flags.management_server_logged_in = 0;
++
++              /* Update AEN queue. */
++              if (ha->ioctl->flags & IOCTL_AEN_TRACKING_ENABLE) {
++                      qla2x00_enqueue_aen(ha, MBA_LIP_RESET, NULL);
++              }
++
++              ha->total_lip_cnt++;
++              break;
++
++#if !defined(ISP2100)
++      case MBA_LINK_MODE_UP:          /* Link mode up. */
++              DEBUG2(printk("scsi(%ld): Asynchronous LINK MODE UP.\n",
++                  ha->host_no));
++              printk(KERN_INFO
++                  "scsi(%ld): Link mode is up.\n",
++                  ha->host_no);
++
++              /*
++               * Until there's a transition from loop down to loop up, treat
++               * this as loop down only.
++               */
++              if (ha->loop_state != LOOP_DOWN) {
++                      ha->loop_state = LOOP_DOWN;
++                      if (!atomic_read(&ha->loop_down_timer))
++                              atomic_set(&ha->loop_down_timer,
++                                  LOOP_DOWN_TIME);
++                      qla2x00_mark_all_devices_lost(ha);
++              }
++
++              if (!(test_bit(ABORT_ISP_ACTIVE, &ha->dpc_flags))) {
++                      set_bit(COMMAND_WAIT_NEEDED, &ha->dpc_flags);
++                      set_bit(RESET_MARKER_NEEDED, &ha->dpc_flags);
++              }
++              set_bit(REGISTER_FC4_NEEDED, &ha->dpc_flags);
++              break;
++
++      case MBA_UPDATE_CONFIG:         /* Update Configuration. */
++              mb[1] = RD_REG_WORD(&reg->mailbox1);
++
++              DEBUG2(printk("scsi(%ld): Asynchronous UPDATE CONFIG.\n",
++                  ha->host_no));
++              printk(KERN_INFO
++                  "scsi(%ld): Configuration change detected: value=%x.\n",
++                  ha->host_no, mb[1]);
++
++              if (ha->loop_state != LOOP_DOWN) {
++                      ha->loop_state = LOOP_DOWN;  
++                      if (!atomic_read(&ha->loop_down_timer))
++                              atomic_set(&ha->loop_down_timer,
++                                  LOOP_DOWN_TIME);
++                      qla2x00_mark_all_devices_lost(ha);
++              }
++
++              set_bit(LOOP_RESYNC_NEEDED, &ha->dpc_flags);
++              set_bit(LOCAL_LOOP_UPDATE, &ha->dpc_flags);
++              break;
++#endif        /* #if !defined(ISP2100) */
++
++      case MBA_PORT_UPDATE:           /* Port database update */
++              /*
++               * If PORT UPDATE is global (recieved LIP_OCCURED/LIP_RESET
++               * event etc. earlier indicating loop is down) then process
++               * it.  Otherwise ignore it and Wait for RSCN to come in.
++               */
++              if (ha->loop_state != LOOP_DOWN) {
++                      DEBUG2(printk("scsi(%ld): Asynchronous PORT UPDATE "
++                          "ignored.\n", ha->host_no));
++                      printk(KERN_INFO
++                          "scsi(%ld): Asynchronous PORT UPDATE ignored.\n",
++                          ha->host_no);
++                      break;
++              }
++
++              DEBUG2(printk("scsi(%ld): Asynchronous PORT UPDATE.\n",
++                  ha->host_no));
++              printk(KERN_INFO
++                  "scsi(%ld): Port database changed.\n", ha->host_no);
++
++              /*
++               * Mark all devices as missing so we will login again.
++               */
++              ha->loop_state = LOOP_UP;
++
++              atomic_set(&ha->loop_down_timer, 0);
++              qla2x00_mark_all_devices_lost(ha);
++
++              ha->flags.rscn_queue_overflow = 1;
++
++              set_bit(LOOP_RESYNC_NEEDED, &ha->dpc_flags);
++              set_bit(LOCAL_LOOP_UPDATE, &ha->dpc_flags);
++
++              /* Update AEN queue. */
++              if (ha->ioctl->flags & IOCTL_AEN_TRACKING_ENABLE) {
++                      qla2x00_enqueue_aen(ha, MBA_PORT_UPDATE, NULL);
++              }
++              break;
++
++      case MBA_SCR_UPDATE:            /* State Change Registration */
++              mb[1] = RD_REG_WORD(&reg->mailbox1);
++              mb[2] = RD_REG_WORD(&reg->mailbox2);
++
++              DEBUG2(printk("scsi(%ld): Asynchronous RSCR UPDATE.\n",
++                  ha->host_no));
++              DEBUG(printk(KERN_INFO
++                  "scsi(%ld): RSCN database changed - 0x%x, 0x%x.\n",
++                  ha->host_no, mb[1], mb[2]));
++
++              rscn_queue_index = ha->rscn_in_ptr + 1;
++              if (rscn_queue_index == MAX_RSCN_COUNT)
++                      rscn_queue_index = 0;
++              if (rscn_queue_index != ha->rscn_out_ptr) {
++                      ha->rscn_queue[ha->rscn_in_ptr].format =
++                          MSB(mb[1]);
++                      ha->rscn_queue[ha->rscn_in_ptr].d_id.b.domain =
++                          LSB(mb[1]);
++                      ha->rscn_queue[ha->rscn_in_ptr].d_id.b.area =
++                          MSB(mb[2]);
++                      ha->rscn_queue[ha->rscn_in_ptr].d_id.b.al_pa =
++                          LSB(mb[2]);
++                      ha->rscn_in_ptr = rscn_queue_index;
++              } else {
++                      ha->flags.rscn_queue_overflow = 1;
++              }
++
++              ha->loop_state = LOOP_UPDATE;
++              atomic_set(&ha->loop_down_timer, 0);
++              ha->flags.management_server_logged_in = 0;
++
++              set_bit(LOOP_RESYNC_NEEDED, &ha->dpc_flags);
++              set_bit(RSCN_UPDATE, &ha->dpc_flags);
++
++              /* Update AEN queue. */
++              if (ha->ioctl->flags & IOCTL_AEN_TRACKING_ENABLE) {
++                      qla2x00_enqueue_aen(ha, MBA_RSCN_UPDATE, &mb[0]);
++              }
++              break;
++      }
++}
++
++/**
++ * qla2x00_process_completed_request() - Process a Fast Post response.
++ * @ha: SCSI driver HA context
++ * @index: SRB index
++ */
++static void
++qla2x00_process_completed_request(struct scsi_qla_host *ha, int index)
++{
++      srb_t *sp;
++      struct scsi_qla_host *vis_ha;
++
++      ENTER(__func__);
++
++      /* Validate handle. */
++      if (index >= MAX_OUTSTANDING_COMMANDS) {
++              DEBUG2(printk("scsi(%ld): Invalid SCSI completion handle %d.\n",
++                  ha->host_no, index));
++              printk(KERN_WARNING
++                  "scsi(%ld): Invalid SCSI completion handle %d.\n",
++                  ha->host_no, index);
++
++              set_bit(ISP_ABORT_NEEDED, &ha->dpc_flags);
++              return;
++      }
++
++      sp = ha->outstanding_cmds[index];
++      if (sp) {
++              /* Free outstanding command slot. */
++              ha->outstanding_cmds[index] = 0;
++#if defined(IOCB_THROLLE_USAGE)
++              ha->iocb_cnt -= sp->iocb_cnt;
++#endif
++              vis_ha = (scsi_qla_host_t *)sp->cmd->device->host->hostdata;
++              if (ha->actthreads)
++                      ha->actthreads--;
++              sp->lun_queue->out_cnt--;
++              sp->flags |= SRB_ISP_COMPLETED;
++              CMD_COMPL_STATUS(sp->cmd) = 0L;
++              CMD_SCSI_STATUS(sp->cmd) = 0L;
++
++              /* Save ISP completion status */
++              CMD_RESULT(sp->cmd) = DID_OK << 16;
++              sp->fo_retry_cnt = 0;
++              add_to_done_queue(ha, sp);
++      } else {
++              DEBUG2(printk("scsi(%ld): Invalid ISP SCSI completion handle\n",
++                  ha->host_no));
++              printk(KERN_WARNING
++                  "scsi(%ld): Invalid ISP SCSI completion handle\n",
++                  ha->host_no);
++
++              set_bit(ISP_ABORT_NEEDED, &ha->dpc_flags);
++      }
++
++      LEAVE(__func__);
++}
++
++/**
++ * qla2x00_response_pkt() - Process response queue entries.
++ * @ha: SCSI driver HA context
++ * @index: Response queue out pointer
++ */
++static void
++qla2x00_response_pkt(scsi_qla_host_t *ha, uint16_t index) 
++{
++      device_reg_t    *reg = ha->iobase;
++      response_t      *pkt;
++
++      ENTER(__func__);
++
++      if (!ha->flags.online)
++              return;
++
++      if (index >= RESPONSE_ENTRY_CNT) {
++              /* Invalid response pointer value. */
++              DEBUG(printk("scsi(%ld): Response Pointer Error - index=%x.\n",
++                  ha->host_no, index));
++
++              set_bit(ISP_ABORT_NEEDED, &ha->dpc_flags);
++              return;
++      }
++
++      while (ha->rsp_ring_index != index) {
++              pkt = ha->response_ring_ptr;
++
++              DEBUG5(printk("%s(%ld): ha->rsp_ring_index=%ld index=%ld.\n",
++                  __func__, ha->host_no,
++                  (u_long)ha->rsp_ring_index, (u_long)index));
++              DEBUG5(printk("%s(%ld): response packet data:",
++                  __func__, ha->host_no));
++              DEBUG5(qla2x00_dump_buffer((uint8_t *)pkt,
++                  RESPONSE_ENTRY_SIZE));
++
++              ha->rsp_ring_index++;
++              if (ha->rsp_ring_index == RESPONSE_ENTRY_CNT) {
++                      ha->rsp_ring_index = 0;
++                      ha->response_ring_ptr = ha->response_ring;
++              } else {
++                      ha->response_ring_ptr++;
++              }
++
++#if defined(FC_IP_SUPPORT)
++              /*
++               * This code is temporary until FW is fixed.  FW is mistakenly
++               * setting bit 6 on Mailbox IOCB response
++               */
++              pkt->entry_status &= 0x3f;
++#endif
++
++              if (pkt->entry_status != 0) {
++                      DEBUG3(printk(KERN_INFO
++                          "scsi(%ld): Process error entry.\n", ha->host_no));
++
++                      qla2x00_error_entry(ha, pkt);
++                      continue;
++              }
++
++              switch (pkt->entry_type) {
++              case STATUS_TYPE:
++                      qla2x00_status_entry(ha, (sts_entry_t *)pkt);
++                      break;
++
++              case STATUS_CONT_TYPE:
++                      qla2x00_status_cont_entry(ha, (sts_cont_entry_t *)pkt);
++                      break;
++
++              case MS_IOCB_TYPE:
++                      qla2x00_ms_entry(ha, (ms_iocb_entry_t *)pkt);
++                      break;
++
++#if defined(FC_IP_SUPPORT)
++              case ET_IP_COMMAND_64:
++                      /* Handle IP send completion */
++                      qla2x00_ip_send_complete(ha,
++                          pkt->handle, le16_to_cpu(pkt->comp_status));
++                      break;
++
++              case ET_IP_RECEIVE:
++                      /* Handle IP receive packet */
++                      qla2x00_ip_receive(ha, pkt);
++                      break;
++
++              case ET_MAILBOX_COMMAND:
++                  if (pkt->sys_define == SOURCE_IP) {
++                          qla2x00_ip_mailbox_iocb_done(ha,
++                              (struct mbx_entry *)pkt);
++                          break;
++                  }       
++#endif  /* FC_IP_SUPPORT */
++
++              default:
++                      /* Type Not Supported. */
++                      DEBUG4(printk(KERN_WARNING
++                          "scsi(%ld): Received unknown response pkt type %x "
++                          "entry status=%x.\n",
++                          ha->host_no, pkt->entry_type, pkt->entry_status));
++                      break;
++              }
++      }
++
++      /* Adjust ring index */
++      WRT_REG_WORD(ISP_RSP_Q_OUT(reg), ha->rsp_ring_index);
++
++      LEAVE(__func__);
++}
++
++/**
++ * qla2x00_status_entry() - Process a Status IOCB entry.
++ * @ha: SCSI driver HA context
++ * @pkt: Entry pointer
++ */
++static void
++qla2x00_status_entry(scsi_qla_host_t *ha, sts_entry_t *pkt ) 
++{
++      uint32_t        b, t, l;
++      scsi_qla_host_t *vis_ha;
++      srb_t           *sp;
++      os_lun_t        *lq;
++      os_tgt_t        *tq;
++      fc_port_t       *fcport;
++      Scsi_Cmnd       *cp;
++      uint16_t        comp_status;
++      uint16_t        scsi_status;
++      uint8_t         lscsi_status;
++      uint32_t        resid;
++      uint8_t         sense_sz = 0;
++
++
++      ENTER(__func__);
++
++      /* Validate handle. */
++      if (pkt->handle < MAX_OUTSTANDING_COMMANDS) {
++              sp = ha->outstanding_cmds[pkt->handle];
++              /* Free outstanding command slot. */
++              ha->outstanding_cmds[pkt->handle] = 0;
++      } else
++              sp = NULL;
++
++      if (sp == NULL) {
++              DEBUG2(printk("scsi(%ld): Status Entry invalid handle.\n",
++                  ha->host_no));
++              printk(KERN_WARNING
++                  "scsi(%ld): Status Entry invalid handle.\n", ha->host_no);
++
++              set_bit(ISP_ABORT_NEEDED, &ha->dpc_flags);
++              if (ha->dpc_wait && !ha->dpc_active) 
++                      up(ha->dpc_wait);
++              return;
++      }
++
++      cp = sp->cmd;
++      if (cp == NULL) {
++              DEBUG2(printk("scsi(%ld): Cmd already returned back to OS "
++                  "pkt->handle: %d sp=%p sp->state:%d\n",
++                  ha->host_no, pkt->handle, sp, sp->state));
++              printk(KERN_WARNING
++                  "scsi(%ld): Cmd is NULL: already returned to OS (sp=%p)\n",
++                  ha->host_no, sp);
++              return;
++      }
++
++      /*
++       * Set the visible adapter for lun Q access.
++       */
++      vis_ha = (scsi_qla_host_t *)cp->device->host->hostdata;
++      if (ha->actthreads)
++              ha->actthreads--;
++
++      if (sp->lun_queue == NULL) {
++              DEBUG2(printk("scsi(%ld): Status Entry invalid lun "
++                  "pointer.\n", ha->host_no));
++              printk(KERN_WARNING
++                  "scsi(%ld): Status Entry invalid lun pointer.\n",
++                  ha->host_no);
++
++              set_bit(ISP_ABORT_NEEDED, &ha->dpc_flags);
++              if (ha->dpc_wait && !ha->dpc_active) 
++                      up(ha->dpc_wait);
++              return;
++      }
++
++      sp->lun_queue->out_cnt--;
++#if defined(IOCB_THROLLE_USAGE)
++      ha->iocb_cnt -= sp->iocb_cnt;
++#endif
++
++      comp_status = le16_to_cpu(pkt->comp_status);
++      /* Mask of reserved bits 12-15.  Before we examine the scsi status */
++      scsi_status = le16_to_cpu(pkt->scsi_status) & SS_MASK;
++      lscsi_status = scsi_status & STATUS_MASK;
++
++      CMD_ENTRY_STATUS(cp) = pkt->entry_status;
++      CMD_COMPL_STATUS(cp) = comp_status;
++      CMD_SCSI_STATUS(cp) = scsi_status;
++
++      /* dg 10/11 */
++      sp->flags |= SRB_ISP_COMPLETED;
++
++      /* Generate LU queue on cntrl, target, LUN */
++      b = SCSI_BUS_32(cp);
++      t = SCSI_TCN_32(cp);
++      l = SCSI_LUN_32(cp);
++
++      tq = sp->tgt_queue;
++      lq = sp->lun_queue;
++
++      /*
++       * If loop is in transient state Report DID_BUS_BUSY
++       */
++      if (!(sp->flags & SRB_IOCTL) &&
++          (atomic_read(&ha->loop_down_timer) ||
++              ha->loop_state != LOOP_READY) &&
++          (comp_status != CS_COMPLETE || scsi_status != 0)) {
++
++              DEBUG2(printk("scsi(%ld:%d:%d:%d): Loop Not Ready - "
++                  "pid=%lx.\n",
++                  ha->host_no,
++                  b, t, l, sp->cmd->serial_number));
++
++              qla2x00_extend_timeout(sp->cmd, EXTEND_CMD_TIMEOUT);
++              add_to_retry_queue(ha, sp);
++              return;
++      }
++
++      /*
++       * Based on Host and scsi status generate status code for Linux
++       */
++      switch (comp_status) {
++      case CS_COMPLETE:
++              /*
++               * Host complted command OK.  Check SCSI Status to determine
++               * the correct Host status.
++               */
++              if (scsi_status == 0) {
++                      CMD_RESULT(cp) = DID_OK << 16;
++
++                      /* Perform any post command processing */
++                      qla2x00_filter_command(ha, sp);
++              } else {   /* Check for non zero scsi status */
++                      if (lscsi_status == SS_BUSY_CONDITION) {
++                              CMD_RESULT(cp) =
++                                  DID_BUS_BUSY << 16 | lscsi_status;
++                      } else {
++                              CMD_RESULT(cp) =
++                                  DID_OK << 16 | lscsi_status;
++
++                              if (lscsi_status != SS_CHECK_CONDITION)
++                                      break;
++
++                              /*
++                               * Copy Sense Data into sense buffer
++                               */
++                              memset(cp->sense_buffer,
++                                  0, sizeof(cp->sense_buffer));
++
++                              if (!(scsi_status & SS_SENSE_LEN_VALID))
++                                      break;
++
++                              if (le16_to_cpu(pkt->req_sense_length) <
++                                  CMD_SNSLEN(cp))
++                                      sense_sz =
++                                          le16_to_cpu(pkt->req_sense_length);
++                              else
++                                      sense_sz = CMD_SNSLEN(cp) - 1;
++
++                              CMD_ACTUAL_SNSLEN(cp) = sense_sz;
++                              sp->request_sense_length = sense_sz;
++                              sp->request_sense_ptr =
++                                  (void *)cp->sense_buffer;
++
++                              if (sp->request_sense_length > 32) 
++                                      sense_sz = 32;
++
++                              memcpy(cp->sense_buffer,
++                                  pkt->req_sense_data, sense_sz);
++
++                              sp->request_sense_ptr += sense_sz;
++                              sp->request_sense_length -= sense_sz;
++                              if (sp->request_sense_length != 0)
++                                      ha->status_srb = sp;
++
++                              if (!(sp->flags & SRB_IOCTL) &&
++                                  qla2x00_check_sense(cp, lq) ==
++                                      QL_STATUS_SUCCESS) {
++                                      /*
++                                       * Throw away status_cont if any
++                                       */
++                                      ha->status_srb = NULL;
++                                      add_to_scsi_retry_queue(ha, sp);
++                                      return;
++                              }
++
++                              DEBUG5(printk("%s(): Check condition Sense "
++                                  "data, scsi(%ld:%d:%d:%d) cmd=%p "
++                                  "pid=%ld\n",
++                                  __func__,
++                                  ha->host_no,
++                                  b, t, l,
++                                  cp, cp->serial_number));
++                              if (sense_sz)
++                                      DEBUG5(qla2x00_dump_buffer(
++                                          cp->sense_buffer,
++                                          CMD_ACTUAL_SNSLEN(cp)));
++                      }
++              }
++              break;
++
++      case CS_DATA_UNDERRUN:
++              DEBUG2(printk(KERN_INFO
++                  "scsi(%ld:%d:%d) UNDERRUN status detected 0x%x-0x%x.\n",
++                  ha->host_no,
++                  t, l, comp_status, scsi_status));
++
++              resid = le32_to_cpu(pkt->residual_length);
++              CMD_RESID_LEN(cp) = resid;
++
++              /*
++               * Check to see if SCSI Status is non zero.  If so report SCSI
++               * Status.
++               */
++              if (lscsi_status != 0) {
++                      if (lscsi_status == SS_BUSY_CONDITION) {
++                              CMD_RESULT(cp) =
++                                  DID_BUS_BUSY << 16 | lscsi_status;
++                      } else {
++                              CMD_RESULT(cp) =
++                                  DID_OK << 16 | lscsi_status;
++
++                              if (lscsi_status != SS_CHECK_CONDITION)
++                                      break;
++
++                              /*
++                               * Copy Sense Data into sense buffer
++                               */
++                              memset(cp->sense_buffer,
++                                  0, sizeof(cp->sense_buffer));
++
++                              if (!(scsi_status & SS_SENSE_LEN_VALID))
++                                      break;
++
++                              if (le16_to_cpu(pkt->req_sense_length) <
++                                  CMD_SNSLEN(cp))
++                                      sense_sz =
++                                          le16_to_cpu(pkt->req_sense_length);
++                              else
++                                      sense_sz = CMD_SNSLEN(cp) - 1;
++
++                              CMD_ACTUAL_SNSLEN(cp) = sense_sz;
++                              sp->request_sense_length = sense_sz;
++                              sp->request_sense_ptr =
++                                  (void *)cp->sense_buffer;
++
++                              if (sp->request_sense_length > 32) 
++                                      sense_sz = 32;
++
++                              memcpy(cp->sense_buffer,
++                                  pkt->req_sense_data, sense_sz);
++
++                              sp->request_sense_ptr += sense_sz;
++                              sp->request_sense_length -= sense_sz;
++                              if (sp->request_sense_length != 0)
++                                      ha->status_srb = sp;
++
++                              if (!(sp->flags & SRB_IOCTL) &&
++                                  (qla2x00_check_sense(cp, lq) ==
++                                      QL_STATUS_SUCCESS)) {
++                                      ha->status_srb = NULL;
++                                      add_to_scsi_retry_queue(ha,sp);
++                                      return;
++                              }
++
++                              DEBUG5(printk("%s(): Check condition Sense "
++                                  "data, scsi(%ld:%d:%d:%d) cmd=%p "
++                                  "pid=%ld\n",
++                                  __func__,
++                                  ha->host_no,
++                                  b, t, l,
++                                  cp, cp->serial_number));
++                              if (sense_sz)
++                                      DEBUG5(qla2x00_dump_buffer(
++                                          cp->sense_buffer,
++                                          CMD_ACTUAL_SNSLEN(cp)));
++                      }
++              } else {
++                      /*
++                       * If RISC reports underrun and target does not report
++                       * it then we must have a lost frame, so tell upper
++                       * layer to retry it by reporting a bus busy.
++                       */
++                      if (!(scsi_status & SS_RESIDUAL_UNDER)) {
++                              DEBUG2(printk("scsi(%ld:%d:%d:%d) Dropped "
++                                  "frame(s) detected (%x of %x bytes)..."
++                                  "retrying command.\n",
++                                  ha->host_no,
++                                  b, t, l, resid, CMD_XFRLEN(cp)));
++
++                              CMD_RESULT(cp) = DID_BUS_BUSY << 16;
++                              ha->dropped_frame_error_cnt++;
++                              break;
++                      }
++
++                      /*
++                       * Handle mid-layer underflow???
++                       *
++                       * For kernels less than 2.4, the driver must return
++                       * an error if an underflow is detected.  For kernels
++                       * equal-to and above 2.4, the mid-layer will
++                       * appearantly handle the underflow by detecting the
++                       * residual count -- unfortunately, we do not see
++                       * where this is actually being done.  In the interim,
++                       * we will return DID_ERROR.
++                       */
++                      cp->resid = resid;
++/* TODO:
++ *
++ * Determine if this is a valid check for 2.5
++ */
++#if LINUX_VERSION_CODE < KERNEL_VERSION(2,5,0)
++                      if ((unsigned)(CMD_XFRLEN(cp) - resid) <
++                          cp->underflow) {
++                              printk(KERN_INFO
++                                  "scsi(%ld): Mid-layer underflow detected "
++                                  "(%x of %x bytes) wanted %x bytes..."
++                                  "returning DID_ERROR status!\n",
++                                  ha->host_no,
++                                  resid, CMD_XFRLEN(cp), cp->underflow);
++
++                              CMD_RESULT(cp) = DID_ERROR << 16;
++                              break;
++                      }
++#endif
++                      /* Everybody online, looking good... */
++                      CMD_RESULT(cp) = DID_OK << 16;
++
++                      /* Perform any post command processing */
++                      qla2x00_filter_command(ha, sp);
++              }
++              break;
++
++      case CS_PORT_LOGGED_OUT:
++      case CS_PORT_CONFIG_CHG:
++      case CS_PORT_BUSY:
++      case CS_INCOMPLETE:
++      case CS_PORT_UNAVAILABLE:
++              /*
++               * If the port is in Target Down state, return all IOs for this
++               * Target with DID_NO_CONNECT ELSE Queue the IOs in the
++               * retry_queue.
++               */
++              fcport = lq->fclun->fcport;
++              DEBUG2(printk("scsi(%ld:%d:%d): status_entry: Port Down "
++                  "pid=%ld, compl status=0x%x, port state=0x%x\n",
++                  ha->host_no,
++                  t, l,
++                  sp->cmd->serial_number,
++                  comp_status,
++                  atomic_read(&fcport->state)));
++
++              if ((sp->flags & SRB_IOCTL) ||
++                  (atomic_read(&fcport->state) == FC_DEVICE_DEAD)) {
++                      CMD_RESULT(cp) = DID_NO_CONNECT << 16;
++                      add_to_done_queue(ha, sp);
++              } else {
++                      qla2x00_extend_timeout(cp, EXTEND_CMD_TIMEOUT);
++                      add_to_retry_queue(ha, sp);
++              }
++
++              if (atomic_read(&fcport->state) == FC_ONLINE) {
++                      qla2x00_mark_device_lost(ha, fcport);
++              }
++
++              return;
++              break;
++
++      case CS_RESET:
++              DEBUG2(printk(KERN_INFO
++                  "scsi(%ld): RESET status detected 0x%x-0x%x.\n",
++                  ha->host_no, comp_status, scsi_status));
++
++              if (sp->flags & SRB_IOCTL) {
++                      CMD_RESULT(cp) = DID_RESET << 16;
++              }
++              else {
++                      qla2x00_extend_timeout(cp, EXTEND_CMD_TIMEOUT);
++                      add_to_retry_queue(ha, sp);
++                      return;
++              }
++              break;
++
++      case CS_ABORTED:
++              /* 
++               * hv2.19.12 - DID_ABORT does not retry the request if we
++               * aborted this request then abort otherwise it must be a
++               * reset.
++               */
++              DEBUG2(printk(KERN_INFO
++                  "scsi(%ld): ABORT status detected 0x%x-0x%x.\n",
++                  ha->host_no, comp_status, scsi_status));
++
++              CMD_RESULT(cp) = DID_RESET << 16;
++              break;
++
++      case CS_TIMEOUT:
++              DEBUG2(printk(KERN_INFO
++                  "scsi(%ld:%d:%d:%d): TIMEOUT status detected 0x%x-0x%x.\n",
++                  ha->host_no,
++                  b, t, l,
++                  comp_status, scsi_status));
++
++              CMD_RESULT(cp) = DID_BUS_BUSY << 16;
++
++              fcport = lq->fclun->fcport;
++// Dump FW
++printk("***TIMEOUT cmd=(%lx) cdb=(%x)\n\n", cp->serial_number, cp->cmnd[0]);
++//qla2x00_dump_isp(ha, 1);
++
++              /* 
++               * Check to see if logout occurred
++               */
++              t = SCSI_TCN_32(cp);
++              if ((le16_to_cpu(pkt->status_flags) & IOCBSTAT_SF_LOGO)) {
++                      DEBUG2(printk("scsi: Timeout occurred with Logo, "
++                          "status flag (%x) with public device loop id "
++                          "(%x), attempt new recovery\n",
++                          le16_to_cpu(pkt->status_flags),
++                          ha->fc_db[t].loop_id));
++
++                      ha->fc_db[t].flag |= DEV_RELOGIN;
++                      fcport->login_retry = ha->login_retry_count;
++                      set_bit(RELOGIN_NEEDED, &ha->dpc_flags);
++              }
++              break;
++
++      case CS_QUEUE_FULL:
++              DEBUG2(printk(KERN_INFO
++                  "scsi(%ld): QUEUE FULL status detected 0x%x-0x%x.\n",
++                  ha->host_no, comp_status, scsi_status));
++
++              /*
++               * SCSI Mid-Layer handles device queue full.
++               */                              
++              CMD_RESULT(cp) = DID_OK << 16 | lscsi_status;
++
++/* Adjust queue depth */
++{
++int ret;
++
++ret = scsi_track_queue_full(cp->device, sp->lun_queue->out_cnt-1);
++printk("scsi(%ld:%d:%d:%d): QUEUE FULL adjustments -- "
++    "outstanding/adjusted (%ld/%d) -- qd/lqfd/lqfc (%d/%d/%d).\n",
++    ha->host_no,
++    cp->device->channel, cp->device->id, cp->device->lun,
++    sp->lun_queue->out_cnt-1, ret,
++    cp->device->queue_depth,
++    cp->device->last_queue_full_count,
++    cp->device->last_queue_full_depth);
++}
++
++
++              break;
++
++      default:
++              DEBUG3(printk("scsi(%ld): Error detected (unknown status) "
++                  "0x%x-0x%x.\n",
++                  ha->host_no, comp_status, scsi_status));
++              printk(KERN_INFO
++                  "scsi(%ld): Unknown status detected 0x%x-0x%x.\n",
++                  ha->host_no, comp_status, scsi_status);
++
++              CMD_RESULT(cp) = DID_ERROR << 16;
++              break;
++      }
++
++      /* Place command on done queue. */
++      if (ha->status_srb == NULL)
++              add_to_done_queue(ha, sp);
++
++      LEAVE(__func__);
++}
++
++/**
++ * qla2x00_status_cont_entry() - Process a Status Continuations entry.
++ * @ha: SCSI driver HA context
++ * @pkt: Entry pointer
++ *
++ * Extended sense data.
++ */
++static void
++qla2x00_status_cont_entry(scsi_qla_host_t *ha, sts_cont_entry_t *pkt)
++{
++      uint8_t         sense_sz = 0;
++      srb_t           *sp = ha->status_srb;
++      Scsi_Cmnd       *cp;
++
++      ENTER(__func__);
++
++      if (sp != NULL && sp->request_sense_length != 0) {
++              cp = sp->cmd;
++              if (cp == NULL) {
++                      DEBUG2(printk("%s(): Cmd already returned back to OS "
++                          "sp=%p sp->state:%d\n",
++                          __func__, sp, sp->state));
++                      printk(KERN_INFO
++                          "%s(): cmd is NULL: already returned to OS "
++                          "(sp=%p)\n",
++                          __func__, sp); 
++
++                      ha->status_srb = NULL;
++                      return;
++              }
++
++              if (sp->request_sense_length > sizeof (pkt->req_sense_data)) {
++                      sense_sz = sizeof(pkt->req_sense_data);
++              } else {
++                      sense_sz = sp->request_sense_length;
++              }
++
++              /* Move sense data. */
++              memcpy(sp->request_sense_ptr, pkt->req_sense_data, sense_sz);
++              DEBUG5(qla2x00_dump_buffer(sp->request_sense_ptr, sense_sz));
++
++              sp->request_sense_ptr += sense_sz;
++              sp->request_sense_length -= sense_sz;
++
++              /* Place command on done queue. */
++              if (sp->request_sense_length == 0) {
++                      add_to_done_queue(ha, sp);
++                      ha->status_srb = NULL;
++              }
++      }
++
++      LEAVE(__func__);
++}
++
++/**
++ * qla2x00_error_entry() - Process an error entry.
++ * @ha: SCSI driver HA context
++ * @pkt: Entry pointer
++ */
++static void
++qla2x00_error_entry(scsi_qla_host_t *ha, response_t *pkt) 
++{
++      srb_t *sp;
++
++      ENTER(__func__);
++
++#if defined(QL_DEBUG_LEVEL_2)
++      if (pkt->entry_status & RF_INV_E_ORDER)
++              printk("%s(%ld): Invalid Entry Order\n",
++                  __func__, ha->host_no);
++      else if (pkt->entry_status & RF_INV_E_COUNT)
++              printk("%s(%ld): Invalid Entry Count\n",
++                  __func__, ha->host_no);
++      else if (pkt->entry_status & RF_INV_E_PARAM)
++              printk("%s(%ld): Invalid Entry Parameter\n",
++                  __func__, ha->host_no);
++      else if (pkt->entry_status & RF_INV_E_TYPE)
++              printk("%s(%ld): Invalid Entry Type\n",
++                  __func__, ha->host_no);
++      else if (pkt->entry_status & RF_BUSY)
++              printk("%s(%ld): Busy\n",
++                  __func__, ha->host_no);
++      else
++              printk("%s(%ld): UNKNOWN flag error\n",
++                  __func__, ha->host_no);
++#endif
++
++      /* Validate handle. */
++      if (pkt->handle < MAX_OUTSTANDING_COMMANDS)
++              sp = ha->outstanding_cmds[pkt->handle];
++      else
++              sp = NULL;
++
++      if (sp) {
++              /* Free outstanding command slot. */
++              ha->outstanding_cmds[pkt->handle] = 0;
++              if (ha->actthreads)
++                      ha->actthreads--;
++              sp->lun_queue->out_cnt--;
++#if defined(IOCB_THROLLE_USAGE)
++              ha->iocb_cnt -= sp->iocb_cnt;
++#endif
++
++              sp->flags |= SRB_ISP_COMPLETED;
++
++              /* Bad payload or header */
++              if (pkt->entry_status &
++                  (RF_INV_E_ORDER | RF_INV_E_COUNT |
++                   RF_INV_E_PARAM | RF_INV_E_TYPE)) {
++                      CMD_RESULT(sp->cmd) = DID_ERROR << 16;
++              } else if (pkt->entry_status & RF_BUSY) {
++                      CMD_RESULT(sp->cmd) = DID_BUS_BUSY << 16;
++              } else {
++                      CMD_RESULT(sp->cmd) = DID_ERROR << 16;
++              }
++              /* Place command on done queue. */
++              add_to_done_queue(ha, sp);
++
++      } else if (pkt->entry_type == COMMAND_A64_TYPE ||
++          pkt->entry_type == COMMAND_TYPE) {
++              DEBUG2(printk("scsi(%ld): Error entry - invalid handle\n",
++                  ha->host_no));
++              printk(KERN_WARNING
++                  "scsi(%ld): Error entry - invalid handle\n",
++                  ha->host_no);
++
++              set_bit(ISP_ABORT_NEEDED, &ha->dpc_flags);
++              if (ha->dpc_wait && !ha->dpc_active) 
++                      up(ha->dpc_wait);
++      }
++
++      LEAVE(__func__);
++}
++
++/**
++ * qla2x00_ms_entry() - Process a Management Server entry.
++ * @ha: SCSI driver HA context
++ * @index: Response queue out pointer
++ */
++static void
++qla2x00_ms_entry(scsi_qla_host_t *ha, ms_iocb_entry_t *pkt) 
++{
++      srb_t          *sp;
++
++      ENTER(__func__);
++
++      DEBUG3(printk("%s(%ld): pkt=%p pkthandle=%d.\n",
++          __func__, ha->host_no, pkt, pkt->handle1));
++
++      /* Validate handle. */
++      if (pkt->handle1 < MAX_OUTSTANDING_COMMANDS)
++              sp = ha->outstanding_cmds[pkt->handle1];
++      else
++              sp = NULL;
++
++      if (sp == NULL) {
++              DEBUG2(printk("scsi(%ld): MS entry - invalid handle\n",
++                  ha->host_no));
++              printk(KERN_WARNING
++                  "scsi(%ld): MS entry - invalid handle\n",
++                  ha->host_no);
++
++              set_bit(ISP_ABORT_NEEDED, &ha->dpc_flags);
++              return;
++      }
++
++      CMD_COMPL_STATUS(sp->cmd) = le16_to_cpu(pkt->status);
++      CMD_ENTRY_STATUS(sp->cmd) = pkt->entry_status;
++
++      /* Free outstanding command slot. */
++      ha->outstanding_cmds[pkt->handle1] = 0;
++      sp->flags |= SRB_ISP_COMPLETED;
++
++      add_to_done_queue(ha, sp);
++
++      LEAVE(__func__);
++}
++
++/**
++ * qla2x00_check_sense() - Perform any sense data interrogation.
++ * @cp: SCSI Command
++ * @lq: Lun queue
++ *
++ * Returns QL_STATUS_SUCCESS if the lun queue is suspended, else
++ * QL_STATUS_ERROR  (lun queue not suspended).
++ */
++static int 
++qla2x00_check_sense(Scsi_Cmnd *cp, os_lun_t *lq)
++{
++      scsi_qla_host_t *ha;
++      srb_t           *sp;
++      fc_port_t       *fcport;
++
++      ha = (scsi_qla_host_t *) cp->device->host->hostdata;
++      if (((cp->sense_buffer[0] & 0x70) >> 4) != 7) {
++              return (QL_STATUS_ERROR);
++      }
++
++      sp = (srb_t * )CMD_SP(cp);
++      sp->flags |= SRB_GOT_SENSE;
++
++      switch (cp->sense_buffer[2] & 0xf) {
++      case RECOVERED_ERROR:
++              CMD_RESULT(cp)  = DID_OK << 16;
++              cp->sense_buffer[0] = 0;
++              break;
++
++      case NOT_READY:
++              fcport = lq->fclun->fcport;
++
++              /*
++               * Suspend the lun only for hard disk device type.
++               */
++              if (!(fcport->flags & FC_TAPE_DEVICE) &&
++                  lq->q_state != LUN_STATE_TIMEOUT) {
++                      /*
++                       * If target is in process of being ready then suspend
++                       * lun for 6 secs and retry all the commands.
++                       */
++                      if (cp->sense_buffer[12] == 0x4 &&
++                          cp->sense_buffer[13] == 0x1) {
++
++                              /* Suspend the lun for 6 secs */
++                              qla2x00_suspend_lun(ha,
++                                  lq, 6, ql2xsuspendcount);
++
++                              return (QL_STATUS_SUCCESS);
++                      }
++              }
++              break;
++      }
++
++      return (QL_STATUS_ERROR);
++}
+--- /dev/null  Thu Apr 11 07:25:15 2002
++++ linux-2.5.73-n9560/drivers/scsi/qla2xxx/qla_listops.h      Thu Jul  3 15:34:42 2003
+@@ -0,0 +1,397 @@
++/******************************************************************************
++ *                  QLOGIC LINUX SOFTWARE
++ *
++ * QLogic ISP2x00 device driver for Linux 2.5.x
++ * Copyright (C) 2003 Qlogic Corporation
++ * (www.qlogic.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, 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.
++ *
++ ******************************************************************************/
++
++/* Management functions for various lists */
++
++/*
++ * Found in kernel 2.4.9 and higher in include/linux/lists.h
++ *
++ * Iterate over a list safe against removal of list.
++ *
++ */
++#if !defined(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
++
++/* __add_to_done_queue()
++ * 
++ * Place SRB command on done queue.
++ *
++ * Input:
++ *      ha           = host pointer
++ *      sp           = srb pointer.
++ * Locking:
++ *    this function assumes the ha->list_lock is already taken
++ */
++static inline void 
++__add_to_done_queue(struct scsi_qla_host * ha, srb_t * sp)
++{
++      /*
++        if (sp->state != SRB_NO_QUEUE_STATE && 
++              sp->state != SRB_ACTIVE_STATE)
++              BUG();
++      */
++
++        /* Place block on done queue */
++        sp->cmd->host_scribble = (unsigned char *) NULL;
++        sp->state = SRB_DONE_STATE;
++        list_add_tail(&sp->list,&ha->done_queue);
++        ha->done_q_cnt++;
++      sp->ha = ha;
++}
++
++/* __add_to_free_queue()
++ * 
++ * Place SRB command on free queue.
++ *
++ * Input:
++ *      ha           = host pointer
++ *      sp           = srb pointer.
++ * Locking:
++ *    this function assumes the ha->list_lock is already taken
++ */
++static inline void 
++__add_to_free_queue(struct scsi_qla_host * ha, srb_t * sp)
++{
++      /*
++        if (atomic_read(&sp->ref_count) != 0)
++                BUG();
++      */
++
++
++        /* Place block on free queue */
++        sp->state = SRB_FREE_STATE;
++        list_add_tail(&sp->list,&ha->free_queue);
++        ha->srb_cnt++;
++}
++
++static inline void 
++__add_to_retry_queue(struct scsi_qla_host * ha, srb_t * sp)
++{
++      /*
++        if( sp->state != SRB_NO_QUEUE_STATE && 
++              sp->state != SRB_ACTIVE_STATE)
++              BUG();
++      */
++
++        /* Place block on retry queue */
++        list_add_tail(&sp->list,&ha->retry_queue);
++        ha->retry_q_cnt++;
++        sp->flags |= SRB_WATCHDOG;
++        ha->flags.watchdog_enabled = TRUE;
++        sp->state = SRB_RETRY_STATE;
++      sp->ha = ha;
++}
++
++static inline void 
++__add_to_scsi_retry_queue(struct scsi_qla_host * ha, srb_t * sp)
++{
++      /*
++        if( sp->state != SRB_NO_QUEUE_STATE && 
++              sp->state != SRB_ACTIVE_STATE)
++              BUG();
++      */
++
++        /* Place block on retry queue */
++        list_add_tail(&sp->list,&ha->scsi_retry_queue);
++        ha->scsi_retry_q_cnt++;
++        sp->state = SRB_SCSI_RETRY_STATE;
++      sp->ha = ha;
++}
++
++static inline void 
++add_to_done_queue(struct scsi_qla_host * ha, srb_t * sp)
++{
++        unsigned long flags;
++
++        spin_lock_irqsave(&ha->list_lock, flags);
++        __add_to_done_queue(ha,sp);
++        spin_unlock_irqrestore(&ha->list_lock, flags);
++}
++
++static inline void 
++add_to_free_queue(struct scsi_qla_host * ha, srb_t * sp)
++{
++        unsigned long flags;
++
++        spin_lock_irqsave(&ha->list_lock, flags);
++        __add_to_free_queue(ha,sp);
++        spin_unlock_irqrestore(&ha->list_lock, flags);
++}
++
++static inline void 
++add_to_retry_queue(struct scsi_qla_host * ha, srb_t * sp)
++{
++        unsigned long flags;
++
++        spin_lock_irqsave(&ha->list_lock, flags);
++        __add_to_retry_queue(ha,sp);
++        spin_unlock_irqrestore(&ha->list_lock, flags);
++}
++
++static inline void 
++add_to_scsi_retry_queue(struct scsi_qla_host * ha, srb_t * sp)
++{
++        unsigned long flags;
++
++        spin_lock_irqsave(&ha->list_lock, flags);
++        __add_to_scsi_retry_queue(ha,sp);
++        spin_unlock_irqrestore(&ha->list_lock, flags);
++}
++
++/*
++ * __del_from_retry_queue
++ *      Function used to remove a command block from the
++ *      watchdog timer queue.
++ *
++ *      Note: Must insure that command is on watchdog
++ *            list before calling del_from_retry_queue
++ *            if (sp->flags & SRB_WATCHDOG)
++ *
++ * Input: 
++ *      ha = adapter block pointer.
++ *      sp = srb pointer.
++ * Locking:
++ *    this function assumes the list_lock is already taken
++ */
++static inline void 
++__del_from_retry_queue(struct scsi_qla_host * ha, srb_t * sp)
++{
++        list_del_init(&sp->list);
++
++        if (list_empty(&ha->retry_queue))
++                ha->flags.watchdog_enabled = FALSE;
++        sp->flags &= ~(SRB_WATCHDOG | SRB_BUSY);
++        sp->state = SRB_NO_QUEUE_STATE;
++        ha->retry_q_cnt--;
++}
++
++/*
++ * __del_from_scsi_retry_queue
++ *      Function used to remove a command block from the
++ *      scsi retry queue.
++ *
++ * Input: 
++ *      ha = adapter block pointer.
++ *      sp = srb pointer.
++ * Locking:
++ *    this function assumes the list_lock is already taken
++ */
++static inline void 
++__del_from_scsi_retry_queue(struct scsi_qla_host * ha, srb_t * sp)
++{
++        list_del_init(&sp->list);
++
++        ha->scsi_retry_q_cnt--;
++        sp->state = SRB_NO_QUEUE_STATE;
++}
++
++/*
++ * del_from_retry_queue
++ *      Function used to remove a command block from the
++ *      watchdog timer queue.
++ *
++ *      Note: Must insure that command is on watchdog
++ *            list before calling del_from_retry_queue
++ *            if (sp->flags & SRB_WATCHDOG)
++ *
++ * Input: 
++ *      ha = adapter block pointer.
++ *      sp = srb pointer.
++ * Locking:
++ *    this function takes and releases the list_lock
++ */
++static inline void 
++del_from_retry_queue(struct scsi_qla_host * ha, srb_t * sp)
++{
++        unsigned long flags;
++
++        /*    if (unlikely(!(sp->flags & SRB_WATCHDOG)))
++                      BUG();*/
++        spin_lock_irqsave(&ha->list_lock, flags);
++
++        /*    if (unlikely(list_empty(&ha->retry_queue)))
++                      BUG();*/
++
++        __del_from_retry_queue(ha,sp);
++
++        spin_unlock_irqrestore(&ha->list_lock, flags);
++}
++/*
++ * del_from_scsi_retry_queue
++ *      Function used to remove a command block from the
++ *      scsi retry queue.
++ *
++ * Input: 
++ *      ha = adapter block pointer.
++ *      sp = srb pointer.
++ * Locking:
++ *    this function takes and releases the list_lock
++ */
++static inline void 
++del_from_scsi_retry_queue(struct scsi_qla_host * ha, srb_t * sp)
++{
++        unsigned long flags;
++
++        spin_lock_irqsave(&ha->list_lock, flags);
++
++        /*    if (unlikely(list_empty(&ha->scsi_retry_queue)))
++                      BUG();*/
++
++        __del_from_scsi_retry_queue(ha,sp);
++
++        spin_unlock_irqrestore(&ha->list_lock, flags);
++}
++
++static inline void
++__del_from_free_queue(struct scsi_qla_host * ha, srb_t * sp)
++{
++        ha->srb_cnt--;
++        list_del_init(&sp->list);
++        sp->state = SRB_NO_QUEUE_STATE;
++}
++
++/*
++ * __add_to_pending_queue
++ *      Add the standard SCB job to the bottom of standard SCB commands.
++ *
++ * Input:
++ * COMPLETE!!!
++ *      q  = SCSI LU pointer.
++ *      sp = srb pointer.
++ *      SCSI_LU_Q lock must be already obtained.
++ */
++static inline void 
++__add_to_pending_queue(struct scsi_qla_host *ha, srb_t * sp)
++{
++      /*
++        if( sp->state != SRB_NO_QUEUE_STATE &&
++              sp->state != SRB_FREE_STATE &&
++              sp->state != SRB_ACTIVE_STATE)
++              BUG();
++      */
++
++      list_add_tail(&sp->list, &ha->pending_queue);
++      ha->qthreads++;
++      sp->state = SRB_PENDING_STATE;
++}
++
++static inline void 
++__add_to_pending_queue_head(struct scsi_qla_host *ha, srb_t * sp)
++{
++      /*
++        if( sp->state != SRB_NO_QUEUE_STATE && 
++              sp->state != SRB_FREE_STATE &&
++              sp->state != SRB_ACTIVE_STATE)
++              BUG();
++      */
++
++      list_add(&sp->list, &ha->pending_queue);
++      ha->qthreads++;
++      sp->state = SRB_PENDING_STATE;
++}
++
++static inline void
++add_to_pending_queue(struct scsi_qla_host *ha, srb_t *sp)
++{
++      unsigned long flags;
++
++      spin_lock_irqsave(&ha->list_lock, flags);
++      __add_to_pending_queue(ha, sp);
++      spin_unlock_irqrestore(&ha->list_lock, flags);
++}
++static inline void
++add_to_pending_queue_head(struct scsi_qla_host *ha, srb_t *sp)
++{
++      unsigned long flags;
++
++      spin_lock_irqsave(&ha->list_lock, flags);
++      __add_to_pending_queue_head(ha, sp);
++      spin_unlock_irqrestore(&ha->list_lock, flags);
++}
++
++static inline void
++__del_from_pending_queue(struct scsi_qla_host *ha, srb_t *sp)
++{
++      list_del_init(&sp->list);
++      ha->qthreads--;
++      sp->state = SRB_NO_QUEUE_STATE;
++}
++
++/*
++ * Failover Stuff.
++ */
++static inline void
++__add_to_failover_queue(struct scsi_qla_host * ha, srb_t * sp)
++{
++      /*
++        if( sp->state != SRB_NO_QUEUE_STATE && 
++              sp->state != SRB_ACTIVE_STATE)
++              BUG();
++      */
++
++        list_add_tail(&sp->list,&ha->failover_queue);
++        ha->failover_cnt++;
++        sp->state = SRB_FAILOVER_STATE;
++      sp->ha = ha;
++}
++
++static inline void add_to_failover_queue(struct scsi_qla_host * ha, srb_t * sp)
++{
++        unsigned long flags;
++
++        spin_lock_irqsave(&ha->list_lock, flags);
++
++        __add_to_failover_queue(ha,sp);
++
++        spin_unlock_irqrestore(&ha->list_lock, flags);
++}
++static inline void __del_from_failover_queue(struct scsi_qla_host * ha, srb_t *
++                sp)
++{
++        ha->failover_cnt--;
++        list_del_init(&sp->list);
++        sp->state = SRB_NO_QUEUE_STATE;
++}
++
++static inline void del_from_failover_queue(struct scsi_qla_host * ha, srb_t * sp)
++{
++        unsigned long flags;
++
++        spin_lock_irqsave(&ha->list_lock, flags);
++
++        __del_from_failover_queue(ha,sp);
++
++        spin_unlock_irqrestore(&ha->list_lock, flags);
++}
++
++static inline void 
++del_from_pending_queue(struct scsi_qla_host * ha, srb_t * sp)
++{
++        unsigned long flags;
++
++        spin_lock_irqsave(&ha->list_lock, flags);
++
++        __del_from_pending_queue(ha,sp);
++
++        spin_unlock_irqrestore(&ha->list_lock, flags);
++}
++
+--- /dev/null  Thu Apr 11 07:25:15 2002
++++ linux-2.5.73-n9560/drivers/scsi/qla2xxx/qla_mbx.c  Thu Jul  3 15:34:42 2003
+@@ -0,0 +1,2884 @@
++/*
++ *                  QLOGIC LINUX SOFTWARE
++ *
++ * QLogic ISP2x00 device driver for Linux 2.5.x
++ * Copyright (C) 2003 Qlogic Corporation
++ * (www.qlogic.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, 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 "qla_os.h"
++
++#include "qla_def.h"
++
++/*
++ *  Local Function Prototypes.
++ */
++static void
++qla2x00_mbx_sem_timeout(unsigned long);
++
++static uint8_t
++qla2x00_get_mbx_access(scsi_qla_host_t *, uint32_t);
++
++static uint8_t
++qla2x00_release_mbx_access(scsi_qla_host_t *, uint32_t);
++
++static uint8_t
++qla2x00_mbx_q_add(scsi_qla_host_t *, mbx_cmdq_t **);
++
++static void
++qla2x00_mbx_q_get(scsi_qla_host_t *, mbx_cmdq_t **);
++
++static void
++qla2x00_mbx_q_memb_alloc(scsi_qla_host_t *, mbx_cmdq_t **);
++
++static void
++qla2x00_mbx_q_memb_free(scsi_qla_host_t *, mbx_cmdq_t *);
++
++/***************************/
++/* Function implementation */
++/***************************/
++
++static void
++qla2x00_mbx_sem_timeout(unsigned long data)
++{
++      struct semaphore        *sem_ptr = (struct semaphore *)data;
++
++      DEBUG11(printk("qla2x00_sem_timeout: entered.\n");)
++
++      if (sem_ptr != NULL) {
++              up(sem_ptr);
++      }
++
++      DEBUG11(printk("qla2x00_mbx_sem_timeout: exiting.\n");)
++}
++
++/*
++ *  tov = timeout value in seconds
++ */
++static uint8_t
++qla2x00_get_mbx_access(scsi_qla_host_t *ha, uint32_t tov)
++{
++      uint8_t         ret;
++      int             prev_val = 1;  /* assume no access yet */
++      mbx_cmdq_t      *ptmp_mbq;
++      struct timer_list       tmp_cmd_timer;
++      unsigned long   cpu_flags;
++
++
++      DEBUG11(printk("qla2x00_get_mbx_access(%ld): entered.\n",
++          ha->host_no);)
++
++      while (1) {
++              if (test_bit(MBX_CMD_WANT, &ha->mbx_cmd_flags) == 0) {
++
++                      DEBUG11(printk("qla2x00_get_mbx_access(%ld): going "
++                          " to test access flags.\n", ha->host_no);)
++
++                      /* No one else is waiting. Go ahead and try to
++                       * get access.
++                       */
++                      if ((prev_val = test_and_set_bit(MBX_CMD_ACTIVE,
++                          &ha->mbx_cmd_flags)) == 0) {
++                              break;
++                      }
++              }
++
++              /* wait for previous command to finish */
++              DEBUG(printk("qla2x00_get_mbx_access(%ld): access "
++                  "flags=%lx. busy. Waiting for access. curr time=0x%lx.\n",
++                  ha->host_no, ha->mbx_cmd_flags, jiffies);)
++
++              DEBUG11(printk("qla2x00_get_mbx_access(%ld): access "
++                  "flags=%lx. busy. Waiting for access. curr time=0x%lx.\n",
++                  ha->host_no, ha->mbx_cmd_flags, jiffies);)
++
++              /*
++               * Init timer and get semaphore from mbx q. After we got valid
++               * semaphore pointer the MBX_CMD_WANT flag would also had
++               * been set.
++               */
++              qla2x00_mbx_q_add(ha, &ptmp_mbq);
++
++              if (ptmp_mbq == NULL) {
++                      /* queue full? problem? can't proceed. */
++                      DEBUG2_3_11(printk("qla2x00_get_mbx_access(%ld): ERROR "
++                          "no more mbx_q allowed. exiting.\n", ha->host_no);)
++
++                      break;
++              }
++
++              /* init timer and semaphore */
++              init_timer(&tmp_cmd_timer);
++              tmp_cmd_timer.data = (unsigned long)&ptmp_mbq->cmd_sem;
++              tmp_cmd_timer.function =
++                  (void (*)(unsigned long))qla2x00_mbx_sem_timeout;
++              tmp_cmd_timer.expires = jiffies + tov * HZ;
++
++              DEBUG11(printk("get_mbx_access(%ld): adding timer. "
++                  "curr time=0x%lx timeoutval=0x%lx.\n",
++                  ha->host_no, jiffies, tmp_cmd_timer.expires);)
++
++                      /* wait. */
++/*             add_timer(&tmp_cmd_timer);*/
++              DEBUG11(printk("get_mbx_access(%ld): going to sleep. "
++                  "current time=0x%lx.\n", ha->host_no, jiffies);)
++
++              down_interruptible(&ptmp_mbq->cmd_sem);
++
++              DEBUG11(printk("get_mbx_access(%ld): woke up. current "
++                  "time=0x%lx.\n",
++                  ha->host_no, jiffies);)
++
++/*            del_timer(&tmp_cmd_timer);*/
++
++              /* try to get lock again. we'll test later to see
++               * if we actually got the lock.
++               */
++              prev_val = test_and_set_bit(MBX_CMD_ACTIVE,
++                  &ha->mbx_cmd_flags);
++
++              /*
++               * After we tried to get access then we check to see
++               * if we need to clear the MBX_CMD_WANT flag. Don't clear
++               * this flag before trying to get access or else another
++               * new thread might grab it before we did.
++               */
++              spin_lock_irqsave(&ha->mbx_q_lock, cpu_flags);
++              if (ha->mbx_q_head == NULL) {
++                      /* We're the last thread in queue. */
++                      clear_bit(MBX_CMD_WANT, &ha->mbx_cmd_flags);
++              }
++              qla2x00_mbx_q_memb_free(ha, ptmp_mbq);
++              spin_unlock_irqrestore(&ha->mbx_q_lock, cpu_flags);
++
++              break;
++      }
++
++      if (prev_val == 0) {
++              /* We got the lock */
++              DEBUG11(printk("qla2x00_get_mbx_access(%ld): success.\n",
++                  ha->host_no);)
++
++              ret = QL_STATUS_SUCCESS;
++      } else {
++              /* Timeout or resource error. */
++              DEBUG2_3_11(printk("qla2x00_get_mbx_access(%ld): timed out.\n",
++                  ha->host_no);)
++
++              ret = QL_STATUS_TIMEOUT;
++      }
++
++      return ret;
++}
++
++static uint8_t
++qla2x00_release_mbx_access(scsi_qla_host_t *ha, uint32_t tov)
++{
++      mbx_cmdq_t      *next_thread;
++
++      DEBUG11(printk("qla2x00_release_mbx_access:(%ld): entered.\n",
++          ha->host_no);)
++
++      clear_bit(MBX_CMD_ACTIVE, &ha->mbx_cmd_flags);
++
++      /* Wake up one pending mailbox cmd thread in queue. */
++      qla2x00_mbx_q_get(ha, &next_thread);
++      if (next_thread) {
++              DEBUG11(printk("qla2x00_release_mbx_access: found pending "
++                  "mbx cmd. Waking up sem in %p.\n", &next_thread);)
++              up(&next_thread->cmd_sem);
++      }
++
++      DEBUG11(printk("qla2x00_release_mbx_access:(%ld): exiting.\n",
++          ha->host_no);)
++
++      return QL_STATUS_SUCCESS;
++}
++
++/* Allocates a mbx_cmdq_t struct and add to the mbx_q list. */
++static uint8_t
++qla2x00_mbx_q_add(scsi_qla_host_t *ha, mbx_cmdq_t **ret_mbq)
++{
++      uint8_t         ret;
++      unsigned long   cpu_flags;
++      mbx_cmdq_t      *ptmp = NULL;
++
++      spin_lock_irqsave(&ha->mbx_q_lock, cpu_flags);
++
++      DEBUG11(printk("qla2x00_mbx_q_add: got mbx_q spinlock. "
++          "Inst=%d.\n", apiHBAInstance);)
++
++      qla2x00_mbx_q_memb_alloc(ha, &ptmp);
++      if (ptmp == NULL) {
++              /* can't add any more threads */
++              DEBUG2_3_11(printk("qla2x00_mbx_q_add: ERROR no more "
++                  "ioctl threads allowed. Inst=%d.\n", apiHBAInstance);)
++
++              ret = QL_STATUS_RESOURCE_ERROR;
++      } else {
++              if (ha->mbx_q_tail == NULL) {
++                      /* First thread to queue. */
++                      set_bit(IOCTL_WANT, &ha->mbx_cmd_flags);
++
++                      ha->mbx_q_head = ptmp;
++              } else {
++                      ha->mbx_q_tail->pnext = ptmp;
++              }
++              ha->mbx_q_tail = ptmp;
++
++              /* Now init the semaphore */
++              init_MUTEX_LOCKED(&ptmp->cmd_sem);
++              ret = QL_STATUS_SUCCESS;
++      }
++
++      *ret_mbq = ptmp;
++
++      DEBUG11(printk("qla2x00_mbx_q_add: going to release spinlock. "
++          "ret_mbq=%p, ret=%d. Inst=%d.\n", *ret_mbq, ret, apiHBAInstance);)
++
++      spin_unlock_irqrestore(&ha->mbx_q_lock, cpu_flags);
++
++      return ret;
++}
++
++/* Just remove and return first member from mbx_cmdq.  Don't free anything. */
++static void
++qla2x00_mbx_q_get(scsi_qla_host_t *ha, mbx_cmdq_t **ret_mbq)
++{
++      unsigned long   cpu_flags;
++
++      spin_lock_irqsave(&ha->mbx_q_lock, cpu_flags);
++
++      DEBUG11(printk("qla2x00_mbx_q_get: got mbx_q spinlock. "
++          "Inst=%d.\n", apiHBAInstance);)
++
++      /* Remove from head */
++      *ret_mbq = ha->mbx_q_head;
++      if (ha->mbx_q_head != NULL) {
++              ha->mbx_q_head = ha->mbx_q_head->pnext;
++              if (ha->mbx_q_head == NULL) {
++                      /* That's the last one in queue. */
++                      ha->mbx_q_tail = NULL;
++              }
++              (*ret_mbq)->pnext = NULL;
++      }
++
++      DEBUG11(printk("qla2x00_mbx_q_remove: return ret_mbq=%p. Going to "
++          "release spinlock. Inst=%d.\n", *ret_mbq, apiHBAInstance);)
++
++      spin_unlock_irqrestore(&ha->mbx_q_lock, cpu_flags);
++}
++
++/* Find a free mbx_q member from the array. Must already got the
++ * mbx_q_lock spinlock.
++ */
++static void
++qla2x00_mbx_q_memb_alloc(scsi_qla_host_t *ha, mbx_cmdq_t **ret_mbx_q_memb)
++{
++      mbx_cmdq_t      *ptmp = NULL;
++
++      DEBUG11(printk("qla2x00_mbx_q_memb_alloc: entered. "
++          "Inst=%d.\n", apiHBAInstance);)
++
++      ptmp = ha->mbx_sem_pool_head;
++      if (ptmp != NULL) {
++              ha->mbx_sem_pool_head = ptmp->pnext;
++              ptmp->pnext = NULL;
++              if (ha->mbx_sem_pool_head == NULL) {
++                      ha->mbx_sem_pool_tail = NULL;
++              }
++      } else {
++              /* We ran out of pre-allocated semaphores.  Try to allocate
++               * a new one.
++               */
++              ptmp = (void *)KMEM_ZALLOC(sizeof(mbx_cmdq_t), 40);
++      }
++
++      *ret_mbx_q_memb = ptmp;
++
++      DEBUG11(printk("qla2x00_mbx_q_memb_alloc: return waitq_memb=%p. "
++          "Inst=%d.\n", *ret_mbx_q_memb, apiHBAInstance);)
++}
++
++/* Add the specified mbx_q member back to the free semaphore pool. Must
++ * already got the mbx_q_lock spinlock.
++ */
++static void
++qla2x00_mbx_q_memb_free(scsi_qla_host_t *ha, mbx_cmdq_t *pfree_mbx_q_memb)
++{
++      DEBUG11(printk("qla2x00_mbx_q_memb_free: entered. Inst=%d.\n",
++          apiHBAInstance);)
++
++      if (pfree_mbx_q_memb != NULL) {
++              if (ha->mbx_sem_pool_tail != NULL) {
++                      /* Add to tail */
++                      ha->mbx_sem_pool_tail->pnext = pfree_mbx_q_memb;
++              } else {
++                      ha->mbx_sem_pool_head = pfree_mbx_q_memb;
++              }
++              ha->mbx_sem_pool_tail = pfree_mbx_q_memb;
++      }
++
++      /* put it back to the free pool. */
++
++      DEBUG11(printk("qla2x00_mbx_q_memb_free: exiting. "
++          "Inst=%d.\n", apiHBAInstance);)
++}
++
++/*
++ * qla2x00_mailbox_command
++ *    Issue mailbox command and waits for completion.
++ *
++ * Input:
++ *    ha = adapter block pointer.
++ *    mcp = driver internal mbx struct pointer.
++ *
++ * Output:
++ *    mb[MAX_MAILBOX_REGISTER_COUNT] = returned mailbox data.
++ *
++ * Returns:
++ *    0 : QL_STATUS_SUCCESS = cmd performed success
++ *    1 : QL_STATUS_ERROR   (error encountered)
++ *    6 : QL_STATUS_TIMEOUT (timeout condition encountered)
++ *
++ * Context:
++ *    Kernel context.
++ */
++uint8_t
++qla2x00_mailbox_command(scsi_qla_host_t *ha, mbx_cmd_t *mcp)
++{
++      unsigned long    flags = 0;
++      device_reg_t     *reg       = ha->iobase;
++      struct timer_list       tmp_intr_timer;
++      uint8_t         abort_active = test_bit(ABORT_ISP_ACTIVE, &ha->dpc_flags);
++      uint8_t         io_lock_on = ha->init_done;
++      uint8_t         mbx_count;
++      uint8_t         status = 0;
++      uint8_t         tmp_stat = 0;
++      uint16_t        command;
++      uint16_t        *iptr, *optr;
++      uint32_t        cnt;
++      uint32_t        mboxes;
++      unsigned long   mbx_flags = 0;
++      unsigned long   wait_time;
++
++      DEBUG11(printk("qla2x00_mailbox_command(%ld): entered.\n",
++          ha->host_no);)
++      /*
++       * Wait for active mailbox commands to finish by waiting at most
++       * tov seconds. This is to serialize actual issuing of mailbox cmds
++       * during non ISP abort time.
++       */
++      if (!abort_active) {
++              tmp_stat = qla2x00_get_mbx_access(ha, mcp->tov);
++              if (tmp_stat != QL_STATUS_SUCCESS) {
++                      /* Timeout occurred. Return error. */
++                      DEBUG2_3_11(printk("qla2x00_mailbox_command(%ld): cmd "
++                          "access timeout. Exiting.\n", ha->host_no);)
++                      return QL_STATUS_TIMEOUT;
++              }
++      }
++
++      ha->flags.mbox_busy = TRUE;
++      /* Save mailbox command for debug */
++      ha->mcp = mcp;
++
++      /* Try to get mailbox register access */
++      if (!abort_active)
++              QLA_MBX_REG_LOCK(ha);
++
++      DEBUG11(printk("scsi%d: prepare to issue mbox cmd=0x%x.\n",
++          (int)ha->host_no, mcp->mb[0]);)
++
++      ha->mbox_trace = 0;
++
++      spin_lock_irqsave(&ha->hardware_lock, flags);
++
++      /* Load mailbox registers. */
++      optr = (uint16_t *)&reg->mailbox0;
++      mbx_count = MAILBOX_REGISTER_COUNT;
++
++      iptr = mcp->mb;
++      command = mcp->mb[0];
++      mboxes = mcp->out_mb;
++
++      for (cnt = 0; cnt < mbx_count; cnt++) {
++#if defined(ISP2200)
++              if (cnt == 8) {
++                      optr = (uint16_t *)&reg->mailbox8;
++              }
++#endif
++              if (mboxes & BIT_0) {
++                      WRT_REG_WORD(optr, *iptr);
++              }
++
++              mboxes >>= 1;
++              optr++;
++              iptr++;
++      }
++
++#if defined(QL_DEBUG_LEVEL_1)
++      printk("qla2x00_mailbox_command: Loaded MBX registers "
++          "(displayed in bytes) = \n");
++      qla2x00_dump_buffer((uint8_t *)mcp->mb, 16);
++      printk("\n");
++      qla2x00_dump_buffer(((uint8_t *)mcp->mb + 0x10), 16);
++      printk("\n");
++      qla2x00_dump_buffer(((uint8_t *)mcp->mb + 0x20), 8);
++      printk("\n");
++      printk("qla2x00_mailbox_command: I/O address = %lx.\n",
++          (u_long)optr);
++      qla2x00_dump_regs(ha->host);
++#endif
++
++      /* Issue set host interrupt command to send cmd out. */
++      ha->flags.mbox_int = FALSE;
++      clear_bit(MBX_INTERRUPT, &ha->mbx_cmd_flags);
++
++      /* Unlock mbx registers and wait for interrupt */
++
++      DEBUG11(printk("qla2x00_mailbox_command: going to unlock irq & "
++          "waiting for interrupt. jiffies=%lx.\n", jiffies);)
++
++      /* Wait for mbx cmd completion until timeout */
++
++      if (!abort_active && io_lock_on) {
++              /* sleep on completion semaphore */
++              DEBUG11(printk("qla2x00_mailbox_command(%ld): "
++                  "INTERRUPT MODE. Initializing timer.\n",
++                  ha->host_no);)
++
++              init_timer(&tmp_intr_timer);
++              tmp_intr_timer.data = (unsigned long)&ha->mbx_intr_sem;
++              tmp_intr_timer.expires = jiffies + mcp->tov * HZ;
++              tmp_intr_timer.function =
++                  (void (*)(unsigned long))qla2x00_mbx_sem_timeout;
++
++              DEBUG11(printk("qla2x00_mailbox_command(%ld): "
++                  "Adding timer.\n", ha->host_no);)
++              add_timer(&tmp_intr_timer);
++
++              DEBUG11(printk("qla2x00_mailbox_command: going to "
++                  "unlock & sleep. time=0x%lx.\n", jiffies);)
++
++              MBOX_TRACE(ha,BIT_0);
++              set_bit(MBX_INTR_WAIT, &ha->mbx_cmd_flags);
++
++              WRT_REG_WORD(&reg->hccr, HCCR_SET_HOST_INT);
++              spin_unlock_irqrestore(&ha->hardware_lock, flags);
++
++              if (!abort_active)
++                      QLA_MBX_REG_UNLOCK(ha);
++
++              MBOX_TRACE(ha,BIT_1);
++
++              /* Wait for either the timer to expire
++               * or the mbox completion interrupt
++               */
++              down_interruptible(&ha->mbx_intr_sem);
++
++              DEBUG11(printk("qla2x00_mailbox_command:"
++                  "waking up."
++                  "time=0x%lx\n", jiffies);)
++              clear_bit(MBX_INTR_WAIT, &ha->mbx_cmd_flags);
++
++              /* delete the timer */
++              del_timer(&tmp_intr_timer);
++#if QLA2100_LIPTEST
++              if (mbxtimeout) {
++                      DEBUG(printk("qla2x00_mailbox_command(%ld): "
++                          "INTERRUPT MODE - testing timeout handling.\n",
++                          ha->host_no);)
++                      ha->flags.mbox_int= FALSE;
++              }
++              mbxtimeout= 0;
++#endif
++
++      } else {
++
++              DEBUG3_11(printk("qla2x00_mailbox_command(%ld): cmd=%x "
++                      "POLLING MODE.\n", ha->host_no, command);)
++
++              WRT_REG_WORD(&reg->hccr, HCCR_SET_HOST_INT);
++              spin_unlock_irqrestore(&ha->hardware_lock, flags);
++              if (!abort_active)
++                      QLA_MBX_REG_UNLOCK(ha);
++
++
++              wait_time = jiffies + mcp->tov * HZ; /* wait at most tov secs */
++              while (!ha->flags.mbox_int) {
++                      if (time_after(jiffies, wait_time))
++                              break;
++
++                      /* Check for pending interrupts. */
++                      qla2x00_poll(ha);
++
++                      udelay(10); /* v4.27 */
++              } /* while */
++      }
++
++      if (!abort_active)
++              QLA_MBX_REG_LOCK(ha);
++
++      /* Check whether we timed out */
++      if (ha->flags.mbox_int) {
++
++              DEBUG3_11(printk("qla2x00_mailbox_cmd: cmd %x completed.\n",
++                  command);)
++
++              /* Got interrupt. Clear the flag. */
++              ha->flags.mbox_int = FALSE;
++              clear_bit(MBX_INTERRUPT, &ha->mbx_cmd_flags);
++
++              if( ha->mailbox_out[0] != MBS_CMD_CMP ) {
++                      qla2x00_stats.mboxerr++;
++                      status = QL_STATUS_ERROR;
++              }
++
++              /* Load return mailbox registers. */
++              optr = mcp->mb;
++              iptr = (uint16_t *)&ha->mailbox_out[0];
++              mboxes = mcp->in_mb;
++              for (cnt = 0; cnt < mbx_count; cnt++) {
++
++                      if (mboxes & BIT_0)
++                              *optr = *iptr;
++
++                      mboxes >>= 1;
++                      optr++;
++                      iptr++;
++              }
++      } else {
++
++#if defined(QL_DEBUG_LEVEL_2) || defined(QL_DEBUG_LEVEL_3) || \
++              defined(QL_DEBUG_LEVEL_11)
++              printk("qla2x00_mailbox_command(%ld): **** MB Command Timeout "
++                  "for cmd %x ****\n", ha->host_no, command);
++              printk("qla2x00_mailbox_command: icontrol=%x jiffies=%lx\n",
++                  RD_REG_WORD(&reg->ictrl), jiffies);
++              printk("qla2x00_mailbox_command: *** mailbox[0] = 0x%x ***\n",
++                  RD_REG_WORD(optr));
++              qla2x00_dump_regs(ha->host);
++#endif
++
++              qla2x00_stats.mboxtout++;
++              status = QL_STATUS_TIMEOUT;
++      }
++
++      if (!abort_active)
++              QLA_MBX_REG_UNLOCK(ha);
++
++      ha->flags.mbox_busy = FALSE;
++
++      /* Clean up */
++      ha->mcp = NULL;
++
++      if (!abort_active) {
++              DEBUG11(printk("qla2x00_mailbox_cmd: checking for additional "
++                  "resp interrupt.\n");)
++
++              /* polling mode for non isp_abort commands. */
++              qla2x00_poll(ha);
++      }
++
++      if (status == QL_STATUS_TIMEOUT ) {
++              if (!io_lock_on || (mcp->flags & IOCTL_CMD)) {
++                      /* not in dpc. schedule it for dpc to take over. */
++                      DEBUG(printk("qla2x00_mailbox_command(%ld): timeout "
++                          "schedule isp_abort_needed.\n",
++                          ha->host_no);)
++                      DEBUG2_3_11(printk("qla2x00_mailbox_command(%ld): "
++                          "timeout schedule isp_abort_needed.\n",
++                          ha->host_no);)
++                      set_bit(ISP_ABORT_NEEDED, &ha->dpc_flags);
++                      if (ha->dpc_wait && !ha->dpc_active) 
++                              up(ha->dpc_wait);
++
++              } else if (!abort_active) {
++
++                      /* call abort directly since we are in the DPC thread */
++                      DEBUG(printk("qla2x00_mailbox_command(%ld): timeout "
++                          "calling abort_isp\n", ha->host_no);)
++                      DEBUG2_3_11(printk("qla2x00_mailbox_command(%ld): "
++                          "timeout calling abort_isp\n", ha->host_no);)
++
++                      set_bit(ABORT_ISP_ACTIVE, &ha->dpc_flags);
++                      clear_bit(ISP_ABORT_NEEDED, &ha->dpc_flags);
++                      if (qla2x00_abort_isp(ha, 0)) {
++                              /* failed. retry later. */
++                              set_bit(ISP_ABORT_NEEDED, &ha->dpc_flags);
++                      }
++                      clear_bit(ABORT_ISP_ACTIVE, &ha->dpc_flags);
++
++                      DEBUG(printk("qla2x00_mailbox_command: finished "
++                          "abort_isp\n");)
++                      DEBUG2_3_11(printk("qla2x00_mailbox_command: finished "
++                          "abort_isp\n");)
++              }
++      }
++
++      /* Allow next mbx cmd to come in. */
++      if (!abort_active) {
++              tmp_stat = qla2x00_release_mbx_access(ha, mcp->tov);
++
++              if (status == 0)
++                      status = tmp_stat;
++      }
++
++      if (status) {
++              DEBUG2_3_11(printk("qla2x00_mailbox_command(%ld): **** FAILED. "
++                  "mbx0=%x, mbx1=%x, mbx2=%x, cmd=%x ****\n",
++              ha->host_no, mcp->mb[0], mcp->mb[1], mcp->mb[2], command);)
++      } else {
++              DEBUG11(printk("qla2x00_mailbox_command(%ld): done.\n",
++                  ha->host_no);)
++      }
++
++      DEBUG11(printk("qla2x00_mailbox_command(%ld): exiting.\n",
++          ha->host_no);)
++
++      return status;
++}
++
++/*
++ * qla2x00_load_ram
++ *    Load adapter RAM using DMA.
++ *
++ * Input:
++ *    ha = adapter block pointer.
++ *
++ * Returns:
++ *    qla2x00 local function return status code.
++ *
++ * Context:
++ *    Kernel context.
++ */
++int
++qla2x00_load_ram(scsi_qla_host_t *ha, dma_addr_t req_dma,
++              uint16_t risc_addr, uint16_t risc_code_size)
++{
++      int rval;
++      mbx_cmd_t mc;
++      mbx_cmd_t *mcp = &mc;
++      uint32_t        req_len;
++      dma_addr_t      nml_dma;
++      uint32_t        nml_len;
++      uint32_t        normalized;
++
++      DEBUG11(printk("qla2x00_load_ram(%ld): entered.\n",
++          ha->host_no);)
++
++      req_len = risc_code_size;
++      nml_dma = 0;
++      nml_len = 0;
++
++      normalized = qla2x00_normalize_dma_addr(
++                      &req_dma, &req_len,
++                      &nml_dma, &nml_len);
++
++      /* Load first segment */
++      mcp->mb[0] = MBC_LOAD_RAM_A64;
++      mcp->mb[1] = risc_addr;
++      mcp->mb[2] = MSW(req_dma);
++      mcp->mb[3] = LSW(req_dma);
++      mcp->mb[4] = (uint16_t)req_len;
++      mcp->mb[6] = MSW(MSD(req_dma));
++      mcp->mb[7] = LSW(MSD(req_dma));
++
++      mcp->out_mb = MBX_7|MBX_6|MBX_4|MBX_3|MBX_2|MBX_1|MBX_0;
++      mcp->in_mb = MBX_0;
++      mcp->tov = 30;
++      mcp->flags = 0;
++      rval = (int)qla2x00_mailbox_command(ha, mcp);
++
++      /* Load second segment - if necessary */
++      if (normalized && (rval == QL_STATUS_SUCCESS)) {
++              mcp->mb[0] = MBC_LOAD_RAM_A64;
++              mcp->mb[1] = risc_addr + (uint16_t)req_len;
++              mcp->mb[2] = MSW(nml_dma);
++              mcp->mb[3] = LSW(nml_dma);
++              mcp->mb[4] = (uint16_t)nml_len;
++              mcp->mb[6] = MSW(MSD(nml_dma));
++              mcp->mb[7] = LSW(MSD(nml_dma));
++
++              mcp->out_mb = MBX_7|MBX_6|MBX_4|MBX_3|MBX_2|MBX_1|MBX_0;
++              mcp->in_mb = MBX_0;
++              mcp->tov = 30;
++              mcp->flags = 0;
++              rval = (int)qla2x00_mailbox_command(ha, mcp);
++      }
++
++      if (rval == QL_STATUS_SUCCESS) {
++              /* Empty */
++              DEBUG11(printk("qla2x00_load_ram(%ld): done.\n",
++                  ha->host_no);)
++      } else {
++              /* Empty */
++              DEBUG2_3_11(printk("qla2x00_load_ram(%ld): failed. rval=%x "
++                  "mb[0]=%x.\n",
++                  ha->host_no, rval, mcp->mb[0]);)
++      }
++      return rval;
++}
++
++/*
++ * qla2x00_load_ram_ext
++ *    Load adapter extended RAM using DMA.
++ *
++ * Input:
++ *    ha = adapter block pointer.
++ *
++ * Returns:
++ *    qla2x00 local function return status code.
++ *
++ * Context:
++ *    Kernel context.
++ */
++int
++qla2x00_load_ram_ext(scsi_qla_host_t *ha,
++    dma_addr_t req_dma, uint32_t risc_addr, uint16_t risc_code_size)
++{
++      int rval;
++      mbx_cmd_t mc;
++      mbx_cmd_t *mcp = &mc;
++      uint32_t        req_len;
++      dma_addr_t      nml_dma;
++      uint32_t        nml_len;
++      uint32_t        normalized;
++
++      DEBUG11(printk("%s(%ld): entered.\n", __func__, ha->host_no));
++
++      req_len = risc_code_size;
++      nml_dma = 0;
++      nml_len = 0;
++
++      normalized = qla2x00_normalize_dma_addr(
++                      &req_dma, &req_len,
++                      &nml_dma, &nml_len);
++
++      /* Load first segment */
++      mcp->mb[0] = MBC_LOAD_RAM_EXTENDED;
++      mcp->mb[1] = LSW(risc_addr);
++      mcp->mb[2] = MSW(req_dma);
++      mcp->mb[3] = LSW(req_dma);
++      mcp->mb[4] = (uint16_t)req_len;
++      mcp->mb[6] = MSW(MSD(req_dma));
++      mcp->mb[7] = LSW(MSD(req_dma));
++      mcp->mb[8] = MSW(risc_addr);
++
++      mcp->out_mb = MBX_8|MBX_7|MBX_6|MBX_4|MBX_3|MBX_2|MBX_1|MBX_0;
++      mcp->in_mb = MBX_0;
++      mcp->tov = 30;
++      mcp->flags = 0;
++      rval = (int)qla2x00_mailbox_command(ha, mcp);
++
++      /* Load second segment - if necessary */
++      if (normalized && (rval == QL_STATUS_SUCCESS)) {
++              risc_addr += req_len;
++              mcp->mb[0] = MBC_LOAD_RAM_EXTENDED;
++              mcp->mb[1] = LSW(risc_addr);
++              mcp->mb[2] = MSW(nml_dma);
++              mcp->mb[3] = LSW(nml_dma);
++              mcp->mb[4] = (uint16_t)nml_len;
++              mcp->mb[6] = MSW(MSD(nml_dma));
++              mcp->mb[7] = LSW(MSD(nml_dma));
++              mcp->mb[8] = MSW(risc_addr);
++
++              mcp->out_mb = MBX_8|MBX_7|MBX_6|MBX_4|MBX_3|MBX_2|MBX_1|MBX_0;
++              mcp->in_mb = MBX_0;
++              mcp->tov = 30;
++              mcp->flags = 0;
++              rval = (int)qla2x00_mailbox_command(ha, mcp);
++      }
++
++      if (rval != QL_STATUS_SUCCESS) {
++              /*EMPTY*/
++              DEBUG2_3_11(printk("%s(%ld): failed=%x mb[0]=%x.\n",
++                  __func__, ha->host_no, rval, mcp->mb[0]));
++      } else {
++              /*EMPTY*/
++              DEBUG11(printk("%s(%ld): done.\n", __func__, ha->host_no));
++      }
++
++      return rval;
++}
++
++/*
++ * qla2x00_execute_fw
++ *    Start adapter firmware.
++ *
++ * Input:
++ *    ha = adapter block pointer.
++ *    TARGET_QUEUE_LOCK must be released.
++ *    ADAPTER_STATE_LOCK must be released.
++ *
++ * Returns:
++ *    qla2x00 local function return status code.
++ *
++ * Context:
++ *    Kernel context.
++ */
++int
++qla2x00_execute_fw(scsi_qla_host_t *ha)
++{
++      int rval;
++      mbx_cmd_t mc;
++      mbx_cmd_t *mcp = &mc;
++
++      DEBUG11(printk("qla2x00_execute_fw(%ld): entered.\n",
++          ha->host_no);)
++
++      mcp->mb[0] = MBC_EXECUTE_FIRMWARE;
++      mcp->mb[1] = *ha->brd_info->fwinfo[0].fwstart;
++      mcp->out_mb = MBX_1|MBX_0;
++      if (ha->pdev->device == QLA2322_DEVICE_ID) {
++              mcp->mb[2] = 0;
++              mcp->out_mb |= MBX_2;
++      }
++      mcp->in_mb = MBX_0;
++      mcp->tov = 30;
++      mcp->flags = 0;
++      rval = qla2x00_mailbox_command(ha, mcp);
++
++      DEBUG11(printk("qla2x00_execute_fw(%ld): done.\n",
++          ha->host_no);)
++
++      return rval;
++}
++
++/*
++ * qla2x00_get_fw_version
++ *    Get firmware version.
++ *
++ * Input:
++ *    ha:             adapter state pointer.
++ *    major:          pointer for major number.
++ *    minor:          pointer for minor number.
++ *    subminor:       pointer for subminor number.
++ *
++ * Returns:
++ *    qla2x00 local function return status code.
++ *
++ * Context:
++ *    Kernel context.
++ */
++void
++qla2x00_get_fw_version(scsi_qla_host_t *ha, uint16_t *major,
++    uint16_t *minor, uint16_t *subminor, uint16_t *attributes)
++{
++      int             rval;
++      mbx_cmd_t       mc;
++      mbx_cmd_t       *mcp = &mc;
++
++      DEBUG11(printk("%s(%ld): entered.\n", __func__, ha->host_no));
++
++      mcp->mb[0] = MBC_ABOUT_FIRMWARE;
++      mcp->out_mb = MBX_0;
++      mcp->in_mb = MBX_6|MBX_3|MBX_2|MBX_1|MBX_0;
++      mcp->flags = 0;
++      mcp->tov = 30;
++      rval = qla2x00_mailbox_command(ha, mcp);
++
++      /* Return mailbox data. */
++      *major = mcp->mb[1];
++      *minor = mcp->mb[2];
++      *subminor = mcp->mb[3];
++      *attributes = mcp->mb[6];
++
++      if (rval != QL_STATUS_SUCCESS) {
++              /*EMPTY*/
++              DEBUG2_3_11(printk("%s(%ld): failed=%x.\n",
++                  __func__, ha->host_no, rval));
++      } else {
++              /*EMPTY*/
++              DEBUG11(printk("%s(%ld): done.\n", __func__, ha->host_no));
++      }
++}
++
++/*
++ * qla2x00_get_fw_options
++ *    Set firmware options.
++ *
++ * Input:
++ *    ha = adapter block pointer.
++ *    fwopt = pointer for firmware options.
++ *
++ * Returns:
++ *    qla2x00 local function return status code.
++ *
++ * Context:
++ *    Kernel context.
++ */
++int
++qla2x00_get_fw_options(scsi_qla_host_t *ha,
++    uint16_t *fwopts1, uint16_t *fwopts2, uint16_t *fwopts3)
++{
++      int rval;
++      mbx_cmd_t mc;
++      mbx_cmd_t *mcp = &mc;
++
++      DEBUG11(printk("%s(%ld): entered.\n", __func__, ha->host_no));
++
++      mcp->mb[0] = MBC_GET_FIRMWARE_OPTIONS;
++      mcp->out_mb = MBX_0;
++      mcp->in_mb = MBX_3|MBX_2|MBX_1|MBX_0;
++      mcp->tov = 30;
++      mcp->flags = 0;
++      rval = (int)qla2x00_mailbox_command(ha, mcp);
++
++      if (rval != QL_STATUS_SUCCESS) {
++              /*EMPTY*/
++              DEBUG2_3_11(printk("%s(%ld): failed=%x.\n",
++                  __func__, ha->host_no, rval));
++      } else {
++              *fwopts1 = mcp->mb[1];
++              *fwopts2 = mcp->mb[2];
++              *fwopts3 = mcp->mb[3];
++
++              DEBUG11(printk("%s(%ld): done.\n", __func__, ha->host_no));
++      }
++
++      return rval;
++}
++
++
++/*
++ * qla2x00_set_fw_options
++ *    Set firmware options.
++ *
++ * Input:
++ *    ha = adapter block pointer.
++ *    fwopt = pointer for firmware options.
++ *
++ * Returns:
++ *    qla2x00 local function return status code.
++ *
++ * Context:
++ *    Kernel context.
++ */
++int
++qla2x00_set_fw_options(scsi_qla_host_t *ha,
++    uint16_t fwopts1, uint16_t fwopts2, uint16_t fwopts3, 
++    uint16_t fwopts10, uint16_t fwopts11)
++{
++      int rval;
++      mbx_cmd_t mc;
++      mbx_cmd_t *mcp = &mc;
++
++      DEBUG11(printk("%s(%ld): entered.\n", __func__, ha->host_no));
++
++      mcp->mb[0] = MBC_SET_FIRMWARE_OPTIONS;
++      mcp->mb[1] = fwopts1;
++      mcp->mb[2] = fwopts2;
++      mcp->mb[3] = fwopts3;
++      mcp->mb[10] = fwopts10;
++      mcp->mb[11] = fwopts11;
++      mcp->mb[12] = 0;        /* Undocumented, but used */
++      mcp->out_mb = MBX_12|MBX_11|MBX_10|MBX_3|MBX_2|MBX_1|MBX_0;
++      mcp->in_mb = MBX_0;
++      mcp->tov = 30;
++      mcp->flags = 0;
++
++      rval = (int)qla2x00_mailbox_command(ha, mcp);
++
++      if (rval != QL_STATUS_SUCCESS) {
++              /*EMPTY*/
++              DEBUG2_3_11(printk("%s(%ld): failed=%x.\n",
++                  __func__, ha->host_no, rval));
++      } else {
++              /*EMPTY*/
++              DEBUG11(printk("%s(%ld): done.\n", __func__, ha->host_no));
++      }
++
++      return rval;
++}
++
++/*
++ * qla2x00_read_ram_word
++ *
++ * Input:
++ *    ha = adapter block pointer.
++ *
++ * Returns:
++ *    qla2x00 local function return status code.
++ *
++ * Context:
++ *    Kernel context.
++ */
++int
++qla2x00_read_ram_word(scsi_qla_host_t *ha, uint16_t addr, uint16_t *data)
++{
++      int rval;
++      mbx_cmd_t mc;
++      mbx_cmd_t *mcp = &mc;
++
++      DEBUG11(printk("qla2x00_read_ram_word(%ld): entered.\n",
++          ha->host_no);)
++
++      mcp->mb[0] = MBC_READ_RAM_WORD;
++      mcp->mb[1] = addr;
++
++      mcp->out_mb = MBX_1|MBX_0;
++      mcp->in_mb = MBX_0|MBX_2;
++      mcp->tov = 30;
++      mcp->flags = 0;
++
++      rval = (int)qla2x00_mailbox_command(ha, mcp);
++
++      if (rval != QL_STATUS_SUCCESS) {
++              /*EMPTY*/
++              DEBUG2_3_11(printk("qla2x00_read_ram_word(%ld): failed=%x.\n",
++                  ha->host_no, rval);)
++      } else {
++              *data = mcp->mb[2];
++              DEBUG11(printk("qla2x00_read_ram_word(%ld): done.\n",
++                  ha->host_no);)
++      }
++
++      return rval;
++}
++
++/*
++ * qla2x00_write_ram_word
++ *
++ * Input:
++ *    ha = adapter block pointer.
++ *
++ * Returns:
++ *    qla2x00 local function return status code.
++ *
++ * Context:
++ *    Kernel context.
++ */
++int
++qla2x00_write_ram_word(scsi_qla_host_t *ha, uint16_t addr, uint16_t data)
++{
++      int rval;
++      mbx_cmd_t mc;
++      mbx_cmd_t *mcp = &mc;
++
++      DEBUG11(printk("qla2x00_write_ram_word(%ld): entered.\n",
++          ha->host_no);)
++
++      mcp->mb[0] = MBC_WRITE_RAM_WORD;
++      mcp->mb[1] = addr;
++      mcp->mb[2] = data;
++      mcp->out_mb = MBX_2|MBX_1|MBX_0;
++      mcp->in_mb = MBX_0;
++      mcp->tov = 30;
++      mcp->flags = 0;
++
++      rval = (int)qla2x00_mailbox_command(ha, mcp);
++
++      if (rval != QL_STATUS_SUCCESS) {
++              /*EMPTY*/
++              DEBUG2_3_11(printk("qla2x00_write_ram_word(%ld): failed=%x.\n",
++                  ha->host_no, rval);)
++      } else {
++              /*EMPTY*/
++              DEBUG11(printk("qla2x00_write_ram_word(%ld): done.\n",
++                  ha->host_no);)
++      }
++
++      return rval;
++}
++
++/*
++ * qla2x00_write_ram_word_ext
++ *
++ * Input:
++ *    ha = adapter block pointer.
++ *
++ * Returns:
++ *    qla2x00 local function return status code.
++ *
++ * Context:
++ *    Kernel context.
++ */
++int
++qla2x00_write_ram_word_ext(scsi_qla_host_t *ha, uint32_t addr, uint16_t data)
++{
++      int rval;
++      mbx_cmd_t mc;
++      mbx_cmd_t *mcp = &mc;
++
++      DEBUG11(printk("%s(%ld): entered.\n", __func__, ha->host_no));
++
++      mcp->mb[0] = MBC_WRITE_RAM_WORD_EXTENDED;
++      mcp->mb[1] = LSW(addr);
++      mcp->mb[2] = data;
++      mcp->mb[8] = MSW(addr);
++      mcp->out_mb = MBX_8|MBX_2|MBX_1|MBX_0;
++      mcp->in_mb = MBX_0;
++      mcp->tov = 30;
++      mcp->flags = 0;
++
++      rval = (int)qla2x00_mailbox_command(ha, mcp);
++
++      if (rval != QL_STATUS_SUCCESS) {
++              /*EMPTY*/
++              DEBUG2_3_11(printk("%s(%ld): failed=%x.\n",
++                  __func__, ha->host_no, rval));
++      } else {
++              /*EMPTY*/
++              DEBUG11(printk("%s(%ld): done.\n", __func__, ha->host_no));
++      }
++
++      return rval;
++}
++
++/*
++ * qla2x00_mbx_reg_test
++ *    Mailbox register wrap test.
++ *
++ * Input:
++ *    ha = adapter block pointer.
++ *    TARGET_QUEUE_LOCK must be released.
++ *    ADAPTER_STATE_LOCK must be released.
++ *
++ * Returns:
++ *    qla2x00 local function return status code.
++ *
++ * Context:
++ *    Kernel context.
++ */
++int
++qla2x00_mbx_reg_test(scsi_qla_host_t *ha)
++{
++      int rval;
++      mbx_cmd_t mc;
++      mbx_cmd_t *mcp = &mc;
++
++      DEBUG11(printk("qla2x00_mbx_reg_test(%ld): entered.\n",
++          ha->host_no);)
++
++      mcp->mb[0] = MBC_MAILBOX_REGISTER_TEST;
++      mcp->mb[1] = 0xAAAA;
++      mcp->mb[2] = 0x5555;
++      mcp->mb[3] = 0xAA55;
++      mcp->mb[4] = 0x55AA;
++      mcp->mb[5] = 0xA5A5;
++      mcp->mb[6] = 0x5A5A;
++      mcp->mb[7] = 0x2525;
++      mcp->out_mb = MBX_7|MBX_6|MBX_5|MBX_4|MBX_3|MBX_2|MBX_1|MBX_0;
++      mcp->in_mb = MBX_7|MBX_6|MBX_5|MBX_4|MBX_3|MBX_2|MBX_1|MBX_0;
++      mcp->tov = 30;
++      mcp->flags = 0;
++      rval = (int)qla2x00_mailbox_command(ha, mcp);
++
++      if (rval == QL_STATUS_SUCCESS) {
++              if (mcp->mb[1] != 0xAAAA || mcp->mb[2] != 0x5555 ||
++                  mcp->mb[3] != 0xAA55 || mcp->mb[4] != 0x55AA)
++                      rval = QL_STATUS_ERROR;
++              if (mcp->mb[5] != 0xA5A5 || mcp->mb[6] != 0x5A5A ||
++                  mcp->mb[7] != 0x2525)
++                      rval = QL_STATUS_ERROR;
++      }
++
++      if (rval != QL_STATUS_SUCCESS) {
++              /*EMPTY*/
++              DEBUG2_3_11(printk("qla2x00_mbx_reg_test(%ld): failed=%x.\n",
++                  ha->host_no, rval);)
++      } else {
++              /*EMPTY*/
++              DEBUG11(printk("qla2x00_mbx_reg_test(%ld): done.\n",
++                  ha->host_no);)
++      }
++
++      return rval;
++}
++
++/*
++ * qla2x00_verify_checksum
++ *    Verify firmware checksum.
++ *
++ * Input:
++ *    ha = adapter block pointer.
++ *    TARGET_QUEUE_LOCK must be released.
++ *    ADAPTER_STATE_LOCK must be released.
++ *
++ * Returns:
++ *    qla2x00 local function return status code.
++ *
++ * Context:
++ *    Kernel context.
++ */
++int
++qla2x00_verify_checksum(scsi_qla_host_t *ha)
++{
++      int rval;
++      mbx_cmd_t mc;
++      mbx_cmd_t *mcp = &mc;
++
++      DEBUG11(printk("qla2x00_verify_checksum(%ld): entered.\n",
++          ha->host_no);)
++
++      mcp->mb[0] = MBC_VERIFY_CHECKSUM;
++      mcp->mb[1] = *ha->brd_info->fwinfo[0].fwstart;
++      mcp->out_mb = MBX_1|MBX_0;
++      mcp->in_mb = MBX_2|MBX_0;
++      mcp->tov = 30;
++      mcp->flags = 0;
++      rval = (int)qla2x00_mailbox_command(ha, mcp);
++
++      if (rval != QL_STATUS_SUCCESS) {
++              /*EMPTY*/
++              DEBUG2_3_11(printk("qla2x00_verify_checksum(%ld): failed=%x.\n",
++                  ha->host_no, rval);)
++      } else {
++              /*EMPTY*/
++              DEBUG11(printk("qla2x00_verify_checksum(%ld): done.\n",
++                  ha->host_no);)
++      }
++
++      return rval;
++}
++
++/*
++ * qla2x00_issue_iocb
++ *    Issue IOCB using mailbox command
++ *
++ * Input:
++ *    ha = adapter state pointer.
++ *    buffer = buffer pointer.
++ *    phys_addr = physical address of buffer.
++ *    size = size of buffer.
++ *    TARGET_QUEUE_LOCK must be released.
++ *    ADAPTER_STATE_LOCK must be released.
++ *
++ * Returns:
++ *    qla2x00 local function return status code.
++ *
++ * Context:
++ *    Kernel context.
++ */
++int
++qla2x00_issue_iocb(scsi_qla_host_t *ha, void*  buffer, dma_addr_t phys_addr,
++    size_t size)
++{
++      int             rval;
++      mbx_cmd_t       mc;
++      mbx_cmd_t       *mcp = &mc;
++
++      ENTER("qla2x00_issue_iocb: started");
++
++      mcp->mb[0] = MBC_IOCB_EXECUTE_A64;
++      mcp->mb[1] = 0;
++      mcp->mb[2] = MSW(phys_addr);
++      mcp->mb[3] = LSW(phys_addr);
++      mcp->mb[6] = MSW(MSD(phys_addr));
++      mcp->mb[7] = LSW(MSD(phys_addr));
++      mcp->out_mb = MBX_7|MBX_6|MBX_3|MBX_2|MBX_1|MBX_0;
++      mcp->in_mb = MBX_2|MBX_0;
++      mcp->tov = 30;
++      mcp->flags = 0;
++      rval = (int)qla2x00_mailbox_command(ha, mcp);
++
++      if (rval != QLA2X00_SUCCESS) {
++              /*EMPTY*/
++              DEBUG(printk("qla2x00_issue_iocb(%ld): failed rval 0x%x",
++                  ha->host_no,rval);)
++              DEBUG2(printk("qla2x00_issue_iocb(%ld): failed rval 0x%x",
++                  ha->host_no,rval);)
++      } else {
++              /*EMPTY*/
++              LEAVE("qla2x00_issue_iocb: exiting normally");
++      }
++
++      return rval;
++}
++
++/*
++ * qla2x00_abort_command
++ *    Abort command aborts a specified IOCB.
++ *
++ * Input:
++ *    ha = adapter block pointer.
++ *    sp = SB structure pointer.
++ *
++ * Returns:
++ *    qla2x00 local function return status code.
++ *
++ * Context:
++ *    Kernel context.
++ */
++int
++qla2x00_abort_command(scsi_qla_host_t *ha, srb_t *sp)
++{
++      unsigned long   flags = 0;
++      scsi_qla_host_t *curr_ha;
++      fc_port_t       *fcport;
++      int             rval;
++      uint32_t        handle;
++      uint16_t        t;
++      mbx_cmd_t       mc;
++      mbx_cmd_t       *mcp = &mc;
++      os_lun_t        *lq = sp->lun_queue;
++
++      DEBUG11(printk("qla2x00_abort_command(%ld): entered.\n",
++          ha->host_no);)
++
++      curr_ha = lq->fclun->fcport->ha;
++      t = SCSI_TCN_32(sp->cmd);
++      fcport = lq->fclun->fcport;
++      if (curr_ha->loop_state == LOOP_DOWN ||
++              atomic_read(&fcport->state) == FC_DEVICE_LOST) {
++              /* v2.19.8 Ignore abort request if port is down */
++              return 1;
++      }
++
++      spin_lock_irqsave(&ha->hardware_lock, flags);
++      for (handle = 1; handle < MAX_OUTSTANDING_COMMANDS; handle++) {
++              if( ha->outstanding_cmds[handle] == sp )
++                      break;
++      }
++      spin_unlock_irqrestore(&ha->hardware_lock, flags);
++
++      if (handle == MAX_OUTSTANDING_COMMANDS) {
++              /* command not found */
++              return QL_STATUS_ERROR;
++      }
++
++      mcp->mb[0] = MBC_ABORT_COMMAND;
++#if defined(EXTENDED_IDS)
++      mcp->mb[1] = fcport->loop_id & 0xFF;
++#else
++      mcp->mb[1] = fcport->loop_id << 8;
++#endif
++      mcp->mb[2] = (uint16_t)handle;
++      mcp->mb[3] = (uint16_t)(handle >> 16);
++      mcp->mb[6] = (uint16_t)lq->fclun->lun;
++      mcp->out_mb = MBX_6|MBX_3|MBX_2|MBX_1|MBX_0;
++      mcp->in_mb = MBX_0;
++      mcp->tov = 30;
++      mcp->flags = 0;
++
++      rval = (int)qla2x00_mailbox_command(ha, mcp);
++
++      if (rval != QL_STATUS_SUCCESS) {
++              DEBUG2_3_11(printk("qla2x00_abort_command(%ld): failed=%x.\n",
++                  ha->host_no, rval);)
++      } else {
++              sp->flags |= SRB_ABORT_PENDING;
++              DEBUG11(printk("qla2x00_abort_command(%ld): done.\n",
++                  ha->host_no);)
++      }
++
++      return rval;
++}
++
++/*
++ * qla2x00_abort_device
++ *
++ * Input:
++ *    ha = adapter block pointer.
++ *      loop_id  = FC loop ID
++ *      lun  = SCSI LUN.
++ *
++ * Returns:
++ *    qla2x00 local function return status code.
++ *
++ * Context:
++ *    Kernel context.
++ */
++int
++qla2x00_abort_device(scsi_qla_host_t *ha, uint16_t loop_id, uint16_t lun)
++{
++      int rval;
++      mbx_cmd_t mc;
++      mbx_cmd_t *mcp = &mc;
++
++      DEBUG11(printk("qla2x00_abort_device(%ld): entered.\n",
++                      ha->host_no);)
++
++      mcp->mb[0] = MBC_ABORT_DEVICE;
++#if defined(EXTENDED_IDS)
++      mcp->mb[1] = loop_id & 0xFF;
++#else
++      mcp->mb[1] = loop_id << 8;
++#endif
++      mcp->mb[2] = lun;
++      mcp->out_mb = MBX_2|MBX_1|MBX_0;
++      mcp->in_mb = MBX_0;
++      mcp->tov = 30;
++      mcp->flags = 0;
++      rval = (int)qla2x00_mailbox_command(ha, mcp);
++
++      /* Issue marker command. */
++      qla2x00_marker(ha, loop_id, lun, MK_SYNC_ID_LUN);
++
++      if (rval != QL_STATUS_SUCCESS) {
++              set_bit(ISP_ABORT_NEEDED, &ha->dpc_flags);
++              if (ha->dpc_wait && !ha->dpc_active) 
++                      up(ha->dpc_wait);
++              DEBUG2_3_11(printk("qla2x00_abort_device(%ld): failed=%x.\n",
++                  ha->host_no, rval);)
++      } else {
++              /*EMPTY*/
++              DEBUG11(printk("qla2x00_abort_device(%ld): done.\n",
++                  ha->host_no);)
++      }
++
++      return rval;
++}
++
++#if USE_ABORT_TGT
++/*
++ * qla2x00_abort_target
++ *    Issue abort target mailbox command.
++ *
++ * Input:
++ *    ha = adapter block pointer.
++ *    b = Always 0.
++ *    t = SCSI ID.
++ *    TARGET_QUEUE_LOCK must be released.
++ *    ADAPTER_STATE_LOCK must be released.
++ *
++ * Returns:
++ *    qla2x00 local function return status code.
++ *
++ * Context:
++ *    Kernel context.
++ */
++int
++qla2x00_abort_target(fc_port_t *fcport)
++{
++      int        rval;
++      uint16_t   loop_id;
++      mbx_cmd_t  mc;
++      mbx_cmd_t  *mcp = &mc;
++
++      DEBUG11(printk("qla2x00_abort_target(%ld): entered.\n",
++          fcport->ha->host_no);)
++
++      if (fcport == NULL) {
++              /* no target to abort */
++              return 0;
++      }
++
++      loop_id = fcport->loop_id;
++
++      mcp->mb[0] = MBC_ABORT_TARGET;
++#if defined(EXTENDED_IDS)
++      mcp->mb[1] = loop_id & 0xFF;
++#else
++      mcp->mb[1] = loop_id << 8;
++#endif
++      mcp->mb[2] = fcport->ha->loop_reset_delay;
++      mcp->out_mb = MBX_2|MBX_1|MBX_0;
++#if defined(EXTENDED_IDS)
++      mcp->mb[10] = 0;
++      mcp->out_mb |= MBX_10;
++#endif
++      mcp->in_mb = MBX_0;
++      mcp->tov = 30;
++      mcp->flags = 0;
++      rval = (int)qla2x00_mailbox_command(fcport->ha, mcp);
++
++      /* Issue marker command. */
++/*    qla2x00_marker(fcport->ha, loop_id, 0, MK_SYNC_ID);*/
++      fcport->ha->marker_needed = 1;
++
++      if (rval != QL_STATUS_SUCCESS) {
++/*            set_bit(ISP_ABORT_NEEDED, &ha->dpc_flags);
++              if (ha->dpc_wait && !ha->dpc_active) 
++                      up(ha->dpc_wait); */
++              DEBUG2_3_11(printk("qla2x00_abort_target(%ld): failed=%x.\n",
++                  fcport->ha->host_no, rval);)
++      } else {
++              /*EMPTY*/
++              DEBUG11(printk("qla2x00_abort_target(%ld): done.\n",
++                  fcport->ha->host_no);)
++      }
++
++      return rval;
++}
++#endif
++
++/*
++ * qla2x00_target_reset
++ *    Issue target reset mailbox command.
++ *
++ * Input:
++ *    ha = adapter block pointer.
++ *    TARGET_QUEUE_LOCK must be released.
++ *    ADAPTER_STATE_LOCK must be released.
++ *
++ * Returns:
++ *    qla2x00 local function return status code.
++ *
++ * Context:
++ *    Kernel context.
++ */
++int
++qla2x00_target_reset(scsi_qla_host_t *ha, uint16_t b, uint16_t t)
++{
++      int rval;
++      mbx_cmd_t mc;
++      mbx_cmd_t *mcp = &mc;
++      os_tgt_t *tgt;
++
++      DEBUG11(printk("qla2x00_target_reset(%ld): entered.\n", ha->host_no);)
++
++      tgt = TGT_Q(ha, t);
++      if (tgt->vis_port == NULL) {
++              /* no target to abort */
++              return 0;
++      }
++      if (atomic_read(&tgt->vis_port->state) != FC_ONLINE) {
++              /* target not online */
++              return 0;
++      }
++
++      mcp->mb[0] = MBC_TARGET_RESET;
++#if defined(EXTENDED_IDS)
++      mcp->mb[1] = tgt->vis_port->loop_id & 0xFF;
++#else
++      mcp->mb[1] = tgt->vis_port->loop_id << 8;
++#endif
++      mcp->mb[2] = ha->loop_reset_delay;
++      mcp->out_mb = MBX_2|MBX_1|MBX_0;
++      mcp->in_mb = MBX_0;
++      mcp->tov = 30;
++      mcp->flags = 0;
++      rval = (int)qla2x00_mailbox_command(ha, mcp);
++
++      if (rval != QL_STATUS_SUCCESS) {
++              /*EMPTY*/
++              DEBUG2_3_11(printk("qla2x00_target_reset(%ld): failed=%x.\n",
++                  ha->host_no, rval);)
++      } else {
++              /*EMPTY*/
++              DEBUG11(printk("qla2x00_target_reset(%ld): done.\n",
++                  ha->host_no);)
++      }
++
++      return rval;
++}
++
++/*
++ * qla2x00_get_adapter_id
++ *    Get adapter ID and topology.
++ *
++ * Input:
++ *    ha = adapter block pointer.
++ *    id = pointer for loop ID.
++ *    al_pa = pointer for AL_PA.
++ *    area = pointer for area.
++ *    domain = pointer for domain.
++ *    top = pointer for topology.
++ *    TARGET_QUEUE_LOCK must be released.
++ *    ADAPTER_STATE_LOCK must be released.
++ *
++ * Returns:
++ *    qla2x00 local function return status code.
++ *
++ * Context:
++ *    Kernel context.
++ */
++int
++qla2x00_get_adapter_id(scsi_qla_host_t *ha, uint16_t *id, uint8_t *al_pa,
++    uint8_t *area, uint8_t *domain, uint16_t *top)
++{
++      int rval;
++      mbx_cmd_t mc;
++      mbx_cmd_t *mcp = &mc;
++
++      DEBUG11(printk("qla2x00_get_adapter_id(%ld): entered.\n",
++          ha->host_no);)
++
++      mcp->mb[0] = MBC_GET_ADAPTER_LOOP_ID;
++      mcp->out_mb = MBX_0;
++      mcp->in_mb = MBX_7|MBX_6|MBX_3|MBX_2|MBX_1|MBX_0;
++      mcp->tov = 30;
++      mcp->flags = 0;
++      rval = (int)qla2x00_mailbox_command(ha, mcp);
++
++      /* Return data. */
++      *id = mcp->mb[1];
++      *al_pa = LSB(mcp->mb[2]);
++      *area = MSB(mcp->mb[2]);
++      *domain = LSB(mcp->mb[3]);
++      *top = mcp->mb[6];
++
++      if (rval != QL_STATUS_SUCCESS) {
++              /*EMPTY*/
++              DEBUG2_3_11(printk("qla2x00_get_adapter_id(%ld): failed=%x.\n",
++                  ha->host_no, rval);)
++      } else {
++              /*EMPTY*/
++              DEBUG11(printk("qla2x00_get_adapter_id(%ld): done.\n",
++                  ha->host_no);)
++      }
++
++      return rval;
++}
++
++/*
++ * qla2x00_get_retry_cnt
++ *    Get current firmware login retry count and delay.
++ *
++ * Input:
++ *    ha = adapter block pointer.
++ *    retry_cnt = pointer to login retry count.
++ *    tov = pointer to login timeout value.
++ *
++ * Returns:
++ *    qla2x00 local function return status code.
++ *
++ * Context:
++ *    Kernel context.
++ */
++int
++qla2x00_get_retry_cnt(scsi_qla_host_t *ha, uint8_t *retry_cnt, uint8_t *tov)
++{
++      int rval;
++      uint16_t ratov;
++      mbx_cmd_t mc;
++      mbx_cmd_t *mcp = &mc;
++
++      DEBUG11(printk("qla2x00_get_retry_cnt(%ld): entered.\n",
++                      ha->host_no);)
++
++      mcp->mb[0] = MBC_GET_RETRY_COUNT;
++      mcp->out_mb = MBX_0;
++      mcp->in_mb = MBX_3|MBX_2|MBX_1|MBX_0;
++      mcp->tov = 30;
++      mcp->flags = 0;
++      rval = (int)qla2x00_mailbox_command(ha, mcp);
++
++      if (rval != QL_STATUS_SUCCESS) {
++              /*EMPTY*/
++              DEBUG2_3_11(printk("qla2x00_get_retry_cnt(%ld): failed = %x.\n",
++                  ha->host_no, mcp->mb[0]);)
++      } else {
++              /* Convert returned data and check our values. */
++              ratov = (mcp->mb[3]/2) / 10;  /* mb[3] value is in 100ms */
++              if (mcp->mb[1] * ratov > (*retry_cnt) * (*tov)) {
++                      /* Update to the larger values */
++                      *retry_cnt = (uint8_t)mcp->mb[1];
++                      *tov = ratov;
++              }
++
++              DEBUG11(printk("qla2x00_get_retry_cnt(%ld): done. mb3=%d "
++                  "ratov=%d.\n", ha->host_no, mcp->mb[3], ratov);)
++      }
++
++      return rval;
++}
++
++/*
++ * qla2x00_loopback_test
++ *    Send out a LOOPBACK mailbox command.
++ *
++ * Input:
++ *    ha = adapter block pointer.
++ *    retry_cnt = pointer to login retry count.
++ *    tov = pointer to login timeout value.
++ *
++ * Returns:
++ *    qla2x00 local function return status code.
++ *
++ * Context:
++ *    Kernel context.
++ */
++int
++qla2x00_loopback_test(scsi_qla_host_t *ha, INT_LOOPBACK_REQ *req,
++    uint16_t *ret_mb)
++{
++      int             rval;
++      mbx_cmd_t       mc;
++      mbx_cmd_t       *mcp = &mc;
++
++      memset(mcp->mb, 0 , sizeof(mcp->mb));
++
++      mcp->mb[0] = MBC_DIAGNOSTIC_LOOP_BACK;
++      mcp->mb[1] = req->Options;
++      mcp->mb[10] = LSW(req->TransferCount);
++      mcp->mb[11] = MSW(req->TransferCount);
++
++      mcp->mb[14] = LSW(ha->ioctl_mem_phys); /* send data address */
++      mcp->mb[15] = MSW(ha->ioctl_mem_phys);
++      mcp->mb[20] = LSW(MSD(ha->ioctl_mem_phys));
++      mcp->mb[21] = MSW(MSD(ha->ioctl_mem_phys));
++
++      mcp->mb[16] = LSW(ha->ioctl_mem_phys); /* rcv data address */
++      mcp->mb[17] = MSW(ha->ioctl_mem_phys);
++      mcp->mb[6] = LSW(MSD(ha->ioctl_mem_phys));
++      mcp->mb[7] = MSW(MSD(ha->ioctl_mem_phys));
++
++      mcp->mb[18] = LSW(req->IterationCount); /* iteration count lsb */
++      mcp->mb[19] = MSW(req->IterationCount); /* iteration count msb */
++
++      mcp->out_mb = MBX_21|MBX_20|MBX_19|MBX_18|MBX_17|MBX_16|MBX_15|
++              MBX_14|MBX_13|MBX_12|MBX_11|MBX_10|MBX_7|MBX_6|MBX_1|MBX_0;
++      mcp->in_mb = MBX_19|MBX_18|MBX_3|MBX_2|MBX_1|MBX_0;
++      mcp->buf_size = req->TransferCount;
++      mcp->flags = MBX_DMA_OUT|MBX_DMA_IN|IOCTL_CMD;
++      mcp->tov = 30;
++
++      DEBUG11(printk("qla2x00_send_loopback: req.Options=%x iterations=%x "
++          "MAILBOX_CNT=%d.\n", req->Options, req->IterationCount,
++          MAILBOX_REGISTER_COUNT);)
++
++      rval = qla2x00_mailbox_command(ha, mcp);
++
++      /* Always copy back return mailbox values. */
++      memcpy((void *)ret_mb, (void *)mcp->mb, sizeof(mcp->mb));
++
++      if (rval != QL_STATUS_SUCCESS) {
++              /* Empty. */
++              DEBUG2_3_11(printk(
++                  "qla2x00_loopback_test(%ld): mailbox command FAILED=%x.\n",
++                  ha->host_no, mcp->mb[0]);)
++      } else {
++              /* Empty. */
++              DEBUG11(printk(
++                  "qla2x00_loopback_test(%ld): done.\n", ha->host_no);)
++      }
++
++      return rval;
++}
++
++/*
++ * qla2x00_init_firmware
++ *    Initialize adapter firmware.
++ *
++ * Input:
++ *    ha = adapter block pointer.
++ *    dptr = Initialization control block pointer.
++ *    size = size of initialization control block.
++ *    TARGET_QUEUE_LOCK must be released.
++ *    ADAPTER_STATE_LOCK must be released.
++ *
++ * Returns:
++ *    qla2x00 local function return status code.
++ *
++ * Context:
++ *    Kernel context.
++ */
++int
++qla2x00_init_firmware(scsi_qla_host_t *ha, uint16_t size)
++{
++      int rval;
++      mbx_cmd_t mc;
++      mbx_cmd_t *mcp = &mc;
++
++      DEBUG11(printk("qla2x00_init_firmware(%ld): entered.\n",
++          ha->host_no);)
++
++      mcp->mb[0] = MBC_INITIALIZE_FIRMWARE;
++      mcp->mb[2] = MSW(ha->init_cb_dma);
++      mcp->mb[3] = LSW(ha->init_cb_dma);
++      mcp->mb[4] = 0;
++      mcp->mb[5] = 0;
++      mcp->mb[6] = MSW(MSD(ha->init_cb_dma));
++      mcp->mb[7] = LSW(MSD(ha->init_cb_dma));
++      mcp->out_mb = MBX_7|MBX_6|MBX_3|MBX_2|MBX_0;
++      mcp->in_mb = MBX_5|MBX_4|MBX_0;
++      mcp->buf_size = size;
++      mcp->flags = MBX_DMA_OUT;
++      mcp->tov = 30;
++      rval = (int)qla2x00_mailbox_command(ha, mcp);
++
++      if (rval != QL_STATUS_SUCCESS) {
++              /*EMPTY*/
++              DEBUG2_3_11(printk("qla2x00_init_firmware(%ld): failed=%x "
++                  "mb0=%x.\n",
++                  ha->host_no, rval, mcp->mb[0]);)
++      } else {
++              /*EMPTY*/
++              DEBUG11(printk("qla2x00_init_firmware(%ld): done.\n",
++                  ha->host_no);)
++      }
++
++      return rval;
++}
++
++/*
++ * qla2x00_get_port_database
++ *    Issue normal/enhanced get port database mailbox command
++ *    and copy device name as necessary.
++ *
++ * Input:
++ *    ha = adapter state pointer.
++ *    dev = structure pointer.
++ *    opt = enhanced cmd option byte.
++ *
++ * Returns:
++ *    qla2x00 local function return status code.
++ *
++ * Context:
++ *    Kernel context.
++ */
++int
++qla2x00_get_port_database(scsi_qla_host_t *ha, fcdev_t *dev, uint8_t opt)
++{
++      int rval;
++      mbx_cmd_t mc;
++      mbx_cmd_t *mcp = &mc;
++      port_database_t *pd;
++      dma_addr_t phys_address = 0;
++
++      DEBUG11(printk("qla2x00_get_port_database(%ld): entered.\n",
++          ha->host_no);)
++
++      pd = pci_alloc_consistent(ha->pdev, PORT_DATABASE_SIZE, &phys_address);
++      if (pd  == NULL) {
++              DEBUG2_3_11(printk("qla2x00_get_port_database(%ld): **** "
++                  "Mem Alloc Failed ****",
++                  ha->host_no);)
++              return QL_STATUS_RESOURCE_ERROR;
++      }
++
++      memset(pd, 0, PORT_DATABASE_SIZE);
++
++      if (opt != 0)
++              mcp->mb[0] = MBC_ENHANCED_GET_PORT_DATABASE;
++      else
++              mcp->mb[0] = MBC_GET_PORT_DATABASE;
++
++#if defined(EXTENDED_IDS)
++      mcp->mb[1] = dev->loop_id & 0xFF;
++#else
++      mcp->mb[1] = dev->loop_id << 8 | opt;
++#endif
++      mcp->mb[2] = MSW(phys_address);
++      mcp->mb[3] = LSW(phys_address);
++      mcp->mb[6] = MSW(MSD(phys_address));
++      mcp->mb[7] = LSW(MSD(phys_address));
++      mcp->out_mb = MBX_7|MBX_6|MBX_3|MBX_2|MBX_1|MBX_0;
++#if defined(EXTENDED_IDS)
++      mcp->mb[10] = opt;
++      mcp->out_mb |= MBX_10;
++#endif
++      mcp->in_mb = MBX_0;
++      mcp->buf_size = PORT_DATABASE_SIZE;
++      mcp->flags = MBX_DMA_IN;
++      /*mcp->tov = ha->retry_count * ha->login_timeout * 2;*/
++      mcp->tov =  ha->login_timeout * 2;
++      rval = (int)qla2x00_mailbox_command(ha, mcp);
++
++      if (rval == QL_STATUS_SUCCESS) {
++              /* Save some data */
++              /* Names are big endian. */
++              memcpy((void *)&dev->name[0],(void *)&pd->node_name[0], 8);
++              memcpy((void *)&dev->wwn[0], (void *)&pd->port_name[0], 8);
++
++              /* Get port_id of device. */
++              dev->d_id.b.al_pa = pd->port_id[2];
++              dev->d_id.b.area = pd->port_id[3];
++              dev->d_id.b.domain = pd->port_id[0];
++              dev->d_id.b.rsvd_1 = 0;
++
++              /* Get initiator status of device. */
++              pd->prli_svc_param_word_3[0] & BIT_5 ?
++                  (dev->flag = dev->flag | DEV_INITIATOR) :
++                  (dev->flag = dev->flag & ~DEV_INITIATOR);
++
++              /* Check for logged in and whether target device. */
++              if (pd->master_state != PD_STATE_PORT_LOGGED_IN &&
++                  pd->slave_state != PD_STATE_PORT_LOGGED_IN) {
++                      rval = QL_STATUS_ERROR;
++              } else if (pd->master_state == PD_STATE_PORT_UNAVAILABLE) {
++                      rval = QL_STATUS_ERROR;
++              }
++      }
++
++      pci_free_consistent(ha->pdev, PORT_DATABASE_SIZE, pd, phys_address);
++
++      if (rval != QL_STATUS_SUCCESS) {
++              /*EMPTY*/
++              DEBUG2_3_11(printk("qla2x00_get_port_database(%ld): "
++                  "failed=%x.\n", ha->host_no, rval);)
++      } else {
++              /*EMPTY*/
++              DEBUG11(printk("qla2x00_get_port_database(%ld): done.\n",
++                  ha->host_no);)
++      }
++
++      return rval;
++}
++
++/*
++ * qla2x00_get_firmware_state
++ *    Get adapter firmware state.
++ *
++ * Input:
++ *    ha = adapter block pointer.
++ *    dptr = pointer for firmware state.
++ *    TARGET_QUEUE_LOCK must be released.
++ *    ADAPTER_STATE_LOCK must be released.
++ *
++ * Returns:
++ *    qla2x00 local function return status code.
++ *
++ * Context:
++ *    Kernel context.
++ */
++int
++qla2x00_get_firmware_state(scsi_qla_host_t *ha, uint16_t *dptr)
++{
++      int rval;
++      mbx_cmd_t mc;
++      mbx_cmd_t *mcp = &mc;
++
++      DEBUG11(printk("qla2x00_get_firmware_state(%ld): entered.\n",
++          ha->host_no);)
++
++      mcp->mb[0] = MBC_GET_FIRMWARE_STATE;
++      mcp->out_mb = MBX_0;
++      mcp->in_mb = MBX_2|MBX_1|MBX_0;
++      mcp->tov = 30;
++      mcp->flags = 0;
++      rval = (int)qla2x00_mailbox_command(ha, mcp);
++
++      /* Return firmware state. */
++      *dptr = mcp->mb[1];
++
++      if (rval != QL_STATUS_SUCCESS) {
++              /*EMPTY*/
++              DEBUG2_3_11(printk("qla2x00_get_firmware_state(%ld): "
++                  "failed=%x.\n", ha->host_no, rval);)
++      } else {
++              /*EMPTY*/
++              DEBUG11(printk("qla2x00_get_firmware_state(%ld): done.\n",
++                  ha->host_no);)
++      }
++
++      return rval;
++}
++
++/*
++ * qla2x00_get_port_name
++ *    Issue get port name mailbox command.
++ *    Returned name is in big endian format.
++ *
++ * Input:
++ *    ha = adapter block pointer.
++ *    loop_id = loop ID of device.
++ *    name = pointer for name.
++ *    TARGET_QUEUE_LOCK must be released.
++ *    ADAPTER_STATE_LOCK must be released.
++ *
++ * Returns:
++ *    qla2x00 local function return status code.
++ *
++ * Context:
++ *    Kernel context.
++ */
++int
++qla2x00_get_port_name(scsi_qla_host_t *ha, uint16_t loop_id, uint8_t *name,
++    uint8_t opt)
++{
++      int rval;
++      mbx_cmd_t mc;
++      mbx_cmd_t *mcp = &mc;
++
++      DEBUG11(printk("qla2x00_get_port_name(%ld): entered.\n",
++          ha->host_no);)
++
++      mcp->mb[0] = MBC_GET_PORT_NAME;
++#if defined(EXTENDED_IDS)
++      mcp->mb[1] = loop_id & 0xFF;
++#else
++      mcp->mb[1] = loop_id << 8 | opt;
++#endif
++      mcp->out_mb = MBX_1|MBX_0;
++#if defined(EXTENDED_IDS)
++      mcp->mb[10] = opt;
++      mcp->out_mb |= MBX_10;
++#endif
++      mcp->in_mb = MBX_7|MBX_6|MBX_3|MBX_2|MBX_1|MBX_0;
++      mcp->tov = 30;
++      mcp->flags = 0;
++      rval = (int)qla2x00_mailbox_command(ha, mcp);
++
++      if (rval != QL_STATUS_SUCCESS) {
++              /*EMPTY*/
++              DEBUG2_3_11(printk("qla2x00_get_port_name(%ld): failed=%x.\n",
++                  ha->host_no, rval);)
++      } else {
++              if (name != NULL) {
++                      /* This function returns name in big endian. */
++                      name[0] = LSB(mcp->mb[2]);
++                      name[1] = MSB(mcp->mb[2]);
++                      name[2] = LSB(mcp->mb[3]);
++                      name[3] = MSB(mcp->mb[3]);
++                      name[4] = LSB(mcp->mb[6]);
++                      name[5] = MSB(mcp->mb[6]);
++                      name[6] = LSB(mcp->mb[7]);
++                      name[7] = MSB(mcp->mb[7]);
++              }
++
++              DEBUG11(printk("qla2x00_get_port_name(%ld): done.\n",
++                  ha->host_no);)
++      }
++
++      return rval;
++}
++
++/*
++ * qla2x00_get_link_status
++ *
++ * Input:
++ *    ha = adapter block pointer.
++ *    loop_id = device loop ID.
++ *    ret_buf = pointer to link status return buffer.
++ *
++ * Returns:
++ *    0 = success.
++ *    BIT_0 = mem alloc error.
++ *    BIT_1 = mailbox error.
++ */
++uint8_t
++qla2x00_get_link_status(scsi_qla_host_t *ha, uint8_t loop_id, void *ret_buf,
++    uint16_t *status)
++{
++      int rval;
++      mbx_cmd_t mc;
++      mbx_cmd_t *mcp = &mc;
++      link_stat_t *stat_buf;
++      dma_addr_t phys_address = 0;
++
++
++      DEBUG11(printk("qla2x00_get_link_status(%ld): entered.\n",
++          ha->host_no);)
++
++      stat_buf = pci_alloc_consistent(ha->pdev, sizeof(link_stat_t),
++          &phys_address);
++      if (stat_buf == NULL) {
++              DEBUG2_3_11(printk("qla2x00_get_link_status(%ld): Failed to "
++                  "allocate memory.\n", ha->host_no));
++              return BIT_0;
++      }
++
++      memset(stat_buf, 0, sizeof(link_stat_t));
++
++      mcp->mb[0] = MBC_GET_LINK_STATUS;
++#if defined(EXTENDED_IDS)
++      mcp->mb[1] = loop_id & 0xFF;
++#else
++      mcp->mb[1] = loop_id << 8;
++#endif
++      mcp->mb[2] = MSW(phys_address);
++      mcp->mb[3] = LSW(phys_address);
++      mcp->mb[6] = MSW(MSD(phys_address));
++      mcp->mb[7] = LSW(MSD(phys_address));
++      mcp->out_mb = MBX_7|MBX_6|MBX_3|MBX_2|MBX_1|MBX_0;
++#if defined(EXTENDED_IDS)
++      mcp->mb[10] = 0;
++      mcp->out_mb |= MBX_10;
++#endif
++      mcp->in_mb = MBX_0;
++      mcp->tov = 30;
++      mcp->flags = IOCTL_CMD;
++      rval = (int)qla2x00_mailbox_command(ha, mcp);
++
++      if (rval == QL_STATUS_SUCCESS) {
++
++              if (mcp->mb[0] != MBS_COMMAND_COMPLETE) {
++                      DEBUG2_3_11(printk("qla2x00_get_link_status(%ld): cmd "
++                          "failed. mbx0=%x.\n", ha->host_no, mcp->mb[0]);)
++                      status[0] = mcp->mb[0];
++                      rval = BIT_1;
++              } else {
++                      /* copy over data */
++                      memcpy(ret_buf, stat_buf,sizeof(link_stat_t));
++                      DEBUG(printk("qla2x00_get_link_status(%ld): stat dump: "
++                          "fail_cnt=%d loss_sync=%d loss_sig=%d seq_err=%d "
++                          "inval_xmt_word=%d inval_crc=%d.\n",
++                          ha->host_no,
++                          stat_buf->link_fail_cnt, stat_buf->loss_sync_cnt,
++                          stat_buf->loss_sig_cnt, stat_buf->prim_seq_err_cnt,
++                          stat_buf->inval_xmit_word_cnt,
++                          stat_buf->inval_crc_cnt);)
++                      DEBUG11(printk("qla2x00_get_link_status(%ld): stat "
++                          "dump: fail_cnt=%d loss_sync=%d loss_sig=%d "
++                          "seq_err=%d inval_xmt_word=%d inval_crc=%d.\n",
++                          ha->host_no,
++                          stat_buf->link_fail_cnt, stat_buf->loss_sync_cnt,
++                          stat_buf->loss_sig_cnt, stat_buf->prim_seq_err_cnt,
++                          stat_buf->inval_xmit_word_cnt,
++                          stat_buf->inval_crc_cnt);)
++              }
++      } else {
++              /* Failed. */
++              DEBUG2_3_11(printk("qla2x00_get_link_status(%ld): failed=%x.\n",
++                  ha->host_no, rval);)
++              rval = BIT_1;
++      }
++
++      pci_free_consistent(ha->pdev, sizeof(link_stat_t),
++          stat_buf, phys_address);
++
++      return rval;
++}
++
++/*
++ * qla2x00_lip_reset
++ *    Issue LIP reset mailbox command.
++ *
++ * Input:
++ *    ha = adapter block pointer.
++ *    TARGET_QUEUE_LOCK must be released.
++ *    ADAPTER_STATE_LOCK must be released.
++ *
++ * Returns:
++ *    qla2x00 local function return status code.
++ *
++ * Context:
++ *    Kernel context.
++ */
++int
++qla2x00_lip_reset(scsi_qla_host_t *ha)
++{
++      int rval;
++      mbx_cmd_t mc;
++      mbx_cmd_t *mcp = &mc;
++
++      DEBUG11(printk("qla2x00_lip_reset(%ld): entered.\n",
++          ha->host_no);)
++
++      mcp->mb[0] = MBC_LIP_RESET;
++#if defined(EXTENDED_IDS)
++      mcp->mb[1] = 0x00ff;
++#else
++      mcp->mb[1] = 0xff00;
++#endif
++      mcp->mb[2] = ha->loop_reset_delay;
++      mcp->mb[3] = 0;
++      mcp->out_mb = MBX_3|MBX_2|MBX_1|MBX_0;
++#if defined(EXTENDED_IDS)
++      mcp->mb[10] = 0;
++      mcp->out_mb |= MBX_10;
++#endif
++      mcp->in_mb = MBX_0;
++      mcp->tov = 30;
++      mcp->flags = 0;
++      rval = (int)qla2x00_mailbox_command(ha, mcp);
++
++      if (rval != QL_STATUS_SUCCESS) {
++              /*EMPTY*/
++              DEBUG2_3_11(printk("qla2x00_lip_reset(%ld): failed=%x.\n",
++                  ha->host_no, rval);)
++      } else {
++              /*EMPTY*/
++              DEBUG11(printk("qla2x00_lip_reset(%ld): done.\n",
++                  ha->host_no);)
++      }
++
++      return rval;
++}
++
++/*
++ * qla2x00_send_sns
++ *    Send SNS command.
++ *
++ * Input:
++ *    ha = adapter block pointer.
++ *    sns = pointer for command.
++ *    cmd_size = command size.
++ *    buf_size = response/command size.
++ *    TARGET_QUEUE_LOCK must be released.
++ *    ADAPTER_STATE_LOCK must be released.
++ *
++ * Returns:
++ *    qla2x00 local function return status code.
++ *
++ * Context:
++ *    Kernel context.
++ */
++int
++qla2x00_send_sns(scsi_qla_host_t *ha, dma_addr_t sns_phys_address,
++    uint16_t cmd_size, size_t buf_size)
++{
++      int rval;
++      mbx_cmd_t mc;
++      mbx_cmd_t *mcp = &mc;
++
++      DEBUG11(printk("qla2x00_send_sns(%ld): entered.\n",
++          ha->host_no);)
++
++      mcp->mb[0] = MBC_SEND_SNS_COMMAND;
++      mcp->mb[1] = cmd_size;
++      mcp->mb[2] = MSW(sns_phys_address);
++      mcp->mb[3] = LSW(sns_phys_address);
++      mcp->mb[6] = MSW(MSD(sns_phys_address));
++      mcp->mb[7] = LSW(MSD(sns_phys_address));
++      mcp->out_mb = MBX_7|MBX_6|MBX_3|MBX_2|MBX_1|MBX_0;
++      mcp->in_mb = MBX_0|MBX_1;
++      mcp->buf_size = buf_size;
++      mcp->flags = MBX_DMA_OUT|MBX_DMA_IN;
++      /*mcp->tov = ha->retry_count * ha->login_timeout * 2;*/
++      mcp->tov =  ha->login_timeout * 2;
++
++      DEBUG11(printk("qla2x00_send_sns: retry cnt=%d ratov=%d total "
++          "tov=%d.\n", ha->retry_count, ha->login_timeout, mcp->tov);)
++
++      rval = (int)qla2x00_mailbox_command(ha, mcp);
++
++      if (rval != QL_STATUS_SUCCESS) {
++              /*EMPTY*/
++              DEBUG(printk("qla2x00_send_sns(%ld): failed=%x mb[0]=%x "
++                  "mb[1]=%x.\n",
++                  ha->host_no, rval, mcp->mb[0], mcp->mb[1]);)
++              DEBUG2_3_11(printk("qla2x00_send_sns(%ld): failed=%x mb[0]=%x "
++                  "mb[1]=%x.\n",
++                  ha->host_no, rval, mcp->mb[0], mcp->mb[1]);)
++      } else {
++              /*EMPTY*/
++              DEBUG11(printk("qla2x00_send_sns(%ld): done.\n",
++                  ha->host_no);)
++      }
++
++      return rval;
++}
++
++/*
++ * qla2x00_login_fabric
++ *    Issue login fabric port mailbox command.
++ *
++ * Input:
++ *    ha = adapter block pointer.
++ *    loop_id = device loop ID.
++ *    domain = device domain.
++ *    area = device area.
++ *    al_pa = device AL_PA.
++ *    status = pointer for return status.
++ *    opt = command options.
++ *    TARGET_QUEUE_LOCK must be released.
++ *    ADAPTER_STATE_LOCK must be released.
++ *
++ * Returns:
++ *    qla2x00 local function return status code.
++ *
++ * Context:
++ *    Kernel context.
++ */
++int
++qla2x00_login_fabric(scsi_qla_host_t *ha, uint16_t loop_id, uint8_t domain,
++    uint8_t area, uint8_t al_pa, uint16_t *status, uint8_t opt)
++{
++      int rval;
++      mbx_cmd_t mc;
++      mbx_cmd_t *mcp = &mc;
++
++      DEBUG11(printk("qla2x00_login_fabric(%ld): entered.\n",
++          ha->host_no);)
++
++      mcp->mb[0] = MBC_LOGIN_FABRIC_PORT;
++#if defined(EXTENDED_IDS)
++      mcp->mb[1] = loop_id & 0xFF;
++#else
++      mcp->mb[1] = (loop_id << 8) | opt;
++#endif
++      mcp->mb[2] = domain;
++      mcp->mb[3] = area << 8 | al_pa;
++      mcp->out_mb = MBX_3|MBX_2|MBX_1|MBX_0;
++#if defined(EXTENDED_IDS)
++      mcp->mb[10] = opt;
++      mcp->out_mb |= MBX_10;
++#endif
++      mcp->in_mb = MBX_2|MBX_1|MBX_0;
++      /*mcp->tov = ha->retry_count * ha->login_timeout * 2;*/
++      mcp->tov = ha->login_timeout * 2;
++      mcp->flags = 0;
++      rval = (int)qla2x00_mailbox_command(ha, mcp);
++
++      /* Return mailbox statuses. */
++      if (status != NULL) {
++              *status++ = mcp->mb[0];
++              *status++ = mcp->mb[1];
++              *status = mcp->mb[2];
++      }
++
++      if (rval != QL_STATUS_SUCCESS) {
++              /* RLU tmp code: need to change main mailbox_command function to
++               * return ok even when the mailbox completion value is not
++               * SUCCESS. The caller needs to be responsible to interpret
++               * the return values of this mailbox command if we're not
++               * to change too much of the existing code.
++               */
++              if (mcp->mb[0] == 0x4001 || mcp->mb[0] == 0x4002 ||
++                  mcp->mb[0] == 0x4003 || mcp->mb[0] == 0x4005 ||
++                  mcp->mb[0] == 0x4006)
++                      rval = QL_STATUS_SUCCESS;
++
++              /*EMPTY*/
++              DEBUG2_3_11(printk("qla2x00_login_fabric(%ld): failed=%x "
++                  "mb[1]=%x mb[2]=%x.\n",
++                  ha->host_no, rval, mcp->mb[1], mcp->mb[2]);)
++      } else {
++              /*EMPTY*/
++              DEBUG11(printk("qla2x00_login_fabric(%ld): done.\n",
++                  ha->host_no);)
++      }
++
++      return rval;
++}
++
++/*
++ * qla2x00_login_local_device
++ *           Issue login loop port mailbox command.
++ *    
++ * Input:
++ *           ha = adapter block pointer.
++ *           loop_id = device loop ID.
++ *           opt = command options.
++ *          
++ * Returns:
++ *            Return status code.
++ *             
++ * Context:
++ *            Kernel context.
++ *             
++ */
++int
++qla2x00_login_local_device(scsi_qla_host_t *ha,
++              uint16_t loop_id, uint16_t *mb_ret, uint8_t opt)
++{
++      int rval;
++      mbx_cmd_t mc;
++      mbx_cmd_t *mcp = &mc;
++
++      DEBUG3(printk("%s(%ld): entered.\n", __func__, ha->host_no);)
++
++      mcp->mb[0] = MBC_LOGIN_LOOP_PORT;
++#if defined(EXTENDED_IDS)
++      mcp->mb[1] = loop_id & 0xFF;
++#else
++      mcp->mb[1] = (loop_id << 8);
++#endif
++      mcp->mb[2] = opt;
++      mcp->out_mb = MBX_2|MBX_1|MBX_0;
++      mcp->in_mb = MBX_7|MBX_6|MBX_1|MBX_0;
++      mcp->tov =  ha->login_timeout * 2;
++      mcp->flags = 0;
++      rval = (int)qla2x00_mailbox_command(ha, mcp);
++
++      /* Return mailbox statuses. */
++      if (mb_ret != NULL) {
++              mb_ret[0] = mcp->mb[0];
++              mb_ret[1] = mcp->mb[1];
++              mb_ret[6] = mcp->mb[6];
++              mb_ret[7] = mcp->mb[7];
++      }
++
++      if (rval != QL_STATUS_SUCCESS) {
++              /* AV tmp code: need to change main mailbox_command function to
++               * return ok even when the mailbox completion value is not
++               * SUCCESS. The caller needs to be responsible to interpret
++               * the return values of this mailbox command if we're not
++               * to change too much of the existing code.
++               */
++              if (mcp->mb[0] == 0x4005 || mcp->mb[0] == 0x4006)
++                      rval = QL_STATUS_SUCCESS;
++
++              DEBUG(printk("%s(%ld): failed=%x mb[0]=%x mb[1]=%x "
++                  "mb[6]=%x mb[7]=%x.\n",
++                  __func__, ha->host_no, rval, mcp->mb[0], mcp->mb[1],
++                  mcp->mb[6], mcp->mb[7]);)
++              DEBUG2_3(printk("%s(%ld): failed=%x mb[0]=%x mb[1]=%x "
++                  "mb[6]=%x mb[7]=%x.\n",
++                  __func__, ha->host_no, rval, mcp->mb[0], mcp->mb[1],
++                  mcp->mb[6], mcp->mb[7]);)
++      } else {
++              /*EMPTY*/
++              DEBUG3(printk("%s(%ld): done.\n", __func__, ha->host_no);)
++      }
++
++      return (rval);
++}
++
++/*
++ * qla2x00_fabric_logout
++ *    Issue logout fabric port mailbox command.
++ *
++ * Input:
++ *    ha = adapter block pointer.
++ *    loop_id = device loop ID.
++ *    TARGET_QUEUE_LOCK must be released.
++ *    ADAPTER_STATE_LOCK must be released.
++ *
++ * Returns:
++ *    qla2x00 local function return status code.
++ *
++ * Context:
++ *    Kernel context.
++ */
++int
++qla2x00_fabric_logout(scsi_qla_host_t *ha, uint16_t loop_id)
++{
++      int rval;
++      mbx_cmd_t mc;
++      mbx_cmd_t *mcp = &mc;
++
++      DEBUG11(printk("qla2x00_fabric_logout(%ld): entered.\n",
++          ha->host_no);)
++
++      mcp->mb[0] = MBC_LOGOUT_FABRIC_PORT;
++#if defined(EXTENDED_IDS)
++      mcp->mb[1] = loop_id & 0xFF;
++#else
++      mcp->mb[1] = loop_id << 8;
++#endif
++      mcp->out_mb = MBX_1|MBX_0;
++#if defined(EXTENDED_IDS)
++      mcp->mb[10] = 0;
++      mcp->out_mb |= MBX_10;
++#endif
++      mcp->in_mb = MBX_1|MBX_0;
++      mcp->tov = 30;
++      mcp->flags = 0;
++      rval = (int)qla2x00_mailbox_command(ha, mcp);
++
++      if (rval != QL_STATUS_SUCCESS) {
++              /*EMPTY*/
++              DEBUG2_3_11(printk("qla2x00_fabric_logout(%ld): failed=%x "
++                  "mbx1=%x.\n",
++                  ha->host_no, rval, mcp->mb[1]);)
++      } else {
++              /*EMPTY*/
++              DEBUG11(printk("qla2x00_fabric_logout(%ld): done.\n",
++                  ha->host_no);)
++      }
++
++      return rval;
++}
++
++/*
++ * qla2x00_full_login_lip
++ *    Issue full login LIP mailbox command.
++ *
++ * Input:
++ *    ha = adapter block pointer.
++ *    TARGET_QUEUE_LOCK must be released.
++ *    ADAPTER_STATE_LOCK must be released.
++ *
++ * Returns:
++ *    qla2x00 local function return status code.
++ *
++ * Context:
++ *    Kernel context.
++ */
++int
++qla2x00_full_login_lip(scsi_qla_host_t *ha)
++{
++      int rval;
++      mbx_cmd_t mc;
++      mbx_cmd_t *mcp = &mc;
++
++      DEBUG11(printk("qla2x00_full_login_lip(%ld): entered.\n",
++          ha->host_no);)
++
++      mcp->mb[0] = MBC_LIP_FULL_LOGIN;
++      mcp->mb[1] = 0;
++      mcp->mb[2] = 0;
++      mcp->mb[3] = 0;
++      mcp->out_mb = MBX_3|MBX_2|MBX_1|MBX_0;
++      mcp->in_mb = MBX_0;
++      mcp->tov = 30;
++      mcp->flags = 0;
++      rval = (int)qla2x00_mailbox_command(ha, mcp);
++
++      if (rval != QL_STATUS_SUCCESS) {
++              /*EMPTY*/
++              DEBUG2_3_11(printk("qla2x00_full_login_lip(%ld): failed=%x.\n",
++                  ha->instance, rval);)
++      } else {
++              /*EMPTY*/
++              DEBUG11(printk("qla2x00_full_login_lip(%ld): done.\n",
++                  ha->host_no);)
++      }
++
++      return rval;
++}
++
++/*
++ * qla2x00_get_port_list
++ *
++ * Input:
++ *    ha = adapter block pointer.
++ *    TARGET_QUEUE_LOCK must be released.
++ *    ADAPTER_STATE_LOCK must be released.
++ *
++ * Returns:
++ *    qla2x00 local function return status code.
++ *
++ * Context:
++ *    Kernel context.
++ */
++int
++qla2x00_get_port_list(scsi_qla_host_t *ha, port_list_entry_t *gp_list,
++    dma_addr_t gpl_phys_address, uint16_t opt, uint16_t *size)
++{
++      int rval;
++      mbx_cmd_t mc;
++      mbx_cmd_t *mcp = &mc;
++
++      DEBUG11(printk("qla2x00_get_port_list(%ld): entered.\n",
++          ha->host_no);)
++
++      if( gp_list == NULL ) {
++              return QL_STATUS_ERROR;
++      }
++
++      mcp->mb[0] = MBC_GET_PORT_LIST;
++      mcp->mb[1] = opt;
++      mcp->mb[2] = MSW(gpl_phys_address);
++      mcp->mb[3] = LSW(gpl_phys_address);
++      mcp->mb[6] = MSW(MSD(gpl_phys_address));
++      mcp->mb[7] = LSW(MSD(gpl_phys_address));
++
++      mcp->out_mb = MBX_7|MBX_6|MBX_3|MBX_2|MBX_1|MBX_0;
++      mcp->in_mb = MBX_1|MBX_0;
++      mcp->tov = 30;
++      mcp->flags = 0;
++      rval = (int)qla2x00_mailbox_command(ha, mcp);
++
++      if (rval != QL_STATUS_SUCCESS) {
++              /*EMPTY*/
++              DEBUG2_3_11(printk("qla2x00_get_port_list(%ld): failed=%x.\n",
++                  ha->host_no, rval);)
++      } else {
++              *size = mcp->mb[1];
++              DEBUG11(printk("qla2x00_get_port_list(%ld): done.\n",
++                  ha->host_no);)
++      }
++
++      return rval;
++}
++
++#if 0 /* not yet needed */
++int
++qla2x00_dump_ram(scsi_qla_host_t *ha, uint32_t risc_address,
++    dma_addr_t ispdump_dma, uint32_t size)
++{
++      int rval;
++      mbx_cmd_t mc;
++      mbx_cmd_t *mcp = &mc;
++
++      mcp->mb[0] = MBC_DUMP_RAM;
++      mcp->mb[1] = risc_address & 0xffff;
++      mcp->mb[2] = MSW(ispdump_dma);
++      mcp->mb[3] = LSW(ispdump_dma);
++      mcp->mb[4] = 0;
++      mcp->mb[6] = MSW(MSD(ispdump_dma));
++      mcp->mb[7] = LSW(MSD(ispdump_dma));
++
++      mcp->out_mb = MBX_7|MBX_6|MBX_4|MBX_3|MBX_2|MBX_1|MBX_0;
++      mcp->in_mb = MBX_0;
++      mcp->tov = 30;
++      mcp->flags = 0;
++      rval = qla2x00_mailbox_command(ha, mcp);
++
++      return rval;
++}
++#endif
++
++/*
++ * qla2x00_lun_reset
++ *    Issue lun reset mailbox command.
++ *
++ * Input:
++ *    ha = adapter block pointer.
++ *    loop_id = device loop ID.
++ *      lun = lun to be reset.
++ *    TARGET_QUEUE_LOCK must be released.
++ *    ADAPTER_STATE_LOCK must be released.
++ *
++ * Returns:
++ *    qla2x00 local function return status code.
++ *
++ * Context:
++ *    Kernel context.
++ */
++int
++qla2x00_lun_reset(scsi_qla_host_t *ha, uint16_t loop_id, uint16_t lun)
++{
++      int             rval;
++      mbx_cmd_t       mc;
++      mbx_cmd_t       *mcp = &mc;
++
++      ENTER("qla2x00_lun_reset");
++
++      mcp->mb[0] = MBC_LUN_RESET;
++#if defined(EXTENDED_IDS)
++      mcp->mb[1] = loop_id & 0xFF;
++#else
++      mcp->mb[1] = loop_id << 8;
++#endif
++      mcp->mb[2] = lun;
++      mcp->out_mb = MBX_2|MBX_1|MBX_0;
++      mcp->in_mb = MBX_0;
++      mcp->tov = 30;
++      mcp->flags = 0;
++      rval = qla2x00_mailbox_command(ha, mcp);
++
++      if (rval != QLA2X00_SUCCESS) {
++              /*EMPTY*/
++              printk(KERN_WARNING "qla2x00_lun_reset(%d): failed = %d",
++                  (int)ha->instance, rval);
++      } else {
++              /*EMPTY*/
++              LEAVE("qla2x00_lun_reset: exiting normally");
++      }
++
++      return rval;
++}
++
++/*
++ * qla2x00_send_rnid_mbx
++ *    Issue RNID ELS using mailbox command
++ *
++ * Input:
++ *    ha = adapter state pointer.
++ *    loop_id = loop ID of the target device.
++ *    data_fmt = currently supports only 0xDF.
++ *    buffer = buffer pointer.
++ *    buf_size = size of buffer.
++ *    mb_reg = pointer to return mailbox registers.
++ *
++ * Returns:
++ *    qla2x00 local function return status code.
++ *
++ * Context:
++ *    Kernel context.
++ */
++int
++qla2x00_send_rnid_mbx(scsi_qla_host_t *ha, uint16_t loop_id, uint8_t data_fmt,
++    dma_addr_t buf_phys_addr, size_t buf_size, uint16_t *mb_reg)
++{
++      int             rval;
++      mbx_cmd_t       mc;
++      mbx_cmd_t       *mcp = &mc;
++
++      DEBUG11(printk("qla2x00_send_rnid_mbx(%ld): entered.\n",
++          ha->host_no);)
++
++      mcp->mb[0] = MBC_SEND_RNID_ELS;
++#if defined(EXTENDED_IDS)
++      mcp->mb[1] = loop_id & 0xFF;
++#else
++      mcp->mb[1] = (loop_id << 8 ) | data_fmt;
++#endif
++      mcp->mb[2] = MSW(buf_phys_addr);
++      mcp->mb[3] = LSW(buf_phys_addr);
++      mcp->mb[6] = MSW(MSD(buf_phys_addr));
++      mcp->mb[7] = LSW(MSD(buf_phys_addr));
++      mcp->out_mb = MBX_7|MBX_6|MBX_3|MBX_2|MBX_1|MBX_0;
++#if defined(EXTENDED_IDS)
++      mcp->mb[10] = data_fmt;
++      mcp->out_mb |= MBX_10;
++#endif
++      mcp->in_mb = MBX_1|MBX_0;
++      mcp->buf_size = buf_size;
++      mcp->flags = MBX_DMA_IN;
++      mcp->tov = 30;
++      rval = (int)qla2x00_mailbox_command(ha, mcp);
++
++      if (rval != QL_STATUS_SUCCESS) {
++              memcpy(mb_reg, mcp->mb, 2 * 2); /* 2 status regs */
++
++              DEBUG2_3_11(printk("qla2x00_send_rnid_mbx(%ld): failed=%x "
++                  "mb[1]=%x.\n",
++                  ha->host_no, mcp->mb[0], mcp->mb[1]);)
++      } else {
++              /*EMPTY*/
++              DEBUG11(printk("qla2x00_send_rnid_mbx(%ld): done.\n",
++                   ha->host_no);)
++      }
++
++      return (rval);
++}
++
++/*
++ * qla2x00_set_rnid_params_mbx
++ *    Set RNID parameters using mailbox command
++ *
++ * Input:
++ *    ha = adapter state pointer.
++ *    buffer = buffer pointer.
++ *    buf_size = size of buffer.
++ *    mb_reg = pointer to return mailbox registers.
++ *
++ * Returns:
++ *    qla2x00 local function return status code.
++ *
++ * Context:
++ *    Kernel context.
++ */
++int
++qla2x00_set_rnid_params_mbx(scsi_qla_host_t *ha, dma_addr_t buf_phys_addr,
++    size_t buf_size, uint16_t *mb_reg)
++{
++      int             rval;
++      mbx_cmd_t       mc;
++      mbx_cmd_t       *mcp = &mc;
++
++      DEBUG11(printk("qla2x00_set_rnid_params_mbx(%ld): entered.\n",
++          ha->host_no);)
++
++      mcp->mb[0] = MBC_SET_RNID_PARAMS;
++      mcp->mb[1] = 0;
++      mcp->mb[2] = MSW(buf_phys_addr);
++      mcp->mb[3] = LSW(buf_phys_addr);
++      mcp->mb[6] = MSW(MSD(buf_phys_addr));
++      mcp->mb[7] = LSW(MSD(buf_phys_addr));
++      mcp->out_mb = MBX_7|MBX_6|MBX_3|MBX_2|MBX_1|MBX_0;
++      mcp->in_mb = MBX_1|MBX_0;
++      mcp->buf_size = buf_size;
++      mcp->flags = MBX_DMA_OUT;
++      mcp->tov = 30;
++      rval = (int)qla2x00_mailbox_command(ha, mcp);
++
++      if (rval != QLA2X00_SUCCESS) {
++              memcpy(mb_reg, mcp->mb, 2 * 2); /* 2 status regs */
++
++              DEBUG2_3_11(printk("qla2x00_set_rnid_params_mbx(%ld): "
++                  "failed=%x mb[1]=%x.\n",
++                  ha->host_no, mcp->mb[0], mcp->mb[1]);)
++      } else {
++              /*EMPTY*/
++              DEBUG11(printk("qla2x00_set_rnid_params_mbx(%ld): done.\n",
++                  ha->host_no);)
++      }
++
++      return (rval);
++}
++
++/*
++ * qla2x00_get_rnid_params_mbx
++ *    Get RNID parameters using mailbox command
++ *
++ * Input:
++ *    ha = adapter state pointer.
++ *    buffer = buffer pointer.
++ *    buf_size = size of buffer.
++ *    mb_reg = pointer to return mailbox registers.
++ *
++ * Returns:
++ *    qla2x00 local function return status code.
++ *
++ * Context:
++ *    Kernel context.
++ */
++int
++qla2x00_get_rnid_params_mbx(scsi_qla_host_t *ha, dma_addr_t buf_phys_addr,
++    size_t buf_size, uint16_t *mb_reg)
++{
++      int             rval;
++      mbx_cmd_t       mc;
++      mbx_cmd_t       *mcp = &mc;
++
++      DEBUG11(printk("qla2x00_get_rnid_params_mbx(%ld): entered.\n",
++          ha->host_no);)
++
++      mcp->mb[0] = MBC_GET_RNID_PARAMS;
++      mcp->mb[1] = 0;
++      mcp->mb[2] = MSW(buf_phys_addr);
++      mcp->mb[3] = LSW(buf_phys_addr);
++      mcp->mb[6] = MSW(MSD(buf_phys_addr));
++      mcp->mb[7] = LSW(MSD(buf_phys_addr));
++      mcp->out_mb = MBX_7|MBX_6|MBX_3|MBX_2|MBX_1|MBX_0;
++      mcp->in_mb = MBX_1|MBX_0;
++      mcp->buf_size = buf_size;
++      mcp->flags = MBX_DMA_IN;
++      mcp->tov = 30;
++      rval = (int)qla2x00_mailbox_command(ha, mcp);
++
++      if (rval != QLA2X00_SUCCESS) {
++              memcpy(mb_reg, mcp->mb, 2 * 2); /* 2 status regs */
++
++              DEBUG2_3_11(printk("qla2x00_get_rnid_params_mbx(%ld): "
++                  "failed=%x mb[1]=%x.\n",
++                  ha->host_no, mcp->mb[0], mcp->mb[1]);)
++      } else {
++              /*EMPTY*/
++              DEBUG11(printk("qla2x00_get_rnid_params_mbx(%ld): done.\n",
++                  ha->host_no);)
++      }
++
++      return (rval);
++}
++
++#if defined(QL_DEBUG_LEVEL_3)
++/*
++ * qla2x00_get_fcal_position_map
++ *    Get FCAL (LILP) position map using mailbox command
++ *
++ * Input:
++ *    ha = adapter state pointer.
++ *    pos_map = buffer pointer (can be NULL).
++ *
++ * Returns:
++ *    qla2x00 local function return status code.
++ *
++ * Context:
++ *    Kernel context.
++ */
++int
++qla2x00_get_fcal_position_map(scsi_qla_host_t *ha, char *pos_map)
++{
++      int rval;
++      mbx_cmd_t mc;
++      mbx_cmd_t *mcp = &mc;
++      char *pmap;
++      dma_addr_t pmap_dma;
++
++      pmap = pci_alloc_consistent(ha->pdev, FCAL_MAP_SIZE, &pmap_dma);
++      if (pmap  == NULL) {
++              DEBUG2_3_11(printk("%s(%ld): **** Mem Alloc Failed ****",
++                  __func__, ha->host_no));
++              return QL_STATUS_RESOURCE_ERROR;
++      }
++
++      memset(pmap, 0, FCAL_MAP_SIZE);
++
++      mcp->mb[0] = MBC_GET_FCAL_MAP;
++      mcp->mb[2] = MSW(pmap_dma);
++      mcp->mb[3] = LSW(pmap_dma);
++      mcp->mb[6] = MSW(MSD(pmap_dma));
++      mcp->mb[7] = LSW(MSD(pmap_dma));
++      mcp->out_mb = MBX_7|MBX_6|MBX_3|MBX_2|MBX_0;
++      mcp->in_mb = MBX_1|MBX_0;
++      mcp->buf_size = FCAL_MAP_SIZE;
++      mcp->flags = MBX_DMA_IN;
++      mcp->tov =  ha->login_timeout * 2;
++      rval = (int)qla2x00_mailbox_command(ha, mcp);
++
++      if (rval == QL_STATUS_SUCCESS) {
++              DEBUG11(printk("%s(%ld): (mb0=%x/mb1=%x) FC/AL Position Map "
++                  "size (%x)\n",
++                  __func__, ha->host_no,
++                  mcp->mb[0], mcp->mb[1], (unsigned)pmap[0]));
++              DEBUG11(qla2x00_dump_buffer(pmap, pmap[0] + 1));
++
++              if (pos_map)
++                      memcpy(pos_map, pmap, FCAL_MAP_SIZE);
++      }
++      pci_free_consistent(ha->pdev, FCAL_MAP_SIZE, pmap, pmap_dma);
++
++      if (rval != QL_STATUS_SUCCESS) {
++              DEBUG2_3_11(printk("%s(%ld): failed=%x.\n",
++                  __func__, ha->host_no, rval));
++      } else {
++              DEBUG11(printk("%s(%ld): done.\n",
++                  __func__, ha->host_no));
++      }
++
++      return rval;
++}
++#endif
+--- /dev/null  Thu Apr 11 07:25:15 2002
++++ linux-2.5.73-n9560/drivers/scsi/qla2xxx/qla_os.c   Thu Jul  3 15:34:42 2003
+@@ -0,0 +1,5879 @@
++/*
++ *                  QLOGIC LINUX SOFTWARE
++ *
++ * QLogic ISP2x00 device driver for Linux 2.5.x
++ * Copyright (C) 2003 Qlogic Corporation
++ * (www.qlogic.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, 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.
++ *
++ */
++#define QLA_MODVERSION
++#include "qla_os.h"
++
++#include "qla_def.h"
++
++/*
++ * Driver version
++ */
++char qla2x00_version_str[40] = { 0 };
++
++/*
++* Command line options.
++*/
++unsigned long qla2x00_verbose = 1L;
++unsigned long qla2x00_quiet   = 0L;
++unsigned long qla2x00_reinit = 1L;
++unsigned long qla2x00_req_dmp = 0L;
++
++/*
++ * Stats for all adpaters.
++ */
++struct _qla2x00stats qla2x00_stats;
++
++/*
++ * Ioctl related information.
++ */
++int num_hosts = 0;       
++int apiHBAInstance = 0;
++
++/*
++ * Module parameter information and variables
++ */
++
++char *ql2xdevconf = NULL;
++#if MPIO_SUPPORT
++int ql2xretrycount = 30;
++#else
++int ql2xretrycount = 20;
++#endif
++int qla2xenbinq = 1;
++int max_srbs = MAX_SRBS;
++#if defined(ISP2200) || defined(ISP2300)
++int ql2xlogintimeout = 20;
++int qlport_down_retry = 0;
++#endif
++int ql2xmaxqdepth = 0;
++int displayConfig = 0;
++
++/* Enable for failover */
++#if MPIO_SUPPORT
++int ql2xfailover = 1;
++#else
++int ql2xfailover = 0;
++#endif
++
++int ConfigRequired = 0;
++int recoveryTime = MAX_RECOVERYTIME;
++int failbackTime = MAX_FAILBACKTIME;
++
++/* Persistent binding type */
++int Bind = BIND_BY_PORT_NAME;
++
++int ql2xsuspendcount = SUSPEND_COUNT;
++
++int qla2x00_retryq_dmp = 0;
++
++#if defined(MODULE)
++char *ql2xopts = NULL;
++
++static char dummy_buffer[60] =
++              "Please don't add commas in your insmod command!!\n";
++
++/* insmod qla2100 ql2xopts=verbose" */
++MODULE_PARM(ql2xopts, "s");
++MODULE_PARM_DESC(ql2xopts,
++              "Additional driver options.");
++
++MODULE_PARM(ql2xfailover, "i");
++MODULE_PARM_DESC(ql2xfailover,
++              "Driver failover support: 0 to disable; 1 to enable. "
++              "Default behaviour based on compile-time option "
++              "MPIO_SUPPORT.");
++
++MODULE_PARM(ql2xmaxqdepth, "i");
++MODULE_PARM_DESC(ql2xmaxqdepth,
++              "Maximum queue depth to report for target devices.");
++
++#if defined(ISP2200) || defined(ISP2300)
++MODULE_PARM(ql2xlogintimeout,"i");
++MODULE_PARM_DESC(ql2xlogintimeout,
++              "Login timeout value in seconds.");
++
++MODULE_PARM(qlport_down_retry,"i");
++MODULE_PARM_DESC(qlport_down_retry,
++              "Maximum number of command retries to a port that returns"
++              "a PORT-DOWN status.");
++#endif
++
++MODULE_PARM(ql2xretrycount,"i");
++MODULE_PARM_DESC(ql2xretrycount,
++              "Maximum number of mid-layer retries allowed for a command.  "
++              "Default value in non-failover mode is 20, "
++              "in failover mode, 30.");
++
++MODULE_PARM(max_srbs,"i");
++MODULE_PARM_DESC(max_srbs,
++              "Maximum number of simultaneous commands allowed for an HBA.");
++
++MODULE_PARM(displayConfig, "i");
++MODULE_PARM_DESC(displayConfig,
++              "If 1 then display the configuration used in "
++              "/etc/modules.conf.");
++
++MODULE_PARM(ConfigRequired, "i");
++MODULE_PARM_DESC(ConfigRequired,
++              "If 1, then only configured devices passed in through the"
++              "ql2xopts parameter will be presented to the OS");
++
++MODULE_PARM(recoveryTime, "i");
++MODULE_PARM_DESC(recoveryTime,
++              "Recovery time in seconds before a target device is sent I/O "
++              "after a failback is performed.");
++
++MODULE_PARM(failbackTime, "i");
++MODULE_PARM_DESC(failbackTime,
++              "Delay in seconds before a failback is performed.");
++
++MODULE_PARM(Bind, "i");
++MODULE_PARM_DESC(Bind,
++              "Target persistent binding method: "
++              "0 by Portname (default); 1 by PortID; 2 by Nodename. ");
++
++MODULE_PARM(ql2xsuspendcount,"i");
++MODULE_PARM_DESC(ql2xsuspendcount,
++              "Number of 6-second suspend iterations to perform while a "
++              "target returns a <NOT READY> status.  Default is 10 "
++              "iterations.");
++#endif
++
++MODULE_AUTHOR("QLogic Corporation");
++MODULE_DESCRIPTION("QLogic " ISP_NAME " FC-SCSI Host Bus Adapter driver");
++MODULE_LICENSE("GPL");
++
++
++/*
++ * Proc structures and functions
++ */
++struct info_str {
++      char    *buffer;
++      int     length;
++      off_t   offset;
++      int     pos;
++};
++
++static void copy_mem_info(struct info_str *, char *, int);
++static int copy_info(struct info_str *, char *, ...);
++
++
++/*
++ * List of host adapters
++ */
++struct list_head qla_hostlist;
++rwlock_t qla_hostlist_lock;
++
++
++/*
++ * PCI driver interface definitions
++ */
++#define ISP21XX_FW_INDEX      0
++#define ISP22XX_FW_INDEX      0
++#define ISP23XX_FW_INDEX      0
++#define ISP232X_FW_INDEX      2
++
++static struct qla_fw_info qla_fw_tbl[] = {
++#if defined(ISP2100)
++      /* Start of 21xx firmware list */
++      {
++              .addressing     = FW_INFO_ADDR_NORMAL,
++              .fwcode         = &fw2100tp_code01[0],
++              .fwlen          = &fw2100tp_length01,
++              .fwstart        = &fw2100tp_addr01,
++      },
++#endif
++
++#if defined(ISP2200)
++      /* Start of 22xx firmware list */
++      {
++              .addressing     = FW_INFO_ADDR_NORMAL,
++              .fwcode         = &fw2200ip_code01[0],
++              .fwlen          = &fw2200ip_length01,
++              .fwstart        = &fw2200ip_addr01,
++      },
++#endif
++
++#if defined(ISP2300)
++      /* Start of 23xx firmware list */
++#if defined(TPX)
++      {
++              .addressing     = FW_INFO_ADDR_NORMAL,
++              .fwcode         = &fw2300tpx_code01[0],
++              .fwlen          = &fw2300tpx_length01,
++              .fwstart        = &fw2300tpx_addr01,
++      },
++#else
++      {
++              .addressing     = FW_INFO_ADDR_NORMAL,
++              .fwcode         = &fw2300ipx_code01[0],
++              .fwlen          = &fw2300ipx_length01,
++              .fwstart        = &fw2300ipx_addr01,
++      },
++#endif
++
++#if defined(ISP2322)
++      /* End of 23xx firmware list */
++      { FW_INFO_ADDR_NOMORE, },
++
++      /* Start of 232x firmware list */
++#if defined(TPX)
++      {
++              .addressing     = FW_INFO_ADDR_NORMAL,
++              .fwcode         = &fw2322tpx_code01[0],
++              .fwlen          = &fw2322tpx_length01,
++              .fwstart        = &fw2322tpx_addr01,
++      },
++      {
++              .addressing     = FW_INFO_ADDR_EXTENDED,
++              .fwcode         = &rseqtpx_code01[0],
++              .fwlen          = &rseqtpx_code_length01,
++              .lfwstart       = &rseqtpx_code_addr01,
++      },
++      {
++              .addressing     = FW_INFO_ADDR_EXTENDED,
++              .fwcode         = &xseqtpx_code01[0],
++              .fwlen          = &xseqtpx_code_length01,
++              .lfwstart       = &xseqtpx_code_addr01,
++      },
++#else
++      {
++              .addressing     = FW_INFO_ADDR_NORMAL,
++              .fwcode         = &fw2322ipx_code01[0],
++              .fwlen          = &fw2322ipx_length01,
++              .fwstart        = &fw2322ipx_addr01,
++      },
++      {
++              .addressing     = FW_INFO_ADDR_EXTENDED,
++              .fwcode         = &rseqipx_code01[0],
++              .fwlen          = &rseqipx_code_length01,
++              .lfwstart       = &rseqipx_code_addr01,
++      },
++      {
++              .addressing     = FW_INFO_ADDR_EXTENDED,
++              .fwcode         = &xseqipx_code01[0],
++              .fwlen          = &xseqipx_code_length01,
++              .lfwstart       = &xseqipx_code_addr01,
++      },
++#endif
++
++#endif
++
++#endif
++
++      /* End of firmware list */
++      { FW_INFO_ADDR_NOMORE, },
++};
++
++#define ISP21XX_BRD_INDEX     0
++#define ISP22XX_BRD_INDEX     0
++#define ISP23XX_BRD_INDEX     0
++#define ISP2312_BRD_INDEX     1
++#define ISP2322_BRD_INDEX     2
++
++static struct qla_board_info qla_board_tbl[] = {
++#if defined(ISP2100)
++      {
++              .name           = "QLA2100 ",
++              .fwinfo         = &qla_fw_tbl[ISP21XX_FW_INDEX],
++      }
++#endif
++
++#if defined(ISP2200)
++      {
++              .name           = "QLA2200 ",
++              .fwinfo         = &qla_fw_tbl[ISP22XX_FW_INDEX],
++      }
++#endif
++
++#if defined(ISP2300)
++      {
++              .name           = "QLA2300 ",
++              .fwinfo         = &qla_fw_tbl[ISP23XX_FW_INDEX],
++      },
++
++      {
++              .name           = "QLA2312 ",
++              .fwinfo         = &qla_fw_tbl[ISP23XX_FW_INDEX],
++      },
++
++#if defined(ISP2322)
++      {
++              .name           = "QLA2322 ",
++              .fwinfo         = &qla_fw_tbl[ISP232X_FW_INDEX],
++      }
++#endif
++#endif
++};
++
++static struct pci_device_id qla_pci_tbl[] __devinitdata = {
++#if defined(ISP2100)
++      {
++              .vendor         = QLA2X00_VENDOR_ID,
++              .device         = QLA2100_DEVICE_ID,
++              .subvendor      = PCI_ANY_ID,
++              .subdevice      = PCI_ANY_ID,
++              .driver_data
++                      = (unsigned long)&qla_board_tbl[ISP21XX_BRD_INDEX],
++      },
++#endif
++
++#if defined(ISP2200)
++      {
++              .vendor         = QLA2X00_VENDOR_ID,
++              .device         = QLA2200_DEVICE_ID,
++              .subvendor      = PCI_ANY_ID,
++              .subdevice      = PCI_ANY_ID,
++              .driver_data
++                      = (unsigned long)&qla_board_tbl[ISP22XX_BRD_INDEX],
++      },
++#endif
++
++#if defined(ISP2300)
++      {
++              .vendor         = QLA2X00_VENDOR_ID,
++              .device         = QLA2300_DEVICE_ID,
++              .subvendor      = PCI_ANY_ID,
++              .subdevice      = PCI_ANY_ID,
++              .driver_data
++                      = (unsigned long)&qla_board_tbl[ISP23XX_BRD_INDEX],
++      },
++
++      {
++              .vendor         = QLA2X00_VENDOR_ID,
++              .device         = QLA2312_DEVICE_ID,
++              .subvendor      = PCI_ANY_ID,
++              .subdevice      = PCI_ANY_ID,
++              .driver_data
++                      = (unsigned long)&qla_board_tbl[ISP2312_BRD_INDEX],
++      },
++
++#if defined(ISP2322)
++      {
++              .vendor         = QLA2X00_VENDOR_ID,
++              .device         = QLA2322_DEVICE_ID,
++              .subvendor      = PCI_ANY_ID,
++              .subdevice      = PCI_ANY_ID,
++              .driver_data
++                      = (unsigned long)&qla_board_tbl[ISP2322_BRD_INDEX],
++      },
++#endif
++#endif
++      {0 , 0}
++};
++MODULE_DEVICE_TABLE(pci, qla_pci_tbl);
++
++static int __devinit qla_probe_device(struct pci_dev *,
++    const struct pci_device_id *);
++static void __devexit qla_remove_device(struct pci_dev *);
++static void qla2x00_free_device(scsi_qla_host_t *);
++
++struct pci_driver qla_pci_driver = {
++      .name           = DRIVER_NAME,
++      .id_table       = qla_pci_tbl,
++
++      .probe          = qla_probe_device,
++      .remove         = __devexit_p(qla_remove_device),
++};
++
++
++/*
++ * SCSI host template entry points 
++ */
++static int qla2x00_detect(Scsi_Host_Template *);
++static int qla2x00_release(struct Scsi_Host *);
++static const char *qla2x00_info(struct Scsi_Host *);
++static int qla2xxx_slave_configure(Scsi_Device * device);
++static int qla2x00_biosparam(struct scsi_device *,
++    struct block_device *, sector_t, int[]);
++extern int qla2x00_ioctl(Scsi_Device *, int , void *);
++static int qla2xxx_eh_abort(Scsi_Cmnd *);
++static int qla2xxx_eh_device_reset(Scsi_Cmnd *);
++static int qla2xxx_eh_bus_reset(Scsi_Cmnd *);
++static int qla2xxx_eh_host_reset(Scsi_Cmnd *);
++static uint8_t qla2x00_loop_reset(scsi_qla_host_t *ha);
++static int qla2x00_device_reset(scsi_qla_host_t *, uint16_t, uint16_t);
++
++static int qla2x00_proc_info(char *, char **, off_t, int, int, int);
++
++static uint8_t qla2x00_register_with_Linux(scsi_qla_host_t *, uint8_t);
++
++#if defined (CONFIG_SCSIFCHOTSWAP) || defined(CONFIG_GAMAP)
++int qla2x00_get_scsi_info_from_wwn(int mode, unsigned long long wwn, int *host, int *channel, int *lun, int *id);
++int qla2x00_get_wwn_from_scsi_info(int host, int id, unsigned long long *wwn);
++#endif /* CONFIG_SCSIFCHOTSWAP || CONFIG_GAMAP */
++
++#if !defined(MODULE)
++static int __init qla2x00_setup(char *);
++#else
++static void qla2x00_setup(char *);
++#endif
++static char *qla2x00_get_line(char *, char *);
++static int qla2x00_get_tokens(char *, char **, int);
++
++
++static Scsi_Host_Template qla2x00_driver_template = {
++      .module                 = THIS_MODULE,
++      .name                   = DRIVER_NAME,
++      .proc_name              = DRIVER_NAME,
++      .proc_info              = qla2x00_proc_info,
++      .detect                 = qla2x00_detect,
++      .release                = qla2x00_release,
++      .info                   = qla2x00_info,
++      .ioctl                  = qla2x00_ioctl,
++      .queuecommand           = qla2x00_queuecommand,
++
++      .eh_abort_handler       = qla2xxx_eh_abort,
++      .eh_device_reset_handler = qla2xxx_eh_device_reset,
++      .eh_bus_reset_handler   = qla2xxx_eh_bus_reset,
++      .eh_host_reset_handler  = qla2xxx_eh_host_reset,
++      .bios_param             = qla2x00_biosparam,
++
++      .slave_configure        = qla2xxx_slave_configure,
++
++      .this_id                = -1,
++      .can_queue              = 255,
++      .cmd_per_lun            = 3,
++      .sg_tablesize           = SG_ALL,
++      .use_clustering         = ENABLE_CLUSTERING,
++      .unchecked_isa_dma      = 0,
++      .max_sectors            = 8192,
++      .highmem_io             = 1,
++};
++
++static void qla2x00_display_fc_names(scsi_qla_host_t *);
++
++/* TODO Convert to inlines
++ *
++ * Timer routines
++ */
++#define       WATCH_INTERVAL          1       /* number of seconds */
++
++static void qla2x00_timer(scsi_qla_host_t *);
++
++static __inline__ void qla2x00_start_timer(scsi_qla_host_t *,
++    void *, unsigned long);
++static __inline__ void qla2x00_restart_timer(scsi_qla_host_t *, unsigned long);
++static __inline__ void qla2x00_stop_timer(scsi_qla_host_t *);
++
++static inline void
++qla2x00_start_timer(scsi_qla_host_t *ha, void *func, unsigned long interval)
++{
++      init_timer(&ha->timer);
++      ha->timer.expires = jiffies + interval * HZ;
++      ha->timer.data = (unsigned long)ha;
++      ha->timer.function = (void (*)(unsigned long))func;
++      add_timer(&ha->timer);
++      ha->timer_active = 1;
++}
++
++static inline void
++qla2x00_restart_timer(scsi_qla_host_t *ha, unsigned long interval)
++{
++      mod_timer(&ha->timer, jiffies + interval * HZ);
++}
++
++static __inline__ void
++qla2x00_stop_timer(scsi_qla_host_t *ha)
++{
++      del_timer_sync(&ha->timer);
++      ha->timer_active = 0;
++}
++
++
++static void qla2x00_cmd_timeout(srb_t *sp);
++static __inline__ void qla2x00_add_timer_to_cmd(srb_t *sp, int timeout);
++static __inline__ void qla2x00_delete_timer_from_cmd(srb_t *sp);
++
++/**************************************************************************
++*   qla2x00_add_timer_to_cmd
++*
++* Description:
++*       Creates a timer for the specified command. The timeout is usually
++*       the command time from kernel minus 2 secs.
++*
++* Input:
++*     sp - pointer to validate
++*
++* Returns:
++*     None.
++**************************************************************************/
++static inline void
++qla2x00_add_timer_to_cmd(srb_t *sp, int timeout)
++{
++      init_timer(&sp->timer);
++      sp->timer.expires = jiffies + timeout * HZ;
++      sp->timer.data = (unsigned long) sp;
++      sp->timer.function = (void (*) (unsigned long))qla2x00_cmd_timeout;
++      add_timer(&sp->timer);
++}
++
++/**************************************************************************
++*   qla2x00_delete_timer_from_cmd
++*
++* Description:
++*       Delete the timer for the specified command.
++*
++* Input:
++*     sp - pointer to validate
++*
++* Returns:
++*     None.
++**************************************************************************/
++static inline void 
++qla2x00_delete_timer_from_cmd(srb_t *sp)
++{
++      if (sp->timer.function != NULL) {
++              del_timer(&sp->timer);
++              sp->timer.function =  NULL;
++              sp->timer.data = (unsigned long) NULL;
++      }
++}
++
++static __inline__ void qla2x00_callback(scsi_qla_host_t *, Scsi_Cmnd *);
++static __inline__ void sp_put(struct scsi_qla_host * ha, srb_t *sp);
++static __inline__ void sp_get(struct scsi_qla_host * ha, srb_t *sp);
++static __inline__ void __sp_put(struct scsi_qla_host * ha, srb_t *sp);
++static __inline__ void
++qla2x00_delete_from_done_queue(scsi_qla_host_t *, srb_t *); 
++
++/**************************************************************************
++* sp_put
++*
++* Description:
++*   Decrement reference count and call the callback if we're the last
++*   owner of the specified sp. Will get io_request_lock before calling
++*   the callback.
++*
++* Input:
++*   ha - pointer to the scsi_qla_host_t where the callback is to occur.
++*   sp - pointer to srb_t structure to use.
++*
++* Returns:
++*
++**************************************************************************/
++static inline void
++sp_put(struct scsi_qla_host * ha, srb_t *sp)
++{
++        unsigned long flags;
++
++        if (atomic_read(&sp->ref_count) == 0) {
++              printk(KERN_INFO
++                      "%s(): **** SP->ref_count not zero\n",
++                      __func__);
++                DEBUG2(BUG();)
++
++                return;
++      }
++
++        if (!atomic_dec_and_test(&sp->ref_count))
++        {
++                return;
++        }
++
++        spin_lock_irqsave(ha->host->host_lock, flags);
++
++        qla2x00_callback(ha, sp->cmd);
++
++        spin_unlock_irqrestore(ha->host->host_lock, flags);
++}
++
++/**************************************************************************
++* sp_get
++*
++* Description:
++*   Increment reference count of the specified sp.
++*
++* Input:
++*   sp - pointer to srb_t structure to use.
++*
++* Returns:
++*
++**************************************************************************/
++static inline void
++sp_get(struct scsi_qla_host * ha, srb_t *sp)
++{
++        atomic_inc(&sp->ref_count);
++
++        if (atomic_read(&sp->ref_count) > 2) {
++              printk(KERN_INFO
++                      "%s(): **** SP->ref_count greater than two\n",
++                      __func__);
++                DEBUG2(BUG();)
++
++              return;
++      }
++}
++
++/**************************************************************************
++* __sp_put
++*
++* Description:
++*   Decrement reference count and call the callback if we're the last
++*   owner of the specified sp. Will NOT get io_request_lock before calling
++*   the callback.
++*
++* Input:
++*   ha - pointer to the scsi_qla_host_t where the callback is to occur.
++*   sp - pointer to srb_t structure to use.
++*
++* Returns:
++*
++**************************************************************************/
++static inline void
++__sp_put(struct scsi_qla_host * ha, srb_t *sp)
++{
++        if (atomic_read(&sp->ref_count) == 0) {
++              printk(KERN_INFO
++                      "%s(): **** SP->ref_count not zero\n",
++                      __func__);
++                DEBUG2(BUG();)
++
++              return;
++      }
++
++        if (!atomic_dec_and_test(&sp->ref_count))
++        {
++                return;
++        }
++
++        qla2x00_callback(ha, sp->cmd);
++}
++
++
++/*
++* qla2x00_callback
++*      Returns the completed SCSI command to LINUX.
++*
++* Input:
++*     ha -- Host adapter structure
++*     cmd -- SCSI mid-level command structure.
++* Returns:
++*      None
++* Note:From failover point of view we always get the sp
++*      from vis_ha pool in queuecommand.So when we put it 
++*      back to the pool it has to be the vis_ha.       
++*      So rely on Scsi_Cmnd to get the vis_ha and not on sp.                  
++*/
++static inline void
++qla2x00_callback(scsi_qla_host_t *ha, Scsi_Cmnd *cmd)
++{
++      srb_t *sp = (srb_t *) CMD_SP(cmd);
++      scsi_qla_host_t *vis_ha;
++      os_lun_t *lq;
++      int got_sense;
++      unsigned long   cpu_flags = 0;
++
++      ENTER(__func__);
++
++      CMD_HANDLE(cmd) = (unsigned char *) NULL;
++      vis_ha = (scsi_qla_host_t *) cmd->device->host->hostdata;
++
++      if (sp == NULL) {
++              printk(KERN_INFO
++                      "%s(): **** CMD derives a NULL SP\n",
++                      __func__);
++                DEBUG2(BUG();)
++              return;
++      }
++
++      /*
++       * If command status is not DID_BUS_BUSY then go ahead and freed sp.
++       */
++      /*
++       * Cancel command timeout
++       */
++      qla2x00_delete_timer_from_cmd(sp);
++
++      /*
++       * Put SP back in the free queue
++       */
++      sp->cmd   = NULL;
++      CMD_SP(cmd) = NULL;
++      lq = sp->lun_queue;
++      got_sense = (sp->flags & SRB_GOT_SENSE)? 1: 0;
++      add_to_free_queue(vis_ha, sp);
++
++      if ((CMD_RESULT(cmd)>>16) == DID_OK) {
++              /* device ok */
++              ha->total_bytes += cmd->bufflen;
++              if (!got_sense) {
++                      /* If lun was suspended then clear retry count */
++                      spin_lock_irqsave(&lq->q_lock, cpu_flags);
++                      if (!test_bit(LUN_EXEC_DELAYED, &lq->q_flag))
++                              lq->q_state = LUN_STATE_READY;
++                      spin_unlock_irqrestore(&lq->q_lock, cpu_flags);
++              }
++      } else if ((CMD_RESULT(cmd)>>16) == DID_ERROR) {
++              /* device error */
++              ha->total_dev_errs++;
++      }
++
++      if (cmd->flags & IS_RESETTING) {
++              CMD_RESULT(cmd) = (int)DID_RESET << 16;
++      }
++
++      /* Call the mid-level driver interrupt handler */
++      (*(cmd)->scsi_done)(cmd);
++
++      LEAVE(__func__);
++}
++
++static inline void 
++qla2x00_delete_from_done_queue(scsi_qla_host_t *dest_ha, srb_t *sp) 
++{
++      /* remove command from done list */
++      list_del_init(&sp->list);
++      dest_ha->done_q_cnt--;
++      sp->state = SRB_NO_QUEUE_STATE;
++
++      if (sp->flags & SRB_DMA_VALID) {
++              sp->flags &= ~SRB_DMA_VALID;
++
++              /* Release memory used for this I/O */
++              if (sp->cmd->use_sg) {
++                      pci_unmap_sg(dest_ha->pdev,
++                                      sp->cmd->request_buffer,
++                                      sp->cmd->use_sg,
++                                      scsi_to_pci_dma_dir(
++                                              sp->cmd->sc_data_direction));
++              } else if (sp->cmd->request_bufflen) {
++                      pci_unmap_page(dest_ha->pdev,
++                                      sp->saved_dma_handle,
++                                      sp->cmd->request_bufflen,
++                                      scsi_to_pci_dma_dir(
++                                              sp->cmd->sc_data_direction));
++              }
++      }
++}
++
++static int qla2x00_do_dpc(void *data);
++static uint8_t qla2x00_check_for_devices_online(scsi_qla_host_t *);
++
++static void qla2x00_rst_aen(scsi_qla_host_t *);
++static void qla2x00_done_work(void *);
++
++static void qla2x00_process_failover(scsi_qla_host_t *);
++
++static uint8_t qla2x00_mem_alloc(scsi_qla_host_t *);
++static void qla2x00_mem_free(scsi_qla_host_t *ha);
++uint8_t qla2x00_allocate_sp_pool( scsi_qla_host_t *ha);
++void qla2x00_free_sp_pool(scsi_qla_host_t *ha);
++
++
++static int apidev_init(struct Scsi_Host *);
++static int apidev_cleanup(void);
++static int apidev_open(struct inode *, struct file *);
++static int apidev_close(struct inode *, struct file *);
++static int apidev_ioctl(struct inode *,
++    struct file *, unsigned int, unsigned long arg);
++
++/*************************************************************************
++*   qla2x00_set_info
++*
++* Description:
++*   Set parameters for the driver from the /proc filesystem.
++*
++* Returns:
++*************************************************************************/
++int
++qla2x00_set_info(char *buffer, int length, struct Scsi_Host *shost)
++{
++      return (-ENOSYS);  /* Currently this is a no-op */
++}
++
++/**************************************************************************
++* qla2x00_detect
++*
++* Description:
++*    This routine will probe for Qlogic FC SCSI host adapters.
++*    It returns the number of host adapters of a particular
++*    type that were found.     It also initialize all data necessary for
++*    the driver.  It is passed-in the host number, so that it
++*    knows where its first entry is in the scsi_hosts[] array.
++*
++* Input:
++*     template - pointer to SCSI template
++*
++* Returns:
++*  num - number of host adapters found.
++**************************************************************************/
++int
++qla2x00_detect(Scsi_Host_Template *template)
++{
++#if defined(MODULE)
++      DEBUG2(printk("DEBUG: qla2x00_set_info() starts at address = %p\n",
++          qla2x00_set_info));
++      printk(KERN_INFO
++          "qla2x00_set_info() starts at address = %p\n",
++          qla2x00_set_info);
++
++      /*
++       * If we are called as a module, the qla2100 pointer may not be null
++       * and it would point to our bootup string, just like on the lilo
++       * command line.  IF not NULL, then process this config string with
++       * qla2x00_setup
++       *
++       * Boot time Options To add options at boot time add a line to your
++       * lilo.conf file like:
++       * append="qla2100=verbose,tag_info:{{32,32,32,32},{32,32,32,32}}"
++       * which will result in the first four devices on the first two
++       * controllers being set to a tagged queue depth of 32.
++       */
++      if (ql2xopts)
++              qla2x00_setup(ql2xopts);
++      if (dummy_buffer[0] != 'P')
++              printk(KERN_WARNING
++                  "qla2x00: Please read the file "
++                  "/usr/src/linux/drivers/scsi/README.qla2x00\n"
++                  "qla2x00: to see the proper way to specify options to "
++                  "the qla2x00 module\n"
++                  "qla2x00: Specifically, don't use any commas when passing "
++                  "arguments to\n"
++                  "qla2x00: insmod or else it might trash certain memory "
++                  "areas.\n");
++#endif
++
++      rwlock_init(&qla_hostlist_lock);
++      INIT_LIST_HEAD(&qla_hostlist);
++
++      pci_module_init(&qla_pci_driver);
++
++      return (num_hosts);
++}
++
++/**************************************************************************
++*   qla2x00_register_with_Linux
++*
++* Description:
++*   Free the passed in Scsi_Host memory structures prior to unloading the
++*   module.
++*
++* Input:
++*     ha - pointer to host adapter structure
++*     maxchannels - MAX number of channels.
++*
++* Returns:
++*  0 - Sucessfully reserved resources.
++*  1 - Failed to reserved a resource.
++**************************************************************************/
++static uint8_t
++qla2x00_register_with_Linux(scsi_qla_host_t *ha, uint8_t maxchannels)
++{
++      struct Scsi_Host *host = ha->host;
++
++      host->can_queue = max_srbs;  /* default value:-MAX_SRBS(4096)  */
++      host->cmd_per_lun = 3;
++      host->max_cmd_len = MAX_CMDSZ;
++
++#if defined (CONFIG_SCSIFCHOTSWAP) || defined(CONFIG_GAMAP)
++      host->hostt->get_scsi_info_from_wwn = qla2x00_get_scsi_info_from_wwn;
++      host->hostt->get_wwn_from_scsi_info = qla2x00_get_wwn_from_scsi_info;
++#endif /* CONFIG_SCSIFCHOTSWAP || CONFIG_GAMAP */
++
++      host->n_io_port = 0xFF;
++
++#if MEMORY_MAPPED_IO
++      host->base = (unsigned long)ha->mmpbase;
++#else
++      host->base = 0;
++#endif
++
++      host->max_channel = maxchannels;
++      host->max_lun = ha->max_luns;
++      host->unique_id = ha->instance;
++      host->max_id = ha->max_targets;
++
++      /* set our host ID  (need to do something about our two IDs) */
++      host->this_id = 255;
++
++#if defined(CONFIG_MD_MULTIHOST_FC)
++      {
++              unsigned long   i;
++              unsigned long   j;
++
++              union {
++                      __u64   identifier;
++                      char    wwn[WWN_SIZE];
++              } foo;
++
++              for (i = 0, j = WWN_SIZE-1; i < WWN_SIZE; i++, j--) {
++                      foo.wwn[i] = ha->init_cb->port_name[j];
++              }
++
++              host->fc_wwn = foo.identifier;
++      }
++#endif /* CONFIG_MD_MULTIHOST_FC */
++
++      /* Register the I/O space with Linux */
++      if (request_region(host->io_port, 0xff, DRIVER_NAME) == 0) {
++              printk(KERN_WARNING
++                  "scsi(%ld): Failed to reserved i/o base region "
++                  "0x%04lx-0x%04lx already in use\n",
++                  ha->host_no,
++                  host->io_port, host->io_port + 0xff);
++              return 1;
++      }
++
++      /* Register the IRQ with Linux (sharable) */
++      if (request_irq(host->irq, qla2x00_intr_handler,
++          SA_INTERRUPT|SA_SHIRQ, DRIVER_NAME, ha)) {
++              printk(KERN_WARNING
++                  "scsi(%ld): Failed to reserve interrupt %d already in "
++                  "use\n",
++                  ha->host_no, host->irq);
++              release_region(host->io_port, 0xff);
++              return 1;
++      }
++
++      /* Initialized the timer */
++      qla2x00_start_timer(ha, qla2x00_timer, WATCH_INTERVAL);
++
++      return 0;
++}
++
++
++/**************************************************************************
++*   qla2x00_release
++*
++* Description:
++*   Free the passed in Scsi_Host memory structures prior to unloading the
++*   module.
++*
++* Input:
++*     ha - pointer to host adapter structure
++*
++* Returns:
++*  0 - Always returns good status
++**************************************************************************/
++int
++qla2x00_release(struct Scsi_Host *host)
++{
++      scsi_qla_host_t *ha;
++
++      if (host != NULL) {
++              ha = (scsi_qla_host_t *)host->hostdata;
++              list_del(&ha->list);
++              qla2x00_free_device(ha);
++      }
++
++      if (list_empty(&qla_hostlist))
++              pci_unregister_driver(&qla_pci_driver);
++
++      return 0;
++}
++
++/**************************************************************************
++*   qla2x00_info
++*
++* Description:
++*
++* Input:
++*     host - pointer to Scsi host adapter structure
++*
++* Returns:
++*     Return a text string describing the driver.
++**************************************************************************/
++const char *
++qla2x00_info(struct Scsi_Host *host)
++{
++      static char qla2x00_buffer[255];
++      char *bp;
++      scsi_qla_host_t *ha;
++
++      /*
++       * We must create the api node here instead of qla2x00_detect since we
++       * want the api node to be subdirectory of /proc/scsi/qla2x00 which
++       * will not have been created when qla2x00_detect exits, but which will
++       * have been created by this point.
++       */
++      apidev_init(host);
++
++      bp = &qla2x00_buffer[0];
++      ha = (scsi_qla_host_t *)host->hostdata;
++      memset(bp, 0, sizeof(qla2x00_buffer));
++
++      sprintf(bp,
++          "QLogic %sPCI to Fibre Channel Host Adapter: bus %d device %d "
++          "irq %d\n        Firmware version: %2d.%02d.%02d, "
++          "Driver version %s\n",
++          ha->brd_info->name,
++          ha->pdev->bus->number,
++          PCI_SLOT(ha->pdev->devfn),
++          host->irq,
++          ha->fw_major_version, 
++          ha->fw_minor_version, 
++          ha->fw_subminor_version,
++          qla2x00_version_str);
++
++      return bp;
++}
++
++/**************************************************************************
++* qla2x00_queuecommand
++*
++* Description:
++*     Queue a command to the controller.
++*
++* Input:
++*     cmd - pointer to Scsi cmd structure
++*     fn - pointer to Scsi done function
++*
++* Returns:
++*   0 - Always
++*
++* Note:
++* The mid-level driver tries to ensures that queuecommand never gets invoked
++* concurrently with itself or the interrupt handler (although the
++* interrupt handler may call this routine as part of request-completion
++* handling).
++**************************************************************************/
++int
++qla2x00_queuecommand(Scsi_Cmnd *cmd, void (*fn)(Scsi_Cmnd *))
++{
++      fc_port_t       *fcport;
++      os_lun_t        *lq;
++      os_tgt_t        *tq;
++      scsi_qla_host_t *ha, *ha2;
++      srb_t           *sp;
++      struct Scsi_Host *host;
++      uint32_t        b, t, l;
++#if  BITS_PER_LONG <= 32
++      uint32_t        handle;
++#else
++      u_long          handle;
++#endif
++
++      ENTER(__func__);
++
++      host = cmd->device->host;
++      ha = (scsi_qla_host_t *) host->hostdata;
++
++      cmd->scsi_done = fn;
++
++      spin_unlock(ha->host->host_lock);
++
++      /*
++       * Allocate a command packet from the "sp" pool.  If we cant get back
++       * one then let scsi layer come back later.
++       */
++      if ((sp = qla2x00_get_new_sp(ha)) == NULL) {
++              printk(KERN_WARNING
++                  "scsi(%ld): Couldn't allocate memory for sp - retried.\n",
++                  ha->host_no);
++
++              spin_lock_irq(ha->host->host_lock);
++
++              LEAVE(__func__);
++              return (1);
++      }
++
++      sp->cmd = cmd;
++      CMD_SP(cmd) = (void *)sp;
++
++      sp->flags = 0;
++      if (CMD_RESID_LEN(cmd) & SRB_IOCTL) {
++              /* Need to set sp->flags */
++              sp->flags |= SRB_IOCTL;
++              CMD_RESID_LEN(cmd) = 0; /* Clear it since no more use. */
++      }
++
++      sp->fo_retry_cnt = 0;
++#if defined(IOCB_THROLLE_USAGE)
++      sp->iocb_cnt = 0;
++#endif
++
++      if (cmd->allowed < ql2xretrycount) {
++              cmd->allowed = ql2xretrycount;
++      }
++
++      /* Generate LU queue on bus, target, LUN */
++      b = SCSI_BUS_32(cmd);
++      t = SCSI_TCN_32(cmd);
++      l = SCSI_LUN_32(cmd);
++
++      /*
++       * Start Command Timer. Typically it will be 2 seconds less than what
++       * is requested by the Host such that we can return the IO before
++       * aborts are called.
++       */
++      if ((CMD_TIMEOUT(cmd)/HZ) > QLA_CMD_TIMER_DELTA)
++              qla2x00_add_timer_to_cmd(sp,
++                  (CMD_TIMEOUT(cmd)/HZ) - QLA_CMD_TIMER_DELTA);
++      else
++              qla2x00_add_timer_to_cmd(sp, (CMD_TIMEOUT(cmd)/HZ));
++
++      if (l >= ha->max_luns) {
++              CMD_RESULT(cmd) = DID_NO_CONNECT << 16;
++
++              spin_lock_irq(ha->host->host_lock);
++
++              __sp_put(ha, sp);
++              LEAVE(__func__);
++
++              return (0);
++      }
++
++      if ((tq = (os_tgt_t *) TGT_Q(ha, t)) != NULL &&
++              (lq = (os_lun_t *) LUN_Q(ha, t, l)) != NULL ) {
++
++              fcport = lq->fclun->fcport;
++              ha2 = fcport->ha;
++      } else {
++              lq = NULL;
++              fcport = NULL;
++              ha2 = ha;
++      }
++
++      /* Set an invalid handle until we issue the command to ISP */
++      /* then we will set the real handle value.                 */
++      handle = INVALID_HANDLE;
++      CMD_HANDLE(cmd) = (unsigned char *)handle;
++
++      /* Bookkeeping information */
++      sp->r_start = jiffies;       /* time the request was recieved */
++      sp->u_start = 0;
++
++      /* Setup device queue pointers. */
++      sp->tgt_queue = tq;
++      sp->lun_queue = lq;
++
++      /*
++       * NOTE : q is NULL
++       *
++       * 1. When device is added from persistent binding but has not been
++       *    discovered yet.The state of loopid == PORT_AVAIL.
++       * 2. When device is never found on the bus.(loopid == UNUSED)
++       *
++       * IF Device Queue is not created, or device is not in a valid state
++       * and link down error reporting is enabled, reject IO.
++       */
++      if (fcport == NULL) {
++              DEBUG3(printk("scsi(%ld:%2d:%2d): port unavailable\n",
++                  ha->host_no,t,l));
++
++              CMD_RESULT(cmd) = DID_NO_CONNECT << 16;
++
++              spin_lock_irq(ha->host->host_lock);
++
++              __sp_put(ha, sp);
++
++              return (0);
++      }
++
++      DEBUG5(printk("scsi(%ld:%2d:%2d): (queuecmd) queue sp = %p, "
++          "flags=0x%x fo retry=%d, pid=%ld, cmd flags= 0x%x\n",
++          ha->host_no,
++          t, l,
++          sp, sp->flags, sp->fo_retry_cnt,
++          cmd->serial_number,cmd->flags));
++      DEBUG5(qla2x00_print_scsi_cmd(cmd));
++
++      sp->flags &= ~SRB_ISP_COMPLETED;
++
++      sp->fclun = lq->fclun;
++      sp->ha = ha2;
++
++      sp->cmd_length = CMD_CDBLEN(cmd);
++
++      if (cmd->sc_data_direction == SCSI_DATA_UNKNOWN &&
++          cmd->request_bufflen != 0) {
++
++              DEBUG2(printk(KERN_WARNING
++                  "scsi(%ld): Incorrect data direction - transfer "
++                  "length=%d, direction=%d, pid=%ld, opcode=%x\n",
++                  ha->host_no,
++                  cmd->request_bufflen,
++                  cmd->sc_data_direction,
++                  cmd->serial_number,
++                  cmd->cmnd[0]));
++      }
++
++      /* Final pre-check */
++      if (atomic_read(&fcport->state) == FC_DEVICE_DEAD) {
++              /*
++               * Add the command to the done-queue for later failover
++               * processing
++               */
++              CMD_RESULT(cmd) = DID_NO_CONNECT << 16;
++              add_to_done_queue(ha, sp);
++              schedule_work(&ha->run_qla_task);
++
++              spin_lock_irq(ha->host->host_lock);
++              return (0);
++      }
++
++      add_to_pending_queue(ha, sp);
++
++      /* First start cmds for this lun if possible */
++      qla2x00_next(ha);
++
++      spin_lock_irq(ha->host->host_lock);
++
++      LEAVE(__func__);
++      return (0);
++}
++
++/*
++ * qla2x00_eh_wait_on_command
++ *    Waits for the command to be returned by the Firmware for some
++ *    max time.
++ *
++ * Input:
++ *    ha = actual ha whose done queue will contain the command
++ *          returned by firmware.
++ *    cmd = Scsi Command to wait on.
++ *    flag = Abort/Reset(Bus or Device Reset)
++ *
++ * Return:
++ *    Not Found : 0
++ *    Found : 1
++ */
++static int
++qla2x00_eh_wait_on_command(scsi_qla_host_t *ha, Scsi_Cmnd *cmd)
++{
++#define ABORT_WAIT_TIME       10 /* seconds */
++#define EH_ACTIVE       1  /* Error Handler Active */ 
++
++      int             found = 0;
++      int             done = 0;
++      srb_t           *rp;
++      struct list_head *list, *temp;
++      u_long          cpu_flags = 0;
++      u_long          max_wait_time = ABORT_WAIT_TIME;
++
++      ENTER(__func__);
++
++      do {
++              /* Check on done queue */
++              if (!found) {
++                      spin_lock_irqsave(&ha->list_lock, cpu_flags);
++                      list_for_each_safe(list, temp, &ha->done_queue) {
++                              rp = list_entry(list, srb_t, list);
++
++                              /*
++                              * Found command.  Just exit and wait for the
++                              * cmd sent to OS.
++                              */
++                              if (cmd == rp->cmd) {
++                                      found++;
++                                      DEBUG3(printk("%s: found in done "
++                                                      "queue.\n", __func__);)
++                                      break;
++                              }
++                      }
++                      spin_unlock_irqrestore(&ha->list_lock, cpu_flags);
++              }
++
++              /* Checking to see if its returned to OS */
++              rp = (srb_t *) CMD_SP(cmd);
++              if (rp == NULL ) {
++                      done++;
++                      break;
++              }
++
++              spin_unlock_irq(ha->host->host_lock);
++
++              set_current_state(TASK_INTERRUPTIBLE);
++              schedule_timeout(2*HZ);
++
++              spin_lock_irq(ha->host->host_lock);
++
++      } while ((max_wait_time--));
++
++      DEBUG2(if (done))
++      DEBUG2(printk("%s: found cmd=%p.\n", __func__, cmd);)
++
++      LEAVE(__func__);
++
++      return(done);
++}
++
++/**************************************************************************
++* qla2xxx_eh_abort
++*
++* Description:
++*    The abort function will abort the specified command.
++*
++* Input:
++*    cmd = Linux SCSI command packet to be aborted.
++*
++* Returns:
++*    Either SUCCESS or FAILED.
++*
++* Note:
++**************************************************************************/
++int
++qla2xxx_eh_abort(Scsi_Cmnd *cmd)
++{
++      int             i;
++      int             return_status = FAILED;
++      os_lun_t        *q;
++      scsi_qla_host_t *ha;
++      scsi_qla_host_t *vis_ha;
++      srb_t           *sp;
++      srb_t           *rp;
++      struct list_head *list, *temp;
++      struct Scsi_Host *host;
++      uint8_t         found = 0;
++      uint32_t        b, t, l;
++      unsigned long   flags;
++
++
++      ENTER("qla2xxx_eh_abort");
++
++      /* Get the SCSI request ptr */
++      sp = (srb_t *) CMD_SP(cmd);
++
++      /*
++       * If sp is NULL, command is already returned.
++       * sp is NULLed just before we call back scsi_done
++       *
++       */
++      if ((sp == NULL)) {
++              /* no action - we don't have command */
++              DEBUG(printk("qla2xxx_eh_abort: cmd already done sp=%p\n",sp);)
++              return(SUCCESS);
++      }
++      if (sp) {
++              DEBUG(printk("qla2xxx_eh_abort: refcount %i \n",
++                  atomic_read(&sp->ref_count));)
++      }
++
++      vis_ha = (scsi_qla_host_t *) cmd->device->host->hostdata;
++      vis_ha->eh_start=0;
++      if (vis_ha->flags.failover_enabled)
++              /* Get Actual HA pointer */
++              ha = (scsi_qla_host_t *)sp->ha;
++      else
++              ha = (scsi_qla_host_t *)cmd->device->host->hostdata;
++
++      host = ha->host;
++
++      /* Generate LU queue on bus, target, LUN */
++      b = SCSI_BUS_32(cmd);
++      t = SCSI_TCN_32(cmd);
++      l = SCSI_LUN_32(cmd);
++      q = GET_LU_Q(vis_ha, t, l);
++
++      /*
++       * if no LUN queue then something is very wrong!!!
++       */
++      if (q == NULL) {
++              printk(KERN_WARNING
++                      "qla2x00: (%x:%x:%x) No LUN queue.\n", b, t, l);
++
++              /* no action - we don't have command */
++              return(FAILED);
++      }
++
++      DEBUG2(printk("scsi(%ld): ABORTing cmd=%p sp=%p jiffies = 0x%lx, "
++          "timeout=%x, dpc_flags=%lx, vis_ha->dpc_flags=%lx\n",
++          ha->host_no,
++          cmd,
++          sp,
++          jiffies,
++          CMD_TIMEOUT(cmd)/HZ,
++          ha->dpc_flags,
++          vis_ha->dpc_flags);)
++      DEBUG2(qla2x00_print_scsi_cmd(cmd));
++      DEBUG2(qla2x00_print_q_info(q);)
++
++      /* Search done queue */
++      spin_lock_irqsave(&ha->list_lock,flags);
++      list_for_each_safe(list, temp, &ha->done_queue) {
++              rp = list_entry(list, srb_t, list);
++
++              if (cmd != rp->cmd)
++                      continue;
++
++              /*
++               * Found command. No need to remove command from done list.
++               * Just proceed to call done.
++               */
++              return_status = SUCCESS;
++              found++;
++              qla2x00_delete_from_done_queue(ha, sp);
++
++              break;
++      } /* list_for_each_safe() */
++      spin_unlock_irqrestore(&ha->list_lock, flags);
++
++      /*
++       * Return immediately if the aborted command was already in the done
++       * queue
++       */
++      if (found) {
++              printk(KERN_INFO "qla2xxx_eh_abort: Returning completed "
++                      "command=%p sp=%p\n", cmd, sp);
++              __sp_put(ha, sp);
++              return (return_status);
++      }
++      
++
++      /*
++       * See if this command is in the retry queue
++       */
++      if (!found) {
++              DEBUG3(printk("qla2xxx_eh_abort: searching sp %p "
++                  "in retry queue.\n", sp);)
++
++              spin_lock_irqsave(&ha->list_lock, flags);
++              list_for_each_safe(list, temp, &ha->retry_queue) {
++                      rp = list_entry(list, srb_t, list);
++
++                      if (cmd != rp->cmd)
++                              continue;
++
++
++                      DEBUG2(printk("qla2xxx_eh_abort: found "
++                          "in retry queue. SP=%p\n", sp);)
++
++                      __del_from_retry_queue(ha, rp);
++                      CMD_RESULT(rp->cmd) = DID_ABORT << 16;
++                      __add_to_done_queue(ha, rp);
++
++                      return_status = SUCCESS;
++                      found++;
++
++                      break;
++
++              } /* list_for_each_safe() */
++              spin_unlock_irqrestore(&ha->list_lock, flags);
++      }
++
++      /*
++       * Search failover queue
++       */
++      if (ha->flags.failover_enabled) {
++              if (!found) {
++                      DEBUG3(printk("qla2xxx_eh_abort: searching sp %p "
++                                      "in failover queue.\n", sp);)
++
++                      spin_lock_irqsave(&ha->list_lock, flags);
++                      list_for_each_safe(list, temp, &ha->failover_queue) {
++                              rp = list_entry(list, srb_t, list);
++
++                              if (cmd != rp->cmd)
++                                      continue;
++
++                              DEBUG2(printk(KERN_WARNING
++                                              "qla2xxx_eh_abort: found "
++                                              "in failover queue. SP=%p\n",
++                                              sp);)
++
++                              /* Remove srb from failover queue. */
++                              __del_from_failover_queue(ha, rp);
++                              CMD_RESULT(rp->cmd) = DID_ABORT << 16;
++                              __add_to_done_queue(ha, rp);
++
++                              return_status = SUCCESS;
++                              found++;
++
++                              break;
++
++                      } /* list_for_each_safe() */
++                      spin_unlock_irqrestore(&ha->list_lock, flags);
++              } /*End of if !found */
++      }
++
++      /*
++       * Our SP pointer points at the command we want to remove from the
++       * pending queue providing we haven't already sent it to the adapter.
++       */
++      if (!found) {
++              DEBUG3(printk("qla2xxx_eh_abort: searching sp %p "
++                  "in pending queue.\n", sp);)
++
++              spin_lock_irqsave(&vis_ha->list_lock, flags);
++              list_for_each_safe(list, temp, &vis_ha->pending_queue) {
++                      rp = list_entry(list, srb_t, list);
++                      if (rp->cmd != cmd)
++                              continue;
++
++                      /* Remove srb from LUN queue. */
++                      rp->flags |=  SRB_ABORTED;
++
++                      DEBUG2(printk("qla2xxx_eh_abort: Cmd in pending queue."
++                          " serial_number %ld.\n",
++                          sp->cmd->serial_number);)
++
++                      __del_from_pending_queue(vis_ha, rp);
++                      CMD_RESULT(cmd) = DID_ABORT << 16;
++
++                      __add_to_done_queue(vis_ha, rp);
++
++                      return_status = SUCCESS;
++
++                      found++;
++                      break;
++              } /* list_for_each_safe() */
++              spin_unlock_irqrestore(&vis_ha->list_lock, flags);
++      } /*End of if !found */
++
++      if (!found) {  /* find the command in our active list */
++              DEBUG3(printk("qla2xxx_eh_abort: searching sp %p "
++                  "in outstanding queue.\n", sp);)
++
++              spin_lock_irqsave(&ha->hardware_lock, flags);
++              for (i = 1; i < MAX_OUTSTANDING_COMMANDS; i++) {
++                      sp = ha->outstanding_cmds[i];
++
++                      if (sp == NULL)
++                              continue;
++
++                      if (sp->cmd != cmd)
++                              continue;
++
++
++                      DEBUG2(printk("qla2xxx_eh_abort(%ld): aborting sp %p "
++                          "from RISC. pid=%d sp->state=%x\n",
++                          ha->host_no, 
++                          sp, 
++                          (int)sp->cmd->serial_number,
++                          sp->state);)
++                      DEBUG(qla2x00_print_scsi_cmd(cmd);)
++                      DEBUG(qla2x00_print_q_info(q);)
++
++                      /* Get a reference to the sp and drop the lock.*/
++                      sp_get(ha,sp);
++
++                      spin_unlock_irqrestore(&ha->hardware_lock, flags);
++                      spin_unlock(ha->host->host_lock);
++
++                      if (qla2x00_abort_command(ha, sp)) {
++                              DEBUG2(printk("qla2xxx_eh_abort: abort_command "
++                                  "mbx failed.\n");)
++                              return_status = FAILED;
++                      } else {
++                              DEBUG3(printk("qla2xxx_eh_abort: abort_command "
++                                  " mbx success.\n");)
++                              return_status = SUCCESS;
++                      }
++
++                      sp_put(ha,sp);
++
++                      spin_lock_irq(ha->host->host_lock);
++                      spin_lock_irqsave(&ha->hardware_lock, flags);
++
++                      /*
++                       * Regardless of mailbox command status, go check on
++                       * done queue just in case the sp is already done.
++                       */
++                      break;
++
++              }/*End of for loop */
++              spin_unlock_irqrestore(&ha->hardware_lock, flags);
++
++      } /*End of if !found */
++
++        /*Waiting for our command in done_queue to be returned to OS.*/
++      if (qla2x00_eh_wait_on_command(ha, cmd) != 0) {
++              DEBUG2(printk("qla2xxx_eh_abort: cmd returned back to OS.\n");)
++              return_status = SUCCESS;
++      }
++
++      if (return_status == FAILED) {
++              printk(KERN_INFO "qla2xxx_eh_abort Exiting: status=Failed\n");
++              return FAILED;
++      }
++
++      DEBUG(printk("qla2xxx_eh_abort: Exiting. return_status=0x%x.\n",
++          return_status));
++
++      LEAVE("qla2xxx_eh_abort");
++
++      return(return_status);
++}
++
++/**************************************************************************
++* qla2x00_eh_wait_for_pending_target_commands
++*
++* Description:
++*    Waits for all the commands to come back from the specified target.
++*
++* Input:
++*    ha - pointer to scsi_qla_host structure.
++*    t  - target      
++* Returns:
++*    Either SUCCESS or FAILED.
++*
++* Note:
++**************************************************************************/
++int
++qla2x00_eh_wait_for_pending_target_commands(scsi_qla_host_t *ha, int t)
++{
++      int     cnt;
++      int     status;
++      unsigned long   flags;
++      srb_t           *sp;
++      Scsi_Cmnd       *cmd;
++
++      status = 0;
++
++      /*
++       * Waiting for all commands for the designated target in the active
++       * array
++       */
++      for (cnt = 1; cnt < MAX_OUTSTANDING_COMMANDS; cnt++) {
++              spin_lock_irqsave(&ha->hardware_lock, flags);
++              sp = ha->outstanding_cmds[cnt];
++              if (sp) {
++                      cmd = sp->cmd;
++                      spin_unlock_irqrestore(&ha->hardware_lock, flags);
++                      if (SCSI_TCN_32(cmd) == t) {
++                              qla2x00_eh_wait_on_command(ha, cmd);
++                      }
++              }
++              else {
++                      spin_unlock_irqrestore(&ha->hardware_lock, flags);
++              }
++      }
++      return (status);
++}
++
++
++/**************************************************************************
++* qla2xxx_eh_device_reset
++*
++* Description:
++*    The device reset function will reset the target and abort any
++*    executing commands.
++*
++*    NOTE: The use of SP is undefined within this context.  Do *NOT*
++*          attempt to use this value, even if you determine it is 
++*          non-null.
++*
++* Input:
++*    cmd = Linux SCSI command packet of the command that cause the
++*          bus device reset.
++*
++* Returns:
++*    SUCCESS/FAILURE (defined as macro in scsi.h).
++*
++**************************************************************************/
++int
++qla2xxx_eh_device_reset(Scsi_Cmnd *cmd)
++{
++      int             return_status = SUCCESS;
++      uint32_t        b, t, l;
++      scsi_qla_host_t *ha;
++
++#if defined(LOGOUT_AFTER_DEVICE_RESET)
++      os_lun_t        *lq;
++      fc_port_t       *fcport;
++#endif
++
++      ENTER(__func__);
++
++      if (cmd == NULL) {
++              printk(KERN_INFO
++                      "%s(): **** SCSI mid-layer passing in NULL cmd\n",
++                      __func__);
++                DEBUG2(BUG();)
++
++              return (FAILED);
++      }
++
++      /* Verify the device exists. */
++      ha = (scsi_qla_host_t *)cmd->device->host->hostdata;
++      ha->eh_start = 0;
++      b = SCSI_BUS_32(cmd);
++      t = SCSI_TCN_32(cmd);
++      l = SCSI_LUN_32(cmd);
++      if (TGT_Q(ha, t) == NULL) {
++              printk(KERN_INFO
++                      "%s(): **** CMD derives a NULL TGT_Q\n",
++                      __func__);
++                DEBUG2(BUG();)
++
++              return (FAILED);
++      }
++
++      ha = (scsi_qla_host_t *)cmd->device->host->hostdata;
++
++#if STOP_ON_RESET
++      printk(debug_buff,"Resetting Device= 0x%x\n", (int)cmd);
++/* WE SHOULD NOT call this function, since it dereferences SP */
++      //qla2x00_print_scsi_cmd(cmd);
++      qla2x00_panic(__func__, ha->host);
++#endif
++
++      if (qla2x00_verbose)
++              printk(KERN_INFO
++                      "scsi(%ld:%d:%d:%d): DEVICE RESET ISSUED.\n",
++                      ha->host_no, (int)b, (int)t, (int)l);
++
++      DEBUG2(printk("scsi(%ld): DEVICE_RESET cmd=%p jiffies = 0x%lx, "
++              "timeout=%x, dpc_flags=%lx, status=%x allowed=%d "
++              "cmd.state=%x\n",
++              ha->host_no,
++              cmd,
++              jiffies,
++              CMD_TIMEOUT(cmd)/HZ,
++              ha->dpc_flags,
++              cmd->result,
++              cmd->allowed,
++              cmd->state);)
++/* WE SHOULD NOT call this function, since it dereferences SP */
++      //qla2x00_print_scsi_cmd(cmd);
++
++      if (!((test_bit(ABORT_ISP_ACTIVE, &ha->dpc_flags)) ||
++              (test_bit(LOOP_RESET_NEEDED, &ha->dpc_flags)) ||
++              (test_bit(ISP_ABORT_NEEDED, &ha->dpc_flags)) ||
++              (!atomic_read(&ha->loop_down_timer) &&
++               ha->loop_state == LOOP_DOWN)||
++              test_bit(CFG_ACTIVE, &ha->cfg_flags) ||
++              ha->loop_state != LOOP_READY)) {
++
++              clear_bit(DEVICE_RESET_NEEDED, &ha->dpc_flags);
++
++              spin_unlock_irq(ha->host->host_lock);
++
++              if (qla2x00_device_reset(ha, t, l) != 0) {
++                      return_status = FAILED;
++              }
++
++#if defined(LOGOUT_AFTER_DEVICE_RESET)
++              if (return_status == SUCCESS) {
++                      lq = (os_lun_t *)LUN_Q(ha, t, l);
++                      fcport = lq->fclun->fcport;
++
++                      if (fcport->flags & FC_FABRIC_DEVICE) {
++                              qla2x00_fabric_logout(ha,
++                                              ha->fc_db[t].loop_id & 0xff);
++                              ha->fc_db[t].flag |= DEV_RELOGIN;
++                              qla2x00_mark_device_lost(ha, fcport);
++                      }
++              }
++#endif
++
++              spin_lock_irq(ha->host->host_lock);
++      } else {
++              /*
++               * Wait a while for the loop to come back. Return SUCCESS
++               * for the kernel to try again.
++               */
++              spin_unlock_irq(ha->host->host_lock);
++
++              set_current_state(TASK_INTERRUPTIBLE);
++              schedule_timeout(5 * HZ);
++
++              spin_lock_irq(ha->host->host_lock);
++
++              return_status = SUCCESS;
++      }
++
++      if (return_status == FAILED) {
++              DEBUG2(printk("%s() Exiting: Reset Failed\n", __func__);)
++              return (FAILED);
++      }
++
++      /* Waiting for all commands to complete for the device */
++      if (qla2x00_eh_wait_for_pending_target_commands(ha, t))
++              return_status = FAILED;
++
++      if (return_status == FAILED) {
++              printk(KERN_INFO "%s() Exiting: status = Failed\n", __func__);
++              return (FAILED);
++      }
++
++      LEAVE(__func__);
++
++      return (return_status);
++}
++
++/**************************************************************************
++* qla2x00_eh_wait_for_pending_commands
++*
++* Description:
++*    Waits for all the commands to come back from the specified host.
++*
++* Input:
++*    ha - pointer to scsi_qla_host structure.
++*
++* Returns:
++*    1 : SUCCESS
++*    0 : FAILED
++*
++* Note:
++**************************************************************************/
++int
++qla2x00_eh_wait_for_pending_commands(scsi_qla_host_t *ha)
++{
++      int     cnt;
++      int     status;
++      unsigned long   flags;
++      srb_t           *sp;
++      Scsi_Cmnd       *cmd;
++
++      status = 1;
++
++      /*
++       * Waiting for all commands for the designated target in the active
++       * array
++       */
++      for (cnt = 1; cnt < MAX_OUTSTANDING_COMMANDS; cnt++) {
++              spin_lock_irqsave(&ha->hardware_lock, flags);
++              sp = ha->outstanding_cmds[cnt];
++              if (sp) {
++                      cmd = sp->cmd;
++                      spin_unlock_irqrestore(&ha->hardware_lock, flags);
++                              status = qla2x00_eh_wait_on_command(ha, cmd);
++              }
++              else {
++                      spin_unlock_irqrestore(&ha->hardware_lock, flags);
++              }
++      }
++      return (status);
++}
++
++
++/**************************************************************************
++* qla2xxx_eh_bus_reset
++*
++* Description:
++*    The bus reset function will reset the bus and abort any executing
++*    commands.
++*
++* Input:
++*    cmd = Linux SCSI command packet of the command that cause the
++*          bus reset.
++*
++* Returns:
++*    SUCCESS/FAILURE (defined as macro in scsi.h).
++*
++**************************************************************************/
++int
++qla2xxx_eh_bus_reset(Scsi_Cmnd *cmd)
++{
++      int        return_status = SUCCESS;
++      uint32_t   b, t, l;
++      srb_t      *sp;
++      int     found;
++      struct list_head *hal;
++      scsi_qla_host_t *ha, *search_ha;
++
++
++      ENTER("qla2xxx_eh_bus_reset");
++
++      if (cmd == NULL) {
++              printk(KERN_INFO
++                      "%s(): **** SCSI mid-layer passing in NULL cmd\n",
++                      __func__);
++                DEBUG2(BUG();)
++
++              return (FAILED);
++      }
++
++      b = SCSI_BUS_32(cmd);
++      t = SCSI_TCN_32(cmd);
++      l = SCSI_LUN_32(cmd);
++
++      ha = (scsi_qla_host_t *) cmd->device->host->hostdata;
++      ha->eh_start=0;
++      sp = (srb_t *) CMD_SP(cmd);
++
++      if (ha == NULL) {
++              printk(KERN_INFO
++                      "%s(): **** CMD derives a NULL HA\n",
++                      __func__);
++                DEBUG2(BUG();)
++
++              return (FAILED);
++      }
++
++      found = 0;
++      read_lock(&qla_hostlist_lock);
++      list_for_each(hal, &qla_hostlist) {
++              search_ha = list_entry(hal, scsi_qla_host_t, list);
++
++              if (search_ha == ha) {
++                      found ++;
++                      break;
++              }
++      }
++      read_unlock(&qla_hostlist_lock);
++
++      if (!found) {
++              printk(KERN_INFO
++                      "%s(): **** CMD derives a NULL search HA\n",
++                      __func__);
++                DEBUG2(BUG();)
++
++              return (FAILED);
++      }
++
++#if  STOP_ON_RESET
++      printk("Resetting the Bus= 0x%x\n", (int)cmd);
++      qla2x00_print_scsi_cmd(cmd);
++      qla2x00_panic("qla2100_reset", ha->host);
++#endif
++
++      if (qla2x00_verbose)
++              printk(KERN_INFO
++                      "scsi(%ld:%d:%d:%d): LOOP RESET ISSUED.\n",
++                      ha->host_no, (int)b, (int)t, (int)l);
++
++      if (!((test_bit(ABORT_ISP_ACTIVE, &ha->dpc_flags)) ||
++              (test_bit(ISP_ABORT_NEEDED, &ha->dpc_flags)) ||
++              (!atomic_read(&ha->loop_down_timer) &&
++               ha->loop_state == LOOP_DOWN)||
++              test_bit(CFG_ACTIVE, &ha->cfg_flags) ||
++              ha->loop_state != LOOP_READY)) {
++
++              clear_bit(LOOP_RESET_NEEDED, &ha->dpc_flags);
++              spin_unlock_irq(ha->host->host_lock);
++
++              if (qla2x00_loop_reset(ha) != 0) {
++                      return_status = FAILED;
++              }
++              spin_lock_irq(ha->host->host_lock);
++      } else {
++              /*
++               * Wait a while for the loop to come back. Return SUCCESS
++               * for the kernel to try again.
++               */
++              spin_unlock_irq(ha->host->host_lock);
++
++              set_current_state(TASK_INTERRUPTIBLE);
++              schedule_timeout(5 * HZ);
++
++              spin_lock_irq(ha->host->host_lock);
++
++              return_status = SUCCESS;
++      }
++
++      if (return_status == FAILED) {
++              DEBUG2(printk("qla2xxx_eh_bus_reset Exiting: Reset Failed\n");)
++              printk("qla2xxx_eh_bus_reset Exiting: Reset Failed\n");
++              return FAILED;
++      }
++
++      /* Blocking Call. It goes to sleep waiting for cmd to get to done q */
++       /* Waiting for our command in done_queue to be returned to OS.*/
++
++      if ( qla2x00_eh_wait_for_pending_commands(ha) == 0) {
++              return_status = FAILED;
++      }
++
++      if(return_status == FAILED) {
++              printk(KERN_INFO "qla2xxx_eh_bus_reset Exiting: status=Failed\n");
++              return FAILED;
++      } else
++              printk(KERN_INFO "qla2xxx_eh_bus_reset Exiting: status=SUCCESS\n");
++
++      LEAVE("qla2xxx_eh_bus_reset");
++
++      return (return_status);
++}
++
++/**************************************************************************
++* qla2xxx_eh_host_reset
++*
++* Description:
++*    The reset function will reset the Adapter.
++*
++* Input:
++*      cmd = Linux SCSI command packet of the command that cause the
++*            adapter reset.
++*
++* Returns:
++*      Either SUCCESS or FAILED.
++*
++* Note:
++**************************************************************************/
++int
++qla2xxx_eh_host_reset(Scsi_Cmnd *cmd)
++{
++      int             return_status = SUCCESS;
++      srb_t           *sp;
++      uint32_t        b, t, l;
++      int     found;
++      struct list_head *hal;
++      scsi_qla_host_t *ha, *search_ha;
++
++      ENTER("qla2xxx_eh_host_reset");
++
++      if (cmd == NULL) {
++              printk(KERN_INFO
++                      "%s(): **** SCSI mid-layer passing in NULL cmd\n",
++                      __func__);
++                DEBUG2(BUG();)
++
++              return (FAILED);
++      }
++
++      ha = (scsi_qla_host_t *)cmd->device->host->hostdata;
++      ha->eh_start= 0;
++      /* Find actual ha */
++      sp = (srb_t *)CMD_SP(cmd);
++      if (ha->flags.failover_enabled && sp != NULL)
++              ha = sp->ha;
++      else
++              ha = (scsi_qla_host_t *)cmd->device->host->hostdata;
++
++      if (ha == NULL) {
++              printk(KERN_INFO
++                      "%s(): **** CMD derives a NULL HA\n",
++                      __func__);
++                DEBUG2(BUG();)
++
++              return (FAILED);
++      }
++
++      found = 0;
++      read_lock(&qla_hostlist_lock);
++      list_for_each(hal, &qla_hostlist) {
++              search_ha = list_entry(hal, scsi_qla_host_t, list);
++
++              if (search_ha == ha) {
++                      found ++;
++                      break;
++              }
++      }
++      read_unlock(&qla_hostlist_lock);
++
++      if (!found) {
++              printk(KERN_INFO
++                      "%s(): **** CMD derives a NULL search HA\n",
++                      __func__);
++                DEBUG2(BUG();)
++
++              return (FAILED);
++      }
++
++      /* Display which one we're actually resetting for debug. */
++      DEBUG(printk("qla2xxx_eh_host_reset: entered for scsi%ld. "
++                      "Resetting host_no %ld.\n", 
++                      ((scsi_qla_host_t *)cmd->device->host->hostdata)->host_no,
++                      ha->host_no));
++
++#if  STOP_ON_RESET
++      printk("Host Reset...  Command=\n");
++      qla2x00_print_scsi_cmd(cmd);
++      qla2x00_panic("qla2xxx_eh_host_reset", ha->host);
++#endif
++
++      /*
++       *  Now issue reset.
++       */
++      b = SCSI_BUS_32(cmd);
++      t = SCSI_TCN_32(cmd);
++      l = SCSI_LUN_32(cmd);
++
++      if (qla2x00_verbose) {
++              printk(KERN_INFO
++                      "scsi(%ld:%d:%d:%d): now issue ADAPTER RESET.\n",
++                      ((scsi_qla_host_t *)cmd->device->host->hostdata)->host_no,
++                      (int)b, 
++                      (int)t, 
++                      (int)l);
++      }
++
++      DEBUG2(printk(KERN_INFO
++          "scsi(%ld:%d:%d:%d): now issue ADAPTER RESET.\n",
++          ((scsi_qla_host_t *)cmd->device->host->hostdata)->host_no,
++          (int)b, (int)t, (int)l));
++
++      if (!(test_bit(ABORT_ISP_ACTIVE, &ha->dpc_flags))) {
++              set_bit(ABORT_ISP_ACTIVE, &ha->dpc_flags);
++
++              spin_unlock_irq(ha->host->host_lock);
++
++              if (qla2x00_abort_isp(ha, 1)) {
++                      /* failed. try later */
++                      set_bit(ISP_ABORT_NEEDED, &ha->dpc_flags);
++                      return_status = FAILED;
++
++                      DEBUG2(printk(KERN_WARNING
++                          "scsi(%ld:%d:%d:%d): ha %ld ADAPTER RESET "
++                          "failed. Scheduled retry later.\n",
++                          ((scsi_qla_host_t *)cmd->device->host->hostdata)->host_no,
++                          (int)b, (int)t, (int)l, ha->host_no);)
++              } else {
++                      return_status = SUCCESS;
++              }
++
++              spin_lock_irq(ha->host->host_lock);
++
++              clear_bit(ABORT_ISP_ACTIVE, &ha->dpc_flags);
++      } else {
++              /*
++               * Already active. Sleep a while then return SUCCESS for kernel
++               * to retry the IO.
++               */
++              spin_unlock_irq(ha->host->host_lock);
++
++              set_current_state(TASK_INTERRUPTIBLE);
++              schedule_timeout(5 * HZ);
++
++              spin_lock_irq(ha->host->host_lock);
++
++              return_status = SUCCESS;
++      }
++      if ( return_status == FAILED) {
++              DEBUG2(printk("qla2xxx_eh_host_reset Exiting: Reset Failed\n");)
++              return FAILED;
++      }
++
++      /* Waiting for our command in done_queue to be returned to OS.*/
++      if ( qla2x00_eh_wait_for_pending_commands(ha) == 0) {
++              return_status = FAILED;
++      }
++
++      if(return_status == FAILED) {
++              printk(KERN_INFO "qla2xxx_eh_host_reset Exiting: status=Failed\n");
++              return FAILED;
++      } else
++              printk(KERN_INFO "qla2xxx_eh_host_reset Exiting: status=SUCCESS\n");
++
++      LEAVE("qla2xxx_eh_host_reset");
++
++      return(return_status);
++}
++
++
++/*
++* qla2x00_loop_reset
++*      Issue loop reset.
++*
++* Input:
++*      ha = adapter block pointer.
++*
++* Returns:
++*      0 = success
++*/
++static uint8_t
++qla2x00_loop_reset(scsi_qla_host_t *ha)
++{
++      uint8_t  status = QL_STATUS_SUCCESS;
++      uint16_t t;
++      os_tgt_t        *tq;
++
++      ENTER(__func__);
++
++      if (ha->flags.enable_lip_reset) {
++              status = qla2x00_lip_reset(ha);
++      }
++
++      if (status == QL_STATUS_SUCCESS && ha->flags.enable_target_reset) {
++              for (t = 0; t < MAX_FIBRE_DEVICES; t++) {
++                      if ((tq = TGT_Q(ha, t)) == NULL)
++                              continue;
++
++                      if (tq->vis_port == NULL)
++                              continue;
++
++                      status = qla2x00_target_reset(ha, 0, t);
++                      if (status != QL_STATUS_SUCCESS) {
++                              break;
++                      }
++              }
++      }
++
++      if (status == QL_STATUS_SUCCESS &&
++              ((!ha->flags.enable_target_reset && 
++                !ha->flags.enable_lip_reset) ||
++              ha->flags.enable_lip_full_login)) {
++
++              status = qla2x00_full_login_lip(ha);
++      }
++
++      /* Issue marker command only when we are going to start the I/O */
++      ha->marker_needed = 1;
++
++      if (status) {
++              /* Empty */
++              DEBUG2_3(printk("%s(%ld): **** FAILED ****\n",
++                              __func__,
++                              ha->host_no);)
++      } else {
++              /* Empty */
++              DEBUG3(printk("%s(%ld): exiting normally.\n",
++                              __func__,
++                              ha->host_no);)
++      }
++
++      LEAVE(__func__);
++
++      return(status);
++}
++
++/*
++ * qla2x00_device_reset
++ *    Issue bus device reset message to the target.
++ *
++ * Input:
++ *    ha = adapter block pointer.
++ *    t = SCSI ID.
++ *    TARGET_QUEUE_LOCK must be released.
++ *    ADAPTER_STATE_LOCK must be released.
++ *
++ * Context:
++ *    Kernel context.
++ */
++static int
++qla2x00_device_reset(scsi_qla_host_t *vis_ha, uint16_t tgt, uint16_t lun)
++{
++#if !USE_ABORT_TGT
++      uint16_t        l;
++      fc_port_t       *fcport;
++#endif
++      os_lun_t        *lq;
++      uint8_t         status = 0;
++
++      ENTER(__func__);
++
++#if USE_ABORT_TGT
++      /* Abort Target command will clear Reservation */
++      lq = GET_LU_Q(vis_ha, tgt, lun);
++      if (lq && lq->fclun)
++               status = qla2x00_abort_target(lq->fclun->fcport);
++#else
++      /* Abort Device command will not clear Reservation */
++      for (l = 0; l < MAX_LUNS; l++) {
++              lq = GET_LU_Q(vis_ha, tgt, l);
++              if (lq == NULL)
++                      continue;
++
++              fcport = lq->fclun->fcport;
++              if (LOOP_RDY(fcport->ha)) {
++                      qla2x00_abort_device(fcport->ha, 
++                                      fcport->loop_id,
++                                      lq->fclun->lun);
++              }
++      }
++#endif
++
++      LEAVE(__func__);
++
++      return( status );
++}
++
++/**************************************************************************
++* qla1200_biosparam
++*
++* Description:
++*   Return the disk geometry for the given SCSI device.
++**************************************************************************/
++int
++qla2x00_biosparam(struct scsi_device *sdev,
++    struct block_device *bdev, sector_t capacity, int geom[])
++{
++      int heads, sectors, cylinders;
++
++      heads = 64;
++      sectors = 32;
++      cylinders = (unsigned long)capacity / (heads * sectors);
++      if (cylinders > 1024) {
++              heads = 255;
++              sectors = 63;
++              cylinders = (unsigned long)capacity / (heads * sectors);
++      }
++
++      geom[0] = heads;
++      geom[1] = sectors;
++      geom[2] = cylinders;
++
++      return (0);
++}
++
++/**************************************************************************
++ * qla2x00_slave_configure
++ *   Determines the queue depth for a given device.  There are two ways
++ *   a queue depth can be obtained for a tagged queueing device.  One
++ *   way is the default queue depth which is determined by whether
++ *   If it is defined, then it is used
++ *   as the default queue depth.  Otherwise, we use either 4 or 8 as the
++ *   default queue depth (dependent on the number of hardware SCBs).
++ **************************************************************************/
++int
++qla2xxx_slave_configure(Scsi_Device * device)
++{
++      int queue_depth = 64;
++
++      if (device->tagged_supported) {
++#if defined(MODULE)
++              if (!(ql2xmaxqdepth == 0 || ql2xmaxqdepth > 256))
++                      queue_depth = ql2xmaxqdepth;
++#endif 
++              ql2xmaxqdepth = queue_depth;
++
++              scsi_adjust_queue_depth(device, MSG_ORDERED_TAG, queue_depth);
++
++              printk(KERN_INFO
++                  "scsi(%d:%d:%d:%d): Enabled tagged queuing, queue "
++                  "depth %d.\n",
++                  device->host->host_no,
++                  device->channel, device->id, device->lun,
++                  device->queue_depth);
++      } else {
++               scsi_adjust_queue_depth(device, 0 /* TCQ off */,
++                   device->host->hostt->cmd_per_lun /* 3 */);
++      }
++
++      return (0);
++}
++
++/*
++ * PCI driver interface
++ */
++static int __devinit
++qla_probe_device(struct pci_dev *pdev, const struct pci_device_id *ent)
++{
++      device_reg_t    *reg;
++      struct Scsi_Host *host;
++      scsi_qla_host_t *ha;
++      unsigned long           flags = 0;
++      unsigned long           wait_switch = 0;
++
++      if (pci_enable_device(pdev))
++              return -1;
++
++      printk(KERN_INFO
++          "qla2x00: Found VID=%x DID=%x SSVID=%x SSDID=%x\n",
++          pdev->vendor, pdev->device,
++          pdev->subsystem_vendor, pdev->subsystem_device);
++
++      if (ql2xfailover) {
++              sprintf(qla2x00_version_str, "%s-fo", QLA2100_VERSION);
++      } else {
++              sprintf(qla2x00_version_str, "%s", QLA2100_VERSION);
++      }
++
++      host = scsi_register(&qla2x00_driver_template, sizeof(scsi_qla_host_t));
++      if (host == NULL) {
++              printk(KERN_WARNING
++                  "qla2x00: Couldn't register with scsi layer!\n");
++              return -1;
++      }
++
++      /* Clear our data area */
++      ha = (scsi_qla_host_t *)host->hostdata;
++      memset(ha, 0, sizeof(scsi_qla_host_t));
++
++      ha->host_no = host->host_no;
++      ha->host = host;
++
++      /* Sanitize the information from PCI BIOS. */
++      host->irq = pdev->irq;
++      host->io_port = pci_resource_start(pdev, 0);
++      ha->pdev = pdev;
++      scsi_set_device(host, &pdev->dev);
++
++      ha->brd_info = (struct qla_board_info *)ent->driver_data;
++
++      if (qla2x00_verbose) {
++              printk(KERN_INFO
++                  "scsi(%d): Found a %s @ bus %d, device 0x%x, irq %d, "
++                  "iobase 0x%lx\n",
++                  host->host_no,
++                  ha->brd_info->name,
++                  ha->pdev->bus->number,
++                  PCI_SLOT(ha->pdev->devfn),
++                  host->irq, host->io_port);
++      }
++
++      ha->iobase = (device_reg_t *) host->io_port;
++
++      spin_lock_init(&ha->hardware_lock);
++
++      /* 4.23 Initialize /proc/scsi/qla2x00 counters */
++      ha->actthreads = 0;
++      ha->qthreads   = 0;
++      ha->dump_done  = 0;
++      ha->total_isr_cnt = 0;
++      ha->total_isp_aborts = 0;
++      ha->total_lip_cnt = 0;
++      ha->total_dev_errs = 0;
++      ha->total_ios = 0;
++      ha->total_bytes = 0;
++
++      if (qla2x00_mem_alloc(ha)) {
++              printk(KERN_WARNING
++                  "scsi(%d): [ERROR] Failed to allocate memory for adapter\n",
++                  host->host_no);
++
++              qla2x00_mem_free(ha);
++
++              scsi_unregister(host);
++
++              return -1;
++      }
++
++      ha->prev_topology = 0;
++      ha->ports = MAX_BUSES;
++
++#if defined(ISP2100)
++      ha->max_targets = MAX_TARGETS_2100;
++#else
++      ha->max_targets = MAX_TARGETS_2200;
++#endif
++
++      /* load the F/W, read paramaters, and init the H/W */
++      ha->instance = num_hosts;
++
++      init_MUTEX_LOCKED(&ha->mbx_intr_sem);
++
++      INIT_LIST_HEAD(&ha->list);
++      INIT_LIST_HEAD(&ha->fcports);
++      INIT_LIST_HEAD(&ha->fcinitiators);
++      INIT_LIST_HEAD(&ha->done_queue);
++      INIT_LIST_HEAD(&ha->retry_queue);
++      INIT_LIST_HEAD(&ha->scsi_retry_queue);
++      INIT_LIST_HEAD(&ha->failover_queue);
++      INIT_LIST_HEAD(&ha->pending_queue);
++
++      if (ql2xfailover)
++              ha->flags.failover_enabled = 1;
++      else
++              ha->flags.failover_enabled = 0;
++
++      INIT_WORK(&ha->run_qla_task, qla2x00_done_work, (void *) ha);
++
++      /*
++       * These locks are used to prevent more than one CPU
++       * from modifying the queue at the same time. The
++       * higher level "io_request_lock" will reduce most
++       * contention for these locks.
++       */
++      spin_lock_init(&ha->mbx_bits_lock);
++      spin_lock_init(&ha->mbx_reg_lock);
++      spin_lock_init(&ha->mbx_q_lock);
++      spin_lock_init(&ha->list_lock);
++
++      if (qla2x00_initialize_adapter(ha) &&
++          !(ha->device_flags & DFLG_NO_CABLE)) {
++
++              printk(KERN_WARNING
++                  "scsi(%ld): Failed to initialize adapter\n", ha->host_no);
++
++              DEBUG2(printk("scsi(%ld): Failed to initialize adapter - "
++                  "Adapter flags %x.\n",
++                  ha->host_no, ha->device_flags));
++
++              qla2x00_mem_free(ha);
++
++              scsi_unregister(host);
++
++              return -1;
++      }
++
++      /*
++       * Startup the kernel thread for this host adapter
++       */
++      init_completion(&ha->dpc_inited);
++      init_completion(&ha->dpc_exited);
++
++      ha->dpc_should_die = 0;
++      ha->dpc_pid = kernel_thread(qla2x00_do_dpc, ha, 0);
++      if (ha->dpc_pid < 0) {
++              printk(KERN_WARNING
++                  "scsi(%ld): Unable to start DPC thread!\n", ha->host_no);
++
++              qla2x00_mem_free(ha);
++
++              scsi_unregister(host);
++
++              return -1;
++      }
++      wait_for_completion(&ha->dpc_inited);
++
++      /*  Mark preallocated Loop IDs in use. */
++      ha->fabricid[SNS_FL_PORT].in_use = TRUE;
++      ha->fabricid[FABRIC_CONTROLLER].in_use = TRUE;
++      ha->fabricid[SIMPLE_NAME_SERVER].in_use = TRUE;
++
++      /* Register our resources with Linux */
++      if (qla2x00_register_with_Linux(ha, ha->ports - 1)) {
++              printk(KERN_WARNING
++                  "scsi(%ld): Failed to register resources.\n",
++                  ha->host_no);
++
++              qla2x00_mem_free(ha);
++
++              scsi_unregister(host);
++
++              return -1;
++      }
++
++      DEBUG2(printk("DEBUG: detect hba %ld at address = %p\n",
++          ha->host_no, ha));
++
++      reg = ha->iobase;
++
++      /* Disable ISP interrupts. */
++      qla2x00_disable_intrs(ha);
++
++      /* Ensure mailbox registers are free. */
++      spin_lock_irqsave(&ha->hardware_lock, flags);
++      WRT_REG_WORD(&reg->semaphore, 0);
++      WRT_REG_WORD(&reg->hccr, HCCR_CLR_RISC_INT);
++      WRT_REG_WORD(&reg->hccr, HCCR_CLR_HOST_INT);
++
++      /* Enable proper parity */
++#if defined(ISP2300)
++      if (ha->pdev->device == QLA2312_DEVICE_ID ||
++          ha->pdev->device == QLA2322_DEVICE_ID)
++              /* SRAM, Instruction RAM and GP RAM parity */
++              WRT_REG_WORD(&reg->hccr, (HCCR_ENABLE_PARITY + 0x7));
++      else
++              /* SRAM parity */
++              WRT_REG_WORD(&reg->hccr, (HCCR_ENABLE_PARITY + 0x1));
++#endif
++      spin_unlock_irqrestore(&ha->hardware_lock, flags);
++
++      /*
++       * if failover is enabled read the user configuration
++       */
++      if (ha->flags.failover_enabled) {
++              if (ConfigRequired > 0)
++                      mp_config_required = 1;
++              else
++                      mp_config_required = 0;
++
++              DEBUG(printk("qla2x00_detect: qla2x00_cfg_init for hba %ld\n",
++                  ha->instance));
++
++              qla2x00_cfg_init(ha);
++      }
++
++      /* Enable chip interrupts. */
++      qla2x00_enable_intrs(ha);
++
++      /* Insert new entry into the list of adapters */
++      write_lock(&qla_hostlist_lock);
++      list_add_tail(&ha->list, &qla_hostlist);
++      write_unlock(&qla_hostlist_lock);
++
++      /* v2.19.5b6 */
++      /*
++       * Wait around max loop_reset_delay secs for the devices to come
++       * on-line. We don't want Linux scanning before we are ready.
++       *
++       */
++      for (wait_switch = jiffies + (ha->loop_reset_delay * HZ);
++          time_before(jiffies,wait_switch) &&
++           !(ha->device_flags & (DFLG_NO_CABLE | DFLG_FABRIC_DEVICES))
++           && (ha->device_flags & SWITCH_FOUND) ;) {
++
++              qla2x00_check_fabric_devices(ha);
++
++              set_current_state(TASK_INTERRUPTIBLE);
++              schedule_timeout(5);
++      }
++
++      /* List the target we have found */
++      if (displayConfig && (!ha->flags.failover_enabled))
++              qla2x00_display_fc_names(ha);
++
++      pci_set_drvdata(pdev, ha);
++      ha->init_done = 1;
++      num_hosts++;
++
++      if (displayConfig && ha->flags.failover_enabled)
++              qla2x00_cfg_display_devices();
++
++      return 0;
++}
++
++static void __devexit
++qla_remove_device(struct pci_dev *pdev)
++{
++      struct list_head *hal, *temp;
++      scsi_qla_host_t *ha, *iter_ha;
++
++      ha = pci_get_drvdata(pdev);
++
++      /* Sanity check -- make sure the entry is in our list */
++      write_lock(&qla_hostlist_lock);
++      list_for_each_safe(hal, temp, &qla_hostlist) {
++              iter_ha = list_entry(hal, scsi_qla_host_t, list);
++                                               
++              if (iter_ha == ha) {
++                      list_del(&ha->list);
++                      qla2x00_free_device(ha);
++                      break;
++              }
++      }
++      write_unlock(&qla_hostlist_lock);
++}
++
++static void
++qla2x00_free_device(scsi_qla_host_t *ha)
++{
++      int ret;
++      struct Scsi_Host *host;
++
++      host = ha->host;
++
++      /* turn-off interrupts on the card */
++      if (ha->interrupts_on)
++              qla2x00_disable_intrs(ha);
++
++      /* Detach interrupts */
++      if (host->irq)
++              free_irq(host->irq, ha);
++
++      /* release io space registers  */
++      if (host->io_port)
++              release_region(host->io_port, 0xff);
++
++      /* Disable timer */
++      if (ha->timer_active)
++              qla2x00_stop_timer(ha);
++
++      /* Kill the kernel thread for this host */
++      if (ha->dpc_pid >= 0) {
++              ha->dpc_should_die = 1;
++              wmb();
++              ret = kill_proc(ha->dpc_pid, SIGTERM, 1);
++              if (ret) {
++                      printk(KERN_ERR
++                          "scsi(%ld): Unable to signal DPC thread -- (%d)\n",
++                          ha->host_no, ret);
++
++                      /* TODO: SOMETHING MORE??? */
++              } else {
++                      wait_for_completion(&ha->dpc_exited);
++              }
++      }
++
++#if MEMORY_MAPPED_IO
++      if (ha->mmpbase) {
++              iounmap((void *) (((unsigned long) ha->mmpbase) & PAGE_MASK));
++      }
++#endif
++
++      apidev_cleanup();
++
++      qla2x00_mem_free(ha);
++
++      if (ha->flags.failover_enabled)
++              qla2x00_cfg_mem_free(ha);
++
++      ha->flags.online = FALSE;
++
++      scsi_unregister(host);
++}
++
++
++/*
++ * The following support functions are adopted to handle
++ * the re-entrant qla2x00_proc_info correctly.
++ */
++static void
++copy_mem_info(struct info_str *info, char *data, int len)
++{
++      if (info->pos + len > info->offset + info->length)
++              len = info->offset + info->length - info->pos;
++
++      if (info->pos + len < info->offset) {
++              info->pos += len;
++              return;
++      }
++ 
++      if (info->pos < info->offset) {
++              off_t partial;
++ 
++              partial = info->offset - info->pos;
++              data += partial;
++              info->pos += partial;
++              len  -= partial;
++      }
++ 
++      if (len > 0) {
++              memcpy(info->buffer, data, len);
++              info->pos += len;
++              info->buffer += len;
++      }
++}
++
++static int
++copy_info(struct info_str *info, char *fmt, ...)
++{
++      va_list args;
++      char buf[256];
++      int len;
++ 
++      va_start(args, fmt);
++      len = vsprintf(buf, fmt, args);
++      va_end(args);
++ 
++      copy_mem_info(info, buf, len);
++
++      return (len);
++}
++
++/*************************************************************************
++* qla2x00_proc_info
++*
++* Description:
++*   Return information to handle /proc support for the driver.
++*
++* inout : decides the direction of the dataflow and the meaning of the
++*         variables
++* buffer: If inout==FALSE data is being written to it else read from it
++*         (ptr to a page buffer)
++* *start: If inout==FALSE start of the valid data in the buffer
++* offset: If inout==FALSE starting offset from the beginning of all
++*         possible data to return.
++* length: If inout==FALSE max number of bytes to be written into the buffer
++*         else number of bytes in "buffer"
++* Returns:
++*         < 0:  error. errno value.
++*         >= 0: sizeof data returned.
++*************************************************************************/
++int
++qla2x00_proc_info(char *buffer,
++    char **start, off_t offset, int length, int hostno, int inout)
++{
++      struct Scsi_Host *host;
++      struct info_str info;
++      int             i;
++      int             retval = -EINVAL;
++      os_lun_t        *up;
++      uint32_t        t, l;
++      uint32_t        tmp_sn;
++      unsigned long   *flags;
++      struct list_head *list, *temp;
++      unsigned long   cpu_flags;
++      uint8_t         *loop_state;
++#if REQ_TRACE
++      Scsi_Cmnd       *cp;
++      srb_t           *sp;
++#endif
++      int     found;
++      struct list_head *hal;
++      scsi_qla_host_t *ha;
++
++      DEBUG3(printk(KERN_INFO
++          "Entering proc_info buff_in=%p, offset=0x%lx, length=0x%x, "
++          "hostno=%d\n", buffer, offset, length, hostno);)
++
++      ha = NULL;
++      host = NULL;
++
++      /* Find the host that was specified */
++      found = 0;
++      read_lock(&qla_hostlist_lock);
++      list_for_each(hal, &qla_hostlist) {
++              ha = list_entry(hal, scsi_qla_host_t, list);
++
++              if (ha->host->host_no == hostno) {
++                      found++;
++                      break;
++              }
++      }
++      read_unlock(&qla_hostlist_lock);
++
++      /* if host wasn't found then exit */
++      if (!found) {
++              DEBUG2_3(printk(KERN_WARNING
++                  "%s: Can't find adapter for host number %d\n", 
++                  __func__, hostno);)
++
++              return (retval);
++      }
++
++      host = ha->host;
++
++      if (inout == TRUE) {
++              /* Has data been written to the file? */
++              DEBUG3(printk(
++                  "%s: has data been written to the file. \n",
++                  __func__);)
++              return (qla2x00_set_info(buffer, length, host));
++      }
++
++      if (start) {
++              *start = buffer;
++      }
++
++      info.buffer = buffer;
++      info.length = length;
++      info.offset = offset;
++      info.pos    = 0;
++
++      /* start building the print buffer */
++      copy_info(&info,
++          "QLogic PCI to Fibre Channel Host Adapter for " ISP_NAME ":\n"
++          "        Firmware version: %2d.%02d.%02d ",
++          ha->fw_major_version, 
++          ha->fw_minor_version, 
++          ha->fw_subminor_version);
++
++      switch (ha->fw_attributes & 0xFF) {
++      case 0x7:
++              copy_info(&info, "EF");
++              break;
++      case 0x17:
++              copy_info(&info, "TP");
++              break;
++      case 0x37:
++              copy_info(&info, "IP");
++              break;
++      case 0x77:
++              copy_info(&info, "VI");
++              break;
++      default:
++              copy_info(&info, "(%x)", ha->fw_attributes);
++              break;
++      }
++      if (ha->fw_attributes & 0x100)
++              copy_info(&info, "X");
++      copy_info(&info, ", ");
++
++      copy_info(&info, "Driver version %s\n", qla2x00_version_str);
++
++      copy_info(&info, "Entry address = %p\n", qla2x00_set_info);
++
++      tmp_sn = ((ha->serial0 & 0x1f) << 16) | (ha->serial2 << 8) | 
++          ha->serial1;
++      copy_info(&info, "HBA: %s, Serial# %c%05d\n",
++          ha->brd_info->name, ('A' + tmp_sn/100000), (tmp_sn%100000));
++
++      copy_info(&info,
++          "Request Queue = 0x%lx, Response Queue = 0x%lx\n",
++          (long unsigned int)ha->request_dma,
++          (long unsigned int)ha->response_dma);
++
++      copy_info(&info,
++          "Request Queue count= %ld, Response Queue count= %ld\n",
++          (long)REQUEST_ENTRY_CNT, (long)RESPONSE_ENTRY_CNT);
++
++      copy_info(&info,
++          "Total number of active commands = %ld\n",
++          ha->actthreads);
++
++      copy_info(&info,
++          "Total number of interrupts = %ld\n",
++          (long)ha->total_isr_cnt);
++
++#if defined(FC_IP_SUPPORT)
++      copy_info(&info,
++          "Total number of active IP commands = %ld\n",
++          ha->ipreq_cnt);
++#endif
++
++#if defined(IOCB_THROLLE_USAGE)
++#if defined(IOCB_HIT_RATE)
++      copy_info(&info,
++          "Total number of IOCBs (used/max/#hit) "
++          "= (%d/%d/%d)\n",
++          (int)ha->iocb_cnt,
++          (int)ha->iocb_hiwat,
++          (int)ha->iocb_overflow_cnt);
++#else
++      copy_info(&info,
++          "Total number of IOCBs (used/max) "
++          "= (%d/%d)\n",
++          (int)ha->iocb_cnt, (int)ha->iocb_hiwat);
++#endif
++#endif
++
++
++      copy_info(&info,
++          "Total number of queued commands = %d\n",
++          (max_srbs - ha->srb_cnt));
++
++      copy_info(&info,
++          "    Device queue depth = 0x%x\n",
++          (ql2xmaxqdepth == 0) ? 16 : ql2xmaxqdepth);
++
++      copy_info(&info,
++          "Number of free request entries = %d\n", ha->req_q_cnt);
++
++      copy_info(&info,
++          "Number of mailbox timeouts = %ld\n",
++          qla2x00_stats.mboxtout);
++
++      copy_info(&info,
++          "Number of ISP aborts = %ld\n",qla2x00_stats.ispAbort);
++
++      copy_info(&info,
++          "Number of loop resyncs = %ld\n",
++          qla2x00_stats.loop_resync);
++
++      copy_info(&info,
++          "Number of retries for empty slots = %ld\n",
++          qla2x00_stats.outarray_full);
++
++      copy_info(&info,
++          "Number of reqs in pending_q= %ld, retry_q= %d, "
++          "done_q= %ld, scsi_retry_q= %d\n",
++          ha->qthreads, ha->retry_q_cnt,
++          ha->done_q_cnt, ha->scsi_retry_q_cnt);
++
++      if (ha->flags.failover_enabled) {
++              copy_info(&info,
++                  "Number of reqs in failover_q= %d\n",
++                  ha->failover_cnt);
++      }
++
++      flags = (unsigned long *) &ha->flags;
++
++      if (ha->loop_state == LOOP_DOWN) {
++              loop_state = "DOWN";
++      } else if (ha->loop_state ==LOOP_UP) {
++              loop_state = "UP";
++      } else if (ha->loop_state ==LOOP_READY) {
++              loop_state = "READY";
++      } else if (ha->loop_state ==LOOP_TIMEOUT) {
++              loop_state = "TIMEOUT";
++      } else if (ha->loop_state ==LOOP_UPDATE) {
++              loop_state = "UPDATE";
++      } else {
++              loop_state = "UNKNOWN";
++      }
++
++      copy_info(&info, 
++          "Host adapter:loop state= <%s>, flags= 0x%lx\n",
++          loop_state , *flags);
++
++      copy_info(&info, "Dpc flags = 0x%lx\n", ha->dpc_flags);
++
++      copy_info(&info, "MBX flags = 0x%x\n", ha->mbx_flags);
++
++      copy_info(&info, "SRB Free Count = %d\n", ha->srb_cnt);
++
++      copy_info(&info, "Port down retry = %3.3d\n",
++          ha->port_down_retry_count);
++
++      copy_info(&info, "Login retry count = %3.3d\n",
++          ha->login_retry_count);
++
++      copy_info(&info,
++          "Commands retried with dropped frame(s) = %d\n",
++          ha->dropped_frame_error_cnt);
++
++      copy_info(&info, "\n");
++
++#if REQ_TRACE
++      if (qla2x00_req_dmp) {
++              copy_info(&info,
++                  "Outstanding Commands on controller:\n");
++
++              for (i = 1; i < MAX_OUTSTANDING_COMMANDS; i++) {
++                      if ((sp = ha->outstanding_cmds[i]) == NULL) {
++                              continue;
++                      }
++
++                      if ((cp = sp->cmd) == NULL) {
++                              continue;
++                      }
++
++                      copy_info(&info, "(%d): Pid=%d, sp flags=0x%lx"
++                          ", cmd=0x%p, state=%d\n", 
++                          i, 
++                          (int)sp->cmd->serial_number, 
++                          (long)sp->flags,
++                          CMD_SP(sp->cmd),
++                          (int)sp->state);
++
++                      if (info.pos >= info.offset + info.length) {
++                              /* No need to continue */
++                              goto profile_stop;
++                      }
++              }
++      }
++#endif /* REQ_TRACE */
++
++      if (qla2x00_retryq_dmp) {
++              if (!list_empty(&ha->retry_queue)) {
++                      copy_info(&info,
++                          "qla%ld: Retry queue requests:\n",
++                          ha->host_no);
++
++                      spin_lock_irqsave(&ha->list_lock, cpu_flags);
++
++                      i = 0;
++                      list_for_each_safe(list, temp, &ha->retry_queue) {
++                              sp = list_entry(list, srb_t, list);
++                              t = SCSI_TCN_32(sp->cmd);
++                              l = SCSI_LUN_32(sp->cmd);
++
++                              copy_info(&info,
++                                  "%d: target=%d, lun=%d, "
++                                  "pid=%ld sp=%p, sp->flags=0x%x,"
++                                  "sp->state= %d\n", 
++                                  i, t, l, 
++                                  sp->cmd->serial_number, sp, 
++                                  sp->flags, sp->state );
++
++                              i++;
++
++                              if (info.pos >= info.offset + info.length) {
++                                      /* No need to continue */
++                                      goto profile_stop;
++                              }
++                      }
++
++                      spin_unlock_irqrestore(&ha->list_lock, cpu_flags);
++
++              } /* if (!list_empty(&ha->retry_queue))*/
++      } /* if ( qla2x00_retryq_dmp )  */
++
++      /* 2.25 node/port display to proc */
++      /* Display the node name for adapter */
++      copy_info(&info, "\nSCSI Device Information:\n");
++      copy_info(&info,
++          "scsi-qla%d-adapter-node="
++          "%02x%02x%02x%02x%02x%02x%02x%02x;\n",
++          (int)ha->instance,
++          ha->init_cb->node_name[0],
++          ha->init_cb->node_name[1],
++          ha->init_cb->node_name[2],
++          ha->init_cb->node_name[3],
++          ha->init_cb->node_name[4],
++          ha->init_cb->node_name[5],
++          ha->init_cb->node_name[6],
++          ha->init_cb->node_name[7]);
++
++      /* display the port name for adapter */
++      copy_info(&info,
++          "scsi-qla%d-adapter-port="
++          "%02x%02x%02x%02x%02x%02x%02x%02x;\n",
++          (int)ha->instance,
++          ha->init_cb->port_name[0],
++          ha->init_cb->port_name[1],
++          ha->init_cb->port_name[2],
++          ha->init_cb->port_name[3],
++          ha->init_cb->port_name[4],
++          ha->init_cb->port_name[5],
++          ha->init_cb->port_name[6],
++          ha->init_cb->port_name[7]);
++
++      /* Print out device port names */
++      for (i = 0; i < MAX_FIBRE_DEVICES; i++) {
++              if (ha->fc_db[i].loop_id == PORT_UNUSED) {
++                      continue;
++              }
++
++              if (ha->flags.failover_enabled) {
++                      copy_info(&info,
++                          "scsi-qla%d-port-%d="
++                          "%02x%02x%02x%02x%02x%02x%02x%02x:"
++                          "%02x%02x%02x%02x%02x%02x%02x%02x;\n",
++                          (int)ha->instance, i,
++                          ha->fc_db[i].name[0],
++                          ha->fc_db[i].name[1],
++                          ha->fc_db[i].name[2],
++                          ha->fc_db[i].name[3],
++                          ha->fc_db[i].name[4],
++                          ha->fc_db[i].name[5],
++                          ha->fc_db[i].name[6],
++                          ha->fc_db[i].name[7],
++                          ha->fc_db[i].wwn[0],
++                          ha->fc_db[i].wwn[1],
++                          ha->fc_db[i].wwn[2],
++                          ha->fc_db[i].wwn[3],
++                          ha->fc_db[i].wwn[4],
++                          ha->fc_db[i].wwn[5],
++                          ha->fc_db[i].wwn[6],
++                          ha->fc_db[i].wwn[7]);
++              } else {
++                      copy_info(&info,
++                          "scsi-qla%d-target-%d="
++                          "%02x%02x%02x%02x%02x%02x%02x%02x;\n",
++                          (int)ha->instance, i,
++                          ha->fc_db[i].wwn[0],
++                          ha->fc_db[i].wwn[1],
++                          ha->fc_db[i].wwn[2],
++                          ha->fc_db[i].wwn[3],
++                          ha->fc_db[i].wwn[4],
++                          ha->fc_db[i].wwn[5],
++                          ha->fc_db[i].wwn[6],
++                          ha->fc_db[i].wwn[7]);
++              }
++
++      } /* 2.25 node/port display to proc */
++
++      copy_info(&info, "\nSCSI LUN Information:\n");
++
++      copy_info(&info, "(Id:Lun)\n");
++
++      /* scan for all equipment stats */
++      for (t = 0; t < MAX_FIBRE_DEVICES; t++) {
++              /* scan all luns */
++              for (l = 0; l < ha->max_luns; l++) {
++                      up = (os_lun_t *) GET_LU_Q(ha, t, l);
++
++                      if (up == NULL) {
++                              continue;
++                      }
++                      if (up->fclun == NULL) {
++                              continue;
++                      }
++                      if (up->fclun->flags & FC_DISCON_LUN) {
++                              continue;
++                      }
++
++                      copy_info(&info,
++                          "(%2d:%2d): Total reqs %ld,",
++                          t,l,up->io_cnt);
++
++                      copy_info(&info,
++                          " Pending reqs %ld,",
++                          up->out_cnt);
++
++                      if (up->io_cnt < 3) {
++                              copy_info(&info,
++                                  " flags 0x%x*,",
++                                  (int)up->q_flag);
++                      } else {
++                              copy_info(&info,
++                                  " flags 0x%x,",
++                                  (int)up->q_flag);
++                      }
++
++                      copy_info(&info, 
++                          " %ld:%d:%02x,",
++                          up->fclun->fcport->ha->instance,
++                          up->fclun->fcport->cur_path,
++                          up->fclun->fcport->loop_id);
++
++                      copy_info(&info, "\n");
++
++                      if (info.pos >= info.offset + info.length) {
++                              /* No need to continue */
++                              goto profile_stop;
++                      }
++              }
++
++              if (info.pos >= info.offset + info.length) {
++                      /* No need to continue */
++                      break;
++              }
++      }
++
++profile_stop:
++
++      retval = info.pos > info.offset ? info.pos - info.offset : 0;
++
++      DEBUG3(printk(KERN_INFO 
++          "Exiting proc_info: info.pos=%d, offset=0x%lx, "
++          "length=0x%x\n", info.pos, offset, length);)
++
++#if QLA2100_LIPTEST
++      qla2x00_lip = 1;
++#endif
++
++      return (retval);
++}
++
++#if defined (CONFIG_SCSIFCHOTSWAP) || defined(CONFIG_GAMAP)
++union wwnmap {
++      unsigned long long wwn;
++      unsigned char wwn_u8[8];
++};
++
++int qla2x00_get_scsi_info_from_wwn (int mode,
++      unsigned long long wwn,
++      int *host,
++      int *channel,
++      int *lun,
++      int *id) {
++
++scsi_qla_host_t *list;
++Scsi_Device *scsi_device;
++union wwnmap wwncompare;
++union wwnmap wwncompare2;
++int i, j, k;
++
++      /*
++       * Retrieve big endian version of world wide name
++       */
++      wwncompare2.wwn = wwn;
++      for (j = 0, k=7; j < 8; j++, k--) {
++              wwncompare.wwn_u8[j] = wwncompare2.wwn_u8[k];
++      }
++
++      /*
++       * query all hosts searching for WWN
++       */
++      for (list = qla2x00_hostlist; list; list = list->next) {
++              for (i = 0; i < MAX_FIBRE_DEVICES; i++) {
++                      /*
++                       * Scan all devices in FibreChannel database
++                       * if WWN match found, return SCSI device information
++                       */
++                      if (memcmp (wwncompare.wwn_u8, list->fc_db[i].name, 8) == 0) {
++                              /*
++                               * If inserting, avoid scan for channel and lun information
++                               */
++                              if (mode == 0) {
++                                      *channel = 0;
++                                      *lun = 0;
++                                      *host = list->host->host_no;
++                                      *id = i;
++                                      return (0);
++                              }
++                      
++
++                              /*
++                               * WWN matches, find channel and lun information from scsi
++                               * device
++                               */
++                              for (scsi_device = list->host->host_queue; scsi_device; scsi_device = scsi_device->next) {
++                                      if (scsi_device->id == i) {
++                                              *channel = scsi_device->channel;
++                                              *lun = scsi_device->lun;
++                                              break;
++                                      }
++                              }
++                              if (scsi_device == 0) {
++                                      return (-ENOENT);
++                              }
++                              /*
++                               * Device found, return all data
++                               */
++                              *host = list->host->host_no;
++                              *id = i;
++                              return (0);
++                      } /* memcmp */
++              } /* i < MAXFIBREDEVICES */
++      }
++      return (-ENOENT);
++}
++
++int qla2x00_get_wwn_from_scsi_info (int host, int id, unsigned long long *wwn) {
++scsi_qla_host_t *list;
++union wwnmap wwnendian;
++union wwnmap wwnendian2;
++int j, k;
++
++      /*
++       * Examine all QLogic hosts
++       */
++      for (list = qla2x00_hostlist; list; list = list->next) {
++              if (host == list->host->host_no) {
++                      /*
++                       * Get endian corrected 64 bit WWN
++                       */
++
++                      memcpy (&wwnendian2.wwn, list->fc_db[id].name, 8);
++                      for (j = 0, k=7; j < 8; j++, k--) {
++                              wwnendian.wwn_u8[j] = wwnendian2.wwn_u8[k];
++                      }
++                      *wwn = wwnendian.wwn;
++                      return (0);
++              }
++      }
++      return (-ENOENT);
++}
++#endif /* CONFIG_SCSIFCHOTSWAP || CONFIG_GAMAP */
++
++/**************************************************************************
++*   qla2x00_setup
++*
++*   Handle Linux boot parameters. This routine allows for assigning a value
++*   to a parameter with a ';' between the parameter and the value.
++*   ie. qla2x00=arg0;arg1;...;argN;<properties .... properties>  OR
++*   via the command line.
++*   ie. qla2x00 ql2xopts=arg0;arg1;...;argN;<properties .... properties>
++**************************************************************************/
++#if !defined(MODULE)
++static int __init
++qla2x00_setup(char *s)
++#else
++void 
++qla2x00_setup(char *s)
++#endif        
++{
++      char            *cp, *np;
++      char            *slots[MAXARGS];
++      char            **argv = &slots[0];
++      static char     buf[LINESIZE];
++      int             argc, opts;
++
++#if !defined(MODULE)
++      if (s == NULL || *s == '\0')
++              return 0;
++#endif
++
++      /*
++       * Determine if we have any properties.
++       */
++      cp = s;
++      opts = 1;
++      while (*cp && (np = qla2x00_get_line(cp, buf)) != NULL) {
++              if (strncmp("scsi-qla",buf,8) == 0) {
++                      DEBUG(printk("qla2100: devconf=%s\n",cp);)
++
++                      ql2xdevconf = cp;
++                      (opts > 0)? opts-- : 0;
++                      break;
++              }
++              opts++;
++              cp = np;
++      }
++
++      /*
++       * Parse the args before the properties
++       */
++      if (opts) {
++              opts = (opts > MAXARGS-1)? MAXARGS-1: opts;
++              argc = qla2x00_get_tokens(s, argv, opts);
++              while (argc > 0) {
++                      cp = *argv;
++                      DEBUG(printk("scsi: found cmd arg =[%s]\n", cp));
++
++                      if (strcmp(cp, "verbose") == 0) {
++                              DEBUG(printk("qla2100: verbose\n"));
++                              qla2x00_verbose++;
++                      } else if (strcmp(cp, "quiet") == 0) {
++                              qla2x00_quiet = 1;
++                      } else if (strcmp(cp, "reinit_on_loopdown") == 0) {
++                              qla2x00_reinit++;
++                              DEBUG(printk("qla2100: reinit_on_loopdown\n"));
++                      }
++                      argc--, argv++;
++              }
++      }
++
++#if !defined(MODULE)
++      if (ql2xdevconf)
++              return 1;
++      else
++              return 0;
++#endif
++}
++
++#if !defined(MODULE)
++__setup("ql2xopts=", qla2x00_setup);
++#endif
++
++/********************** qla2x00_get_line *********************
++* qla2x00_get_line
++* Copy a substring from the specified string. The substring
++* consists of any number of chars seperated by white spaces (i.e. spaces)
++* and ending with a newline '\n' or a semicolon ';'.
++*
++* Enter:
++* str - orig string
++* line - substring
++*
++* Returns:
++*   cp - pointer to next string
++*     or
++*   null - End of string
++*************************************************************/
++static char *
++qla2x00_get_line(char *str, char *line) 
++{
++      register        char    *cp = str;
++      register        char    *sp = line;
++
++      /* skip preceeding spaces */
++      while (*cp && *cp == ' ')
++              ++cp;
++      while ((*cp) && *cp != '\n' && *cp != ';')   /* end of line */
++              *sp++ = *cp++;
++
++      *sp = '\0';
++
++      DEBUG5(printk("%s(): %s\n", __func__, line));
++
++      if( (*cp) ) {
++              cp++;
++              return (cp);
++      }
++
++      return (NULL);
++}
++
++
++/**************************** get_tokens *********************
++* Parse command line into argv1, argv2, ... argvX
++* Arguments are seperated by white spaces and colons and end
++* with a NULL.
++*************************************************************/
++static int 
++qla2x00_get_tokens(char *line, char **argv, int maxargs) 
++{
++      register        char    *cp = line;
++      int     count = 0;
++
++      while (*cp && count < maxargs) {
++              /* skip preceeding spaces */
++              while ((*cp) && *cp == ' ')
++                      ++cp;
++              /* symbol starts here */
++              argv[count++] = cp;
++              /* skip symbols */
++              while ((*cp) && !(*cp == ' ' || *cp == ';' || *cp == ':'))
++                      cp++;
++              /* replace comma or space with a null */
++              if((*cp) && (*cp ==' ' ) && argv[count-1] != cp)
++                      *cp++ = '\0';
++      }
++      return (count);
++}
++
++/*
++* qla2x00_display_fc_names
++*      This routine will the node names of the different devices found
++*      after port inquiry.
++*
++* Input:
++*      cmd = SCSI command structure
++*
++* Returns:
++*      None.
++*/
++static void
++qla2x00_display_fc_names(scsi_qla_host_t *ha) 
++{
++      uint16_t        tgt;
++      os_tgt_t        *tq;
++
++      /* Display the node name for adapter */
++      printk(KERN_INFO
++          "scsi-qla%d-adapter-node=%02x%02x%02x%02x%02x%02x%02x%02x\\;\n",
++          (int)ha->instance,
++          ha->init_cb->node_name[0],
++          ha->init_cb->node_name[1],
++          ha->init_cb->node_name[2],
++          ha->init_cb->node_name[3],
++          ha->init_cb->node_name[4],
++          ha->init_cb->node_name[5],
++          ha->init_cb->node_name[6],
++          ha->init_cb->node_name[7]);
++
++      /* display the port name for adapter */
++      printk(KERN_INFO
++          "scsi-qla%d-adapter-port=%02x%02x%02x%02x%02x%02x%02x%02x\\;\n",
++          (int)ha->instance,
++          ha->init_cb->port_name[0],
++          ha->init_cb->port_name[1],
++          ha->init_cb->port_name[2],
++          ha->init_cb->port_name[3],
++          ha->init_cb->port_name[4],
++          ha->init_cb->port_name[5],
++          ha->init_cb->port_name[6],
++          ha->init_cb->port_name[7]);
++
++      /* Print out device port names */
++      for (tgt = 0; tgt < MAX_TARGETS; tgt++) {
++              if ((tq = ha->otgt[tgt]) == NULL)
++                      continue;
++
++              if (tq->vis_port == NULL)
++                      continue;
++
++              switch (ha->binding_type) {
++                      case BIND_BY_PORT_NAME:
++                              printk(KERN_INFO
++                                  "scsi-qla%d-tgt-%d-di-0-port="
++                                  "%02x%02x%02x%02x%02x%02x%02x%02x\\;\n",
++                                  (int)ha->instance, 
++                                  tgt,
++                                  tq->port_name[0], 
++                                  tq->port_name[1],
++                                  tq->port_name[2], 
++                                  tq->port_name[3],
++                                  tq->port_name[4], 
++                                  tq->port_name[5],
++                                  tq->port_name[6], 
++                                  tq->port_name[7]);
++
++                              break;
++
++                      case BIND_BY_PORT_ID:
++                              printk(KERN_INFO
++                                  "scsi-qla%d-tgt-%d-di-0-pid="
++                                  "%02x%02x%02x\\;\n",
++                                  (int)ha->instance,
++                                  tgt,
++                                  tq->d_id.b.domain,
++                                  tq->d_id.b.area,
++                                  tq->d_id.b.al_pa);
++                              break;
++
++                      case BIND_BY_NODE_NAME:
++                              printk(KERN_INFO
++                                  "scsi-qla%d-tgt-%d-di-0-node="
++                                  "%02x%02x%02x%02x%02x%02x%02x%02x\\;\n",
++                                  (int)ha->instance, 
++                                  tgt,
++                                  tq->node_name[0], 
++                                  tq->node_name[1],
++                                  tq->node_name[2], 
++                                  tq->node_name[3],
++                                  tq->node_name[4], 
++                                  tq->node_name[5],
++                                  tq->node_name[6], 
++                                  tq->node_name[7]);
++                              break;
++              }
++
++#if VSA
++              printk(KERN_INFO
++                  "scsi-qla%d-target-%d-vsa=01;\n", (int)ha->instance, tgt);
++#endif
++      }
++}
++
++/*
++ *  qla2x00_suspend_lun
++ *    Suspend lun and start port down timer
++ *
++ * Input:
++ *    ha = visable adapter block pointer.
++ *  lq = lun queue
++ *  cp = Scsi command pointer 
++ *  time = time in seconds
++ *  count = number of times to let time expire
++ *  delay_lun = non-zero, if lun should be delayed rather than suspended
++ *
++ * Return:
++ *     QL_STATUS_SUCCESS  -- suspended lun 
++ *     QL_STATUS_ERROR  -- Didn't suspend lun
++ *
++ * Context:
++ *    Interrupt context.
++ */
++uint8_t
++__qla2x00_suspend_lun(scsi_qla_host_t *ha,
++              os_lun_t *lq, int time, int count, int delay_lun)
++{
++      srb_t *sp;
++      struct list_head *list, *temp;
++      unsigned long flags;
++      uint8_t status;
++
++      /* if the lun_q is already suspended then don't do it again */
++      if (lq->q_state == LUN_STATE_READY ||lq->q_state == LUN_STATE_RUN) {
++
++              spin_lock_irqsave(&lq->q_lock, flags);
++              if (lq->q_state == LUN_STATE_READY) {
++                      lq->q_max = count;
++                      lq->q_count = 0;
++              }
++              /* Set the suspend time usually 6 secs */
++              atomic_set(&lq->q_timer, time);
++
++              /* now suspend the lun */
++              lq->q_state = LUN_STATE_WAIT;
++
++              if (delay_lun) {
++                      set_bit(LUN_EXEC_DELAYED, &lq->q_flag);
++                      DEBUG(printk(KERN_INFO
++                          "scsi(%ld): Delay lun execution for %d secs, "
++                          "count=%d, max count=%d, state=%d\n",
++                          ha->host_no,
++                          time,
++                          lq->q_count, lq->q_max, lq->q_state));
++              } else {
++                      DEBUG(printk(KERN_INFO
++                          "scsi(%ld): Suspend lun for %d secs, count=%d, "
++                          "max count=%d, state=%d\n",
++                          ha->host_no,
++                          time,
++                          lq->q_count, lq->q_max, lq->q_state));
++              }
++              spin_unlock_irqrestore(&lq->q_lock, flags);
++
++              /*
++               * Remove all pending commands from request queue and  put them
++               * in the scsi_retry queue.
++               */
++              spin_lock_irqsave(&ha->list_lock, flags);
++              list_for_each_safe(list, temp, &ha->pending_queue) {
++                      sp = list_entry(list, srb_t, list);
++                      if (sp->lun_queue != lq)
++                              continue;
++
++                      __del_from_pending_queue(ha, sp);
++
++                      if (sp->cmd->allowed < count)
++                              sp->cmd->allowed = count;
++                      __add_to_scsi_retry_queue(ha,sp);
++
++              } /* list_for_each_safe */
++              spin_unlock_irqrestore(&ha->list_lock, flags);
++              status = QL_STATUS_SUCCESS;
++      } else {
++              status = QL_STATUS_ERROR;
++      }
++
++      return (status);
++
++}
++
++/*
++ * qla2x00_mark_device_lost Updates fcport state when device goes offline.
++ *
++ * Input: ha = adapter block pointer.  fcport = port structure pointer.
++ *
++ * Return: None.
++ *
++ * Context:
++ */
++void qla2x00_mark_device_lost(scsi_qla_host_t *ha, fc_port_t *fcport)
++{
++      /* 
++       * We may need to retry the login, so don't change the state of the
++       * port but do the retries.
++       */
++      if (atomic_read(&fcport->state) != FC_DEVICE_DEAD)
++              atomic_set(&fcport->state, FC_DEVICE_LOST);
++
++      if (fcport->login_retry == 0) {
++              fcport->login_retry = ha->login_retry_count;
++              set_bit(RELOGIN_NEEDED, &ha->dpc_flags);
++
++              DEBUG(printk("scsi(%ld): Port login retry: "
++                  "%02x%02x%02x%02x%02x%02x%02x%02x, "
++                  "id = 0x%04x retry cnt=%d\n",
++                  ha->host_no,
++                  fcport->port_name[0],
++                  fcport->port_name[1],
++                  fcport->port_name[2],
++                  fcport->port_name[3],
++                  fcport->port_name[4],
++                  fcport->port_name[5],
++                  fcport->port_name[6],
++                  fcport->port_name[7],
++                  fcport->loop_id,
++                  fcport->login_retry));
++      }
++}
++
++/*
++ * qla2x00_mark_all_devices_lost
++ *    Updates fcport state when device goes offline.
++ *
++ * Input:
++ *    ha = adapter block pointer.
++ *    fcport = port structure pointer.
++ *
++ * Return:
++ *    None.
++ *
++ * Context:
++ */
++void
++qla2x00_mark_all_devices_lost(scsi_qla_host_t *ha) 
++{
++      struct list_head        *fcpl;
++      fc_port_t               *fcport;
++
++      list_for_each(fcpl, &ha->fcports) {
++              fcport = list_entry(fcpl, fc_port_t, list);
++
++              /*
++               * No point in marking the device as lost, if the device is
++               * already DEAD.
++               */
++              if (atomic_read(&fcport->state) == FC_DEVICE_DEAD)
++                      continue;
++
++              atomic_set(&fcport->state, FC_DEVICE_LOST);
++      }
++}
++
++/*
++* qla2x00_mem_alloc
++*      Allocates adapter memory.
++*
++* Returns:
++*      0  = success.
++*      1  = failure.
++*/
++static uint8_t
++qla2x00_mem_alloc(scsi_qla_host_t *ha)
++{
++      uint8_t   status = 1;
++      uint8_t   i;
++      int     retry= 10;
++      mbx_cmdq_t      *ptmp;
++      mbx_cmdq_t      *tmp_q_head;
++      mbx_cmdq_t      *tmp_q_tail;
++
++      ENTER(__func__);
++
++      do {
++              /*
++               * This will loop only once if everything goes well, else some
++               * number of retries will be performed to get around a kernel
++               * bug where available mem is not allocated until after a
++               * little delay and a retry.
++               */
++
++#if defined(FC_IP_SUPPORT)
++              ha->risc_rec_q = pci_alloc_consistent(ha->pdev,
++                  ((IP_BUFFER_QUEUE_DEPTH) * (sizeof(struct risc_rec_entry))),
++                  &ha->risc_rec_q_dma);
++              if (ha->risc_rec_q == NULL) {
++                      printk(KERN_WARNING
++                          "scsi(%ld): Memory Allocation failed - "
++                          "risc_rec_q\n",
++                          ha->host_no);
++
++                      set_current_state(TASK_INTERRUPTIBLE);
++                      schedule_timeout(HZ/10);
++
++                      continue;
++              }
++#endif        /* #if defined(FC_IP_SUPPORT) */
++
++              ha->request_ring = pci_alloc_consistent(ha->pdev,
++                  ((REQUEST_ENTRY_CNT + 1) * (sizeof(request_t))),
++                  &ha->request_dma);
++              if (ha->request_ring == NULL) {
++                      printk(KERN_WARNING
++                          "scsi(%ld): Memory Allocation failed - "
++                          "request_ring\n",
++                          ha->host_no);
++
++                      qla2x00_mem_free(ha);
++                      set_current_state(TASK_INTERRUPTIBLE);
++                      schedule_timeout(HZ/10);
++
++                      continue;
++              }
++
++              ha->response_ring = pci_alloc_consistent(ha->pdev,
++                  ((RESPONSE_ENTRY_CNT + 1) * (sizeof(response_t))),
++                  &ha->response_dma);
++              if (ha->response_ring == NULL) {
++                      printk(KERN_WARNING
++                          "scsi(%ld): Memory Allocation failed - "
++                          "response_ring\n",
++                          ha->host_no);
++
++                      qla2x00_mem_free(ha);
++                      set_current_state(TASK_INTERRUPTIBLE);
++                      schedule_timeout(HZ/10);
++
++                      continue;
++              }
++
++              /* get consistent memory allocated for init control block */
++              ha->init_cb = pci_alloc_consistent(ha->pdev,
++                  sizeof(init_cb_t), &ha->init_cb_dma);
++              if (ha->init_cb == NULL) {
++                      printk(KERN_WARNING
++                          "scsi(%ld): Memory Allocation failed - "
++                          "init_cb\n",
++                          ha->host_no);
++
++                      qla2x00_mem_free(ha);
++                      set_current_state(TASK_INTERRUPTIBLE);
++                      schedule_timeout(HZ/10);
++
++                      continue;
++              }
++              memset(ha->init_cb, 0, sizeof(init_cb_t));
++
++              /* Allocate ioctl related memory. */
++              if (qla2x00_alloc_ioctl_mem(ha)) {
++                      printk(KERN_WARNING
++                          "scsi(%ld): Memory Allocation failed - "
++                          "ioctl_mem\n",
++                          ha->host_no);
++
++                      qla2x00_mem_free(ha);
++                      set_current_state(TASK_INTERRUPTIBLE);
++                      schedule_timeout(HZ/10);
++
++                      continue;
++              }
++
++              if (qla2x00_allocate_sp_pool(ha)) {
++                      printk(KERN_WARNING
++                          "scsi(%ld): Memory Allocation failed - "
++                          "qla2x00_allocate_sp_pool()\n",
++                          ha->host_no);
++
++                      qla2x00_mem_free(ha);
++                      set_current_state(TASK_INTERRUPTIBLE);
++                      schedule_timeout(HZ/10);
++
++                      continue;
++              }
++
++              /*
++               * Allocate an initial list of mailbox semaphore queue to be
++               * used for serialization of the mailbox commands.
++               */
++              tmp_q_head = (void *)KMEM_ZALLOC(sizeof(mbx_cmdq_t), 20);
++              if (tmp_q_head == NULL) {
++                      /* error */
++                      printk(KERN_WARNING
++                          "scsi(%ld): Memory Allocation failed - "
++                          "mbx_cmd_q",
++                          ha->host_no);
++
++                      qla2x00_mem_free(ha);
++                      set_current_state(TASK_INTERRUPTIBLE);
++                      schedule_timeout(HZ/10);
++
++                      continue;
++              }
++              ha->mbx_sem_pool_head = tmp_q_head;
++              tmp_q_tail = tmp_q_head;
++
++              /* Now try to allocate more */
++              for (i = 1; i < MBQ_INIT_LEN; i++) {
++                      ptmp = (void *)KMEM_ZALLOC(sizeof(mbx_cmdq_t), 20 + i);
++                      if (ptmp == NULL) {
++                              /*
++                               * Error. Just exit. If more is needed later
++                               * they will be allocated at that time.
++                               */
++                              break;
++                      }
++                      tmp_q_tail->pnext = ptmp;
++                      tmp_q_tail = ptmp;
++              }
++              ha->mbx_sem_pool_tail = tmp_q_tail;
++
++              /* Get consistent memory allocated for MS IOCB */
++              ha->ms_iocb = pci_alloc_consistent(ha->pdev,
++                  sizeof(ms_iocb_entry_t), &ha->ms_iocb_dma);
++              if (ha->ms_iocb == NULL) {
++                      /* error */
++                      printk(KERN_WARNING
++                          "scsi(%ld): Memory Allocation failed - ms_iocb\n",
++                          ha->host_no);
++
++                      qla2x00_mem_free(ha);
++                      set_current_state(TASK_INTERRUPTIBLE);
++                      schedule_timeout(HZ/10);
++
++                      continue;
++              }
++              memset(ha->ms_iocb, 0, sizeof(ms_iocb_entry_t));
++
++              /* Get consistent memory allocated for CT SNS commands */
++              ha->ct_sns = pci_alloc_consistent(ha->pdev,
++                  sizeof(struct ct_sns_pkt), &ha->ct_sns_dma);
++              if (ha->ct_sns == NULL) {
++                      /* error */
++                      printk(KERN_WARNING
++                          "scsi(%ld): Memory Allocation failed - ct_sns\n",
++                          ha->host_no);
++
++                      qla2x00_mem_free(ha);
++                      set_current_state(TASK_INTERRUPTIBLE);
++                      schedule_timeout(HZ/10);
++
++                      continue;
++              }
++              memset(ha->ct_sns, 0, sizeof(struct ct_sns_pkt));
++
++              /* Done all allocations without any error. */
++              status = 0;
++
++      } while (retry-- && status != 0);
++
++      if (status) {
++              printk(KERN_WARNING
++                      "%s(): **** FAILED ****\n", __func__);
++      }
++
++      LEAVE(__func__);
++
++      return(status);
++}
++
++/*
++* qla2x00_mem_free
++*      Frees all adapter allocated memory.
++*
++* Input:
++*      ha = adapter block pointer.
++*/
++static void
++qla2x00_mem_free(scsi_qla_host_t *ha)
++{
++      uint32_t        t;
++      struct list_head        *fcpl, *fcptemp;
++      fc_port_t       *fcport;
++      struct list_head        *fcll, *fcltemp;
++      fc_lun_t        *fclun;
++      mbx_cmdq_t      *ptmp;
++      mbx_cmdq_t      *tmp_q_head;
++      unsigned long   wtime;/* max wait time if mbx cmd is busy. */
++      struct list_head *fcil, *fcitemp;
++      fc_initiator_t  *fcinitiator;
++
++      ENTER(__func__);
++
++      if (ha == NULL) {
++              /* error */
++              DEBUG2(printk("%s(): ERROR invalid ha pointer.\n", __func__));
++              return;
++      }
++
++      /* Free the target queues */
++      for (t = 0; t < MAX_TARGETS; t++) {
++              qla2x00_tgt_free(ha, t);
++      }
++
++      /* Make sure all other threads are stopped. */
++      wtime = 60 * HZ;
++      while ((ha->dpc_wait != NULL || ha->mbx_q_head != NULL) && wtime) {
++              set_current_state(TASK_INTERRUPTIBLE);
++              wtime = schedule_timeout(wtime);
++      }
++
++      /* Now free the mbx sem pool */
++      tmp_q_head = ha->mbx_sem_pool_head;
++      while (tmp_q_head != NULL) {
++              ptmp = tmp_q_head->pnext;
++              KMEM_FREE(tmp_q_head, sizeof(mbx_cmdq_t));
++              tmp_q_head = ptmp;
++      }
++      ha->mbx_sem_pool_head = NULL;
++
++      /* free ioctl memory */
++      qla2x00_free_ioctl_mem(ha);
++
++      /* Free host database. */
++      list_for_each_safe(fcil, fcitemp, &ha->fcinitiators) {
++              fcinitiator = list_entry(fcil, fc_initiator_t, list);
++
++              list_del(&fcinitiator->list);
++              kfree(fcinitiator);
++      }
++      INIT_LIST_HEAD(&ha->fcinitiators);
++
++      /* free sp pool */
++      qla2x00_free_sp_pool(ha);
++
++      if (ha->ct_sns) {
++              pci_free_consistent(ha->pdev,
++                  sizeof(struct ct_sns_pkt), ha->ct_sns, ha->ct_sns_dma);
++      }
++      if (ha->ms_iocb) {
++              pci_free_consistent(ha->pdev,
++                  sizeof(ms_iocb_entry_t), ha->ms_iocb, ha->ms_iocb_dma);
++      }
++
++      if (ha->init_cb) {
++              pci_free_consistent(ha->pdev,
++                  sizeof(init_cb_t), ha->init_cb, ha->init_cb_dma);
++      }
++
++      if (ha->request_ring) {
++              pci_free_consistent(ha->pdev,
++                  ((REQUEST_ENTRY_CNT + 1) * (sizeof(request_t))),
++                  ha->request_ring, ha->request_dma);
++      }
++
++      if (ha->response_ring) {
++              pci_free_consistent(ha->pdev,
++                  ((RESPONSE_ENTRY_CNT + 1) * (sizeof(response_t))),
++                  ha->response_ring, ha->response_dma);
++      }
++
++#if defined(FC_IP_SUPPORT)
++      if (ha->risc_rec_q) {
++              pci_free_consistent(ha->pdev,
++                  ((IP_BUFFER_QUEUE_DEPTH) * (sizeof(struct risc_rec_entry))),
++                  ha->risc_rec_q, ha->risc_rec_q_dma);
++      }
++      ha->risc_rec_q = NULL;
++      ha->risc_rec_q_dma = 0;
++#endif
++
++      ha->ct_sns = NULL;
++      ha->ms_iocb = NULL;
++
++      ha->init_cb = NULL;
++      ha->request_ring = NULL;
++      ha->request_dma = 0;
++      ha->response_ring = NULL;
++      ha->response_dma = 0;
++
++      list_for_each_safe(fcpl, fcptemp, &ha->fcports) {
++              fcport = list_entry(fcpl, fc_port_t, list);
++
++              /* fc luns */
++              list_for_each_safe(fcll, fcltemp, &fcport->fcluns) {
++                      fclun = list_entry(fcll, fc_lun_t, list);
++
++                      list_del_init(&fclun->list);
++                      kfree(fclun);
++              }
++
++              /* fc ports */
++              list_del_init(&fcport->list);
++              kfree(fcport);
++      }
++      INIT_LIST_HEAD(&ha->fcports);
++
++      LEAVE(__func__);
++}
++
++/*
++ * qla2x00_allocate_sp_pool
++ *     This routine is called during initialization to allocate
++ *     memory for local srb_t.
++ *
++ * Input:
++ *     ha   = adapter block pointer.
++ *
++ * Context:
++ *      Kernel context.
++ * 
++ * Note: Sets the ref_count for non Null sp to one.
++ */
++uint8_t
++qla2x00_allocate_sp_pool(scsi_qla_host_t *ha) 
++{
++      srb_t   *sp;
++      int  i;
++      uint8_t      status = QL_STATUS_SUCCESS;
++
++      ENTER(__func__);
++      
++      INIT_LIST_HEAD(&ha->free_queue);
++      ha->srb_alloc_cnt = 0;
++
++      ha->srb_pool_order = get_order(max_srbs * sizeof(srb_t));
++      ha->srb_pool =
++          (srb_t *) __get_free_pages(GFP_KERNEL, ha->srb_pool_order);
++      if (ha->srb_pool != NULL) {
++              for (i = 0, sp = ha->srb_pool; i < max_srbs; i++, sp++) {
++                      memset(sp, 0, sizeof(srb_t));
++                      __add_to_free_queue (ha, sp);
++                      sp->magic = SRB_MAGIC;
++                      sp->ref_num = ha->srb_alloc_cnt;
++                      sp->host_no = ha->host_no;
++                      atomic_set(&sp->ref_count, 0);
++
++                      ha->srb_alloc_cnt++;
++              }
++      }
++
++      /*
++       * If we fail to allocte memory return an error
++       */
++      if (ha->srb_alloc_cnt == 0)
++              status = QL_STATUS_ERROR;
++
++      printk(KERN_INFO
++          "scsi(%ld): Allocated %d SRB(s).\n",
++          ha->host_no, ha->srb_alloc_cnt);
++
++      LEAVE(__func__);
++
++      return (status);
++}
++
++/*
++ *  This routine frees all adapter allocated memory.
++ *  
++ */
++void
++qla2x00_free_sp_pool( scsi_qla_host_t *ha) 
++{
++      int cnt_free_srbs = 0;
++      srb_t *sp;
++      struct list_head *list, *temp;
++
++      /*
++       * Count the number of entries, remove the entries from the list, then
++       * free the pool.
++       */
++      list_for_each_safe(list, temp, &ha->free_queue) {
++              sp = list_entry(list, srb_t, list);
++              
++              __del_from_free_queue(ha, sp);
++              cnt_free_srbs++;
++      }
++      free_pages((unsigned long)ha->srb_pool, ha->srb_pool_order);
++
++      if (cnt_free_srbs != ha->srb_alloc_cnt) {
++              DEBUG(printk("scsi(%ld): Did not free all srbs, Free count = "
++                  "%d, Alloc Count = %d\n",
++                  ha->host_no, cnt_free_srbs, ha->srb_alloc_cnt));
++              printk(KERN_INFO
++                  "scsi(%ld): Did not free all srbs, Free count = %d, "
++                  "Alloc Count = %d\n",
++                  ha->host_no, cnt_free_srbs, ha->srb_alloc_cnt);
++      }
++}
++
++
++
++/**************************************************************************
++* qla2x00_do_dpc
++*   This kernel thread is a task that is schedule by the interrupt handler
++*   to perform the background processing for interrupts.
++*
++* Notes:
++* This task always run in the context of a kernel thread.  It
++* is kick-off by the driver's detect code and starts up
++* up one per adapter. It immediately goes to sleep and waits for
++* some fibre event.  When either the interrupt handler or
++* the timer routine detects a event it will one of the task
++* bits then wake us up.
++**************************************************************************/
++static int
++qla2x00_do_dpc(void *data)
++{
++      DECLARE_MUTEX_LOCKED(sem);
++      scsi_qla_host_t *ha;
++      fcdev_t         dev;
++      struct list_head *fcpl;
++      fc_port_t       *fcport;
++      os_lun_t        *q;
++      srb_t           *sp;
++      uint8_t         status;
++      uint32_t        t;
++      unsigned long   flags = 0;
++      struct list_head *list, *templist;
++      int     dead_cnt, online_cnt;
++
++      ha = (scsi_qla_host_t *)data;
++
++      lock_kernel();
++
++      daemonize("%s_dpc%ld", DRIVER_NAME, ha->host_no);
++      allow_signal(SIGTERM);
++
++      ha->dpc_wait = &sem;
++
++      unlock_kernel();
++
++      complete(&ha->dpc_inited);
++
++      while (1) {
++              /*
++               * If we get a signal, it means we are supposed to go
++               * away and die.  This typically happens if the user is
++               * trying to unload a module.
++               */
++              DEBUG3(printk("qla2x00: DPC handler sleeping\n"));
++
++              down_interruptible(&sem);
++
++              if (signal_pending(current))
++                      break;   /* get out */
++
++              if (ha->dpc_should_die)
++                      break;
++
++              if (!list_empty(&ha->done_queue))
++                      schedule_work(&ha->run_qla_task);
++
++              DEBUG3(printk("qla2x00: DPC handler waking up\n"));
++
++              /* Initialization not yet finished. Don't do anything yet. */
++              if (!ha->init_done || ha->dpc_active)
++                      continue;
++
++              DEBUG3(printk("scsi(%ld): DPC handler\n", ha->host_no));
++
++              /* spin_lock_irqsave(&io_request_lock, ha->cpu_flags);*/
++              ha->dpc_active = 1;
++
++              /* Determine what action is necessary */
++
++              /* Process commands in retry queue */
++              if (test_and_clear_bit(PORT_RESTART_NEEDED, &ha->dpc_flags)) {
++                      DEBUG(printk("scsi(%ld): DPC checking retry_q. "
++                          "total=%d\n",
++                          ha->host_no, ha->retry_q_cnt));
++
++                      spin_lock_irqsave(&ha->list_lock, flags);
++                      dead_cnt = online_cnt = 0;
++                      list_for_each_safe(list, templist, &ha->retry_queue) {
++                              sp = list_entry(list, srb_t, list);
++                              q = sp->lun_queue;
++                              DEBUG3(printk("scsi(%ld): pid=%ld sp=%p, "
++                                  "spflags=0x%x, q_flag= 0x%lx\n",
++                                  ha->host_no,
++                                  sp->cmd->serial_number,
++                                  sp, sp->flags, q->q_flag));
++
++                              if (q == NULL)
++                                      continue;
++                              fcport = q->fclun->fcport;
++
++                              if (atomic_read(&fcport->state) ==
++                                  FC_DEVICE_DEAD) {
++
++                                      __del_from_retry_queue(ha, sp);
++                                      CMD_RESULT(sp->cmd) =
++                                          DID_NO_CONNECT << 16;
++                                      CMD_HANDLE(sp->cmd) =
++                                          (unsigned char *) NULL;
++                                      __add_to_done_queue(ha, sp);
++                                      dead_cnt++;
++                              } else if (atomic_read(&fcport->state) !=
++                                  FC_DEVICE_LOST) {
++
++                                      __del_from_retry_queue(ha, sp);
++                                      CMD_RESULT(sp->cmd) =
++                                          DID_BUS_BUSY << 16;
++                                      CMD_HANDLE(sp->cmd) =
++                                          (unsigned char *) NULL;
++                                      __add_to_done_queue(ha, sp);
++                                      online_cnt++;
++                              }
++                      } /* list_for_each_safe() */
++                      spin_unlock_irqrestore(&ha->list_lock, flags);
++
++                      DEBUG(printk("scsi(%ld): done processing retry queue "
++                          "- dead=%d, online=%d\n ",
++                          ha->host_no, dead_cnt, online_cnt));
++              }
++
++              /* Process commands in scsi retry queue */
++              if (test_and_clear_bit(SCSI_RESTART_NEEDED, &ha->dpc_flags)) {
++                      /*
++                       * Any requests we want to delay for some period is put
++                       * in the scsi retry queue with a delay added. The
++                       * timer will schedule a "scsi_restart_needed" every 
++                       * second as long as there are requests in the scsi
++                       * queue. 
++                       */
++                      DEBUG(printk("scsi(%ld): DPC checking scsi "
++                          "retry_q.total=%d\n",
++                          ha->host_no, ha->scsi_retry_q_cnt));
++
++                      online_cnt = 0;
++                      spin_lock_irqsave(&ha->list_lock, flags);
++                      list_for_each_safe(list,
++                                              templist,
++                                              &ha->scsi_retry_queue) {
++
++                              sp = list_entry(list, srb_t, list);
++                              q = sp->lun_queue;
++
++                              DEBUG3(printk("scsi(%ld): scsi_retry_q: "
++                                  "pid=%ld sp=%p, spflags=0x%x, "
++                                  "q_flag= 0x%lx,q_state=%d\n",
++                                  ha->host_no,
++                                  sp->cmd->serial_number,
++                                  sp, sp->flags, q->q_flag, q->q_state));
++
++                              /* Was this lun suspended */
++                              if (q->q_state != LUN_STATE_WAIT) {
++                                      online_cnt++;
++                                      __del_from_scsi_retry_queue(ha, sp);
++                                      __add_to_retry_queue(ha,sp);
++                              }
++
++                              /* Was this command suspended for N secs */
++                              if (sp->delay != 0) {
++                                      sp->delay--;
++                                      if (sp->delay == 0) {
++                                              online_cnt++;
++                                              __del_from_scsi_retry_queue(
++                                                  ha, sp);
++                                              __add_to_retry_queue(ha,sp);
++                                      }
++                              }
++                      }
++                      spin_unlock_irqrestore(&ha->list_lock, flags);
++
++                      DEBUG(if (online_cnt > 0))
++                      DEBUG(printk("scsi(%ld): dpc() found scsi reqs to "
++                          "restart= %d\n",
++                          ha->host_no, online_cnt));
++              }
++
++              if (ha->flags.mbox_busy) {
++                      if (!list_empty(&ha->done_queue))
++                              schedule_work(&ha->run_qla_task);
++
++                      ha->dpc_active = 0;
++                      continue;
++              }
++
++              if (test_and_clear_bit(ISP_ABORT_NEEDED, &ha->dpc_flags)) {
++
++                      DEBUG(printk("scsi(%ld): dpc: sched "
++                          "qla2x00_abort_isp ha = %p\n",
++                          ha->host_no, ha));
++                      if (!(test_and_set_bit(ABORT_ISP_ACTIVE,
++                          &ha->dpc_flags))) {
++
++                              if (qla2x00_abort_isp(ha, 0)) {
++                                      /* failed. retry later */
++                                      set_bit(ISP_ABORT_NEEDED,
++                                          &ha->dpc_flags);
++                              }
++                              clear_bit(ABORT_ISP_ACTIVE, &ha->dpc_flags);
++                      }
++                      DEBUG(printk("scsi(%ld): dpc: qla2x00_abort_isp end\n",
++                          ha->host_no));
++              }
++
++              if (test_and_clear_bit(LOOP_RESET_NEEDED, &ha->dpc_flags)) {
++
++                      DEBUG(printk("scsi(%ld): Loop Reset Needed -- "
++                          "calling qla2x00_loop_reset().\n",
++                          ha->host_no));
++
++                      qla2x00_loop_reset(ha);
++              }
++
++              if (test_and_clear_bit(DEVICE_ABORT_NEEDED, &ha->dpc_flags)) {
++
++                      DEBUG(printk("scsi(%ld): Device Abort Needed -- "
++                          "calling qla2x00_abort_device().\n",
++                          ha->host_no));
++
++                      t = ha->reset_tgt_id;
++                      if (ha->otgt[t] && ha->otgt[t]->vis_port)
++                              qla2x00_abort_device(ha,
++                                      ha->otgt[t]->vis_port->loop_id,
++                                      ha->reset_lun);
++              }
++
++              if (test_and_clear_bit(RESET_MARKER_NEEDED, &ha->dpc_flags) &&
++                  (!(test_and_set_bit(RESET_ACTIVE, &ha->dpc_flags)))) {
++
++                      DEBUG(printk("scsi(%ld): qla2x00_reset_marker()\n",
++                          ha->host_no));
++
++                      qla2x00_rst_aen(ha);
++                      clear_bit(RESET_ACTIVE, &ha->dpc_flags);
++              }
++
++              /* Retry each device up to login retry count */
++              if ((test_and_clear_bit(RELOGIN_NEEDED, &ha->dpc_flags)) &&
++                  !test_bit(LOOP_RESYNC_NEEDED, &ha->dpc_flags) &&
++                  ha->loop_state != LOOP_DOWN) {
++
++                      DEBUG(printk("scsi(%ld): qla2x00_port_login()\n",
++                          ha->host_no));
++
++                      list_for_each(fcpl, &ha->fcports) {
++                              fcport = list_entry(fcpl, fc_port_t, list);
++                              
++                              /*
++                               * If the port is not ONLINE then try to login
++                               * to it if we haven't run out of retries.
++                               */
++                              if (atomic_read(&fcport->state) != FC_ONLINE &&
++                                  fcport->login_retry) {
++
++                                      fcport->login_retry--;
++                                      memset(&dev, 0, sizeof(fcdev_t));
++                                      dev.loop_id = fcport->old_loop_id;
++                                      dev.d_id.b24 = fcport->d_id.b24;
++                                      if (ha->fc_db[fcport->dev_id].flag &
++                                          DEV_PUBLIC) 
++                                              status = qla2x00_fabric_login(
++                                                  ha, &dev);
++                                      else    
++                                              status =
++                                                  qla2x00_local_device_login(
++                                                      ha,
++                                                      (dev.loop_id & 0xff));
++
++                                      if (status == QL_STATUS_SUCCESS) {
++                                              ha->fc_db[fcport->dev_id].loop_id = dev.loop_id;
++                                              fcport->loop_id = dev.loop_id;
++                                              fcport->old_loop_id = dev.loop_id;
++
++                                              DEBUG(printk("scsi(%ld): port login OK: logged in ID 0x%x\n",
++                                                  ha->host_no, fcport->loop_id));
++                                              
++                                              fcport->port_login_retry_count =
++                                                  ha->port_down_retry_count * PORT_RETRY_TIME;
++                                              atomic_set(&fcport->state, FC_ONLINE);
++                                              atomic_set(&fcport->port_down_timer,
++                                                  ha->port_down_retry_count * PORT_RETRY_TIME);
++
++                                              fcport->login_retry = 0;
++                                      } else if (status == 1) {
++                                              if (dev.loop_id != fcport->old_loop_id) {
++                                                      fcport->old_loop_id = dev.loop_id;
++                                                      ha->fc_db[fcport->dev_id].loop_id = dev.loop_id;
++                                              }
++
++                                              set_bit(RELOGIN_NEEDED, &ha->dpc_flags);
++                                              /* retry the login again */
++                                              DEBUG(printk("scsi(%ld): Retrying %d login again loop_id 0x%x\n",
++                                                  ha->host_no,
++                                                  fcport->login_retry, fcport->loop_id));
++                                      } else {
++                                              fcport->login_retry = 0;
++                                      }
++                              }
++                              if (test_bit(LOOP_RESYNC_NEEDED, &ha->dpc_flags))
++                                      break;
++                      }
++                      DEBUG(printk("scsi(%ld): qla2x00_port_login - end\n",
++                          ha->host_no));
++              }
++
++              if ((test_bit(LOGIN_RETRY_NEEDED, &ha->dpc_flags)) &&
++                  ha->loop_state != LOOP_DOWN ) {
++
++                      clear_bit(LOGIN_RETRY_NEEDED, &ha->dpc_flags);
++                      DEBUG(printk("scsi(%ld): qla2x00_login_retry()\n",
++                          ha->host_no));
++                              
++                      set_bit(LOOP_RESYNC_NEEDED, &ha->dpc_flags);
++
++                      DEBUG(printk("scsi(%ld): qla2x00_login_retry - end\n",
++                          ha->host_no));
++              }
++
++              if (test_and_clear_bit(LOOP_RESYNC_NEEDED, &ha->dpc_flags)) {
++
++                      DEBUG(printk("scsi(%ld): qla2x00_loop_resync()\n",
++                          ha->host_no));
++
++                      if (!(test_and_set_bit(LOOP_RESYNC_ACTIVE,
++                          &ha->dpc_flags))) {
++
++                              qla2x00_loop_resync(ha);
++
++                              clear_bit(LOOP_RESYNC_ACTIVE, &ha->dpc_flags);
++                      }
++
++                      DEBUG(printk("scsi(%ld): qla2x00_loop_resync - end\n",
++                          ha->host_no));
++              }
++
++              if (ha->flags.failover_enabled) {
++                      /*
++                       * If we are not processing a ioctl or one of
++                       * the ports are still MISSING or need a resync
++                       * then process the failover event.
++                      */  
++                      if (!test_bit(CFG_ACTIVE, &ha->cfg_flags)) {
++                              if (qla2x00_check_for_devices_online(ha)) {
++                                      if (test_and_clear_bit(FAILOVER_EVENT, &ha->dpc_flags)) {
++
++                                              DEBUG(printk("scsi(%ld): qla2x00_cfg_event_notify()\n",
++                                                  ha->host_no));
++
++                                              if (ha->flags.online) {
++                                                      qla2x00_cfg_event_notify(ha, ha->failover_type);
++                                              }
++
++                                              DEBUG(printk("scsi(%ld): qla2x00_cfg_event_notify - end\n",
++                                                  ha->host_no));
++                                      }
++                              }
++
++                              if (test_and_clear_bit(FAILOVER_NEEDED, &ha->dpc_flags)) {
++                                      /*
++                                       * Get any requests from failover queue
++                                       */
++                                      DEBUG(printk("scsi(%ld): qla2x00_process_failover()\n",
++                                          ha->host_no));
++
++                                      qla2x00_process_failover(ha);
++
++                                      DEBUG(printk("scsi(%ld): qla2x00_process_failover - end\n",
++                                          ha->host_no));
++                              }
++                      }
++              }
++
++              if (test_bit(RESTART_QUEUES_NEEDED, &ha->dpc_flags)) {
++                      DEBUG(printk("scsi(%ld): qla2x00_restart_queues()\n",
++                          ha->host_no));
++
++                      qla2x00_restart_queues(ha,FALSE);
++
++                      DEBUG(printk("scsi(%ld): qla2x00_restart_queues - end\n",
++                          ha->host_no));
++              }
++
++              if (test_bit(ABORT_QUEUES_NEEDED, &ha->dpc_flags)) {
++
++                      DEBUG(printk("scsi(%ld): qla2x00_abort_queues()\n",
++                          ha->host_no));
++                              
++                      qla2x00_abort_queues(ha, FALSE);
++
++                      DEBUG(printk("scsi(%ld): qla2x00_abort_queues - end\n",
++                          ha->host_no));
++              }
++
++              if (!ha->interrupts_on)
++                      qla2x00_enable_intrs(ha);
++
++              if (!list_empty(&ha->done_queue))
++                      schedule_work(&ha->run_qla_task);
++
++              ha->dpc_active = 0;
++      } /* End of while(1) */
++
++      DEBUG(printk("scsi(%ld): DPC handler exiting\n", ha->host_no));
++
++      /*
++       * Make sure that nobody tries to wake us up again.
++       */
++      ha->dpc_wait = NULL;
++      ha->dpc_active = 0;
++
++      complete_and_exit(&ha->dpc_exited, 0);
++}
++
++/*
++ *  qla2x00_abort_queues
++ *    Abort all commands on queues on device
++ *
++ * Input:
++ *    ha = adapter block pointer.
++ *
++ * Context:
++ *    Interrupt context.
++ */
++void
++qla2x00_abort_queues(scsi_qla_host_t *ha, uint8_t doneqflg) 
++{
++
++      srb_t       *sp;
++      struct list_head *list, *temp;
++      unsigned long flags;
++
++      ENTER(__func__);
++
++      clear_bit(ABORT_QUEUES_NEEDED, &ha->dpc_flags);
++
++      /* Return all commands device queues. */
++      spin_lock_irqsave(&ha->list_lock,flags);
++      list_for_each_safe(list, temp, &ha->pending_queue) {
++              sp = list_entry(list, srb_t, list);
++
++              if (sp->flags & SRB_ABORTED)
++                      continue;
++
++              /* Remove srb from LUN queue. */
++              __del_from_pending_queue(ha, sp);
++
++              /* Set ending status. */
++              CMD_RESULT(sp->cmd) = DID_BUS_BUSY << 16;
++
++              __add_to_done_queue(ha, sp);
++      }
++      spin_unlock_irqrestore(&ha->list_lock, flags);
++
++      LEAVE(__func__);
++}
++
++/*
++ * qla2x00_check_for_devices_online
++ *
++ *    Check fcport state of all devices to make sure online.
++ *
++ * Input:
++ *    ha = adapter block pointer.
++ *
++ * Return:
++ *    None.
++ *
++ * Context:
++ */
++static uint8_t
++qla2x00_check_for_devices_online(scsi_qla_host_t *ha) 
++{
++      struct list_head        *fcpl;
++      fc_port_t       *fcport;
++      int             found, cnt;
++
++      found = 0;
++      cnt = 0;
++
++      list_for_each(fcpl, &ha->fcports) {
++              fcport = list_entry(fcpl, fc_port_t, list);
++
++              if ((atomic_read(&fcport->state) == FC_ONLINE) ||
++                      (atomic_read(&fcport->state) == FC_DEVICE_DEAD))
++                      found++;
++
++              cnt++;
++      }
++      if (cnt == found) {
++              DEBUG5(printk("%s(%ld): all online\n",
++                              __func__,
++                              ha->host_no);)
++              return 1;
++      } else
++              return 0;
++}
++
++/*
++*  qla2x00_rst_aen
++*      Processes asynchronous reset.
++*
++* Input:
++*      ha  = adapter block pointer.
++*/
++static void
++qla2x00_rst_aen(scsi_qla_host_t *ha) 
++{
++      ENTER(__func__);
++
++      if (ha->flags.online && !ha->flags.reset_active &&
++          !atomic_read(&ha->loop_down_timer) &&
++          !(test_bit(ABORT_ISP_ACTIVE, &ha->dpc_flags))) {
++
++              /* 10/15 ha->flags.reset_active = TRUE; */
++              do {
++                      clear_bit(RESET_MARKER_NEEDED, &ha->dpc_flags);
++
++                      /*
++                       * Issue marker command only when we are going to start
++                       * the I/O.
++                       */
++                      ha->marker_needed = 1;
++              } while (!atomic_read(&ha->loop_down_timer) &&
++                  (test_bit(RESET_MARKER_NEEDED, &ha->dpc_flags)));
++
++              /* 10/15 ha->flags.reset_active = FALSE; */
++      }
++
++      LEAVE(__func__);
++}
++
++
++/*
++ * This routine will alloacte SP from the free queue
++ * input:
++ *        scsi_qla_host_t *
++ * output:
++ *        srb_t * or NULL
++ */
++srb_t *
++qla2x00_get_new_sp(scsi_qla_host_t *ha)
++{
++      srb_t * sp = NULL;
++      ulong  flags;
++
++      spin_lock_irqsave(&ha->list_lock, flags);
++      if (!list_empty(&ha->free_queue)) {
++              sp = list_entry(ha->free_queue.next, srb_t, list);
++              __del_from_free_queue(ha, sp);
++      }
++      spin_unlock_irqrestore(&ha->list_lock, flags);
++
++      if (sp) {
++#if defined(QL_DEBUG_LEVEL_4)
++              if ((int)atomic_read(&sp->ref_count) != 0) {
++                      printk(KERN_WARNING
++                          "scsi(%ld): WARNING ref_count not zero!\n",
++                          ha->host_no);
++              }
++#endif
++
++              sp_get(ha, sp);
++      }
++
++      return (sp);
++}
++
++/**************************************************************************
++*   qla2x00_timer
++*
++* Description:
++*   One second timer
++*
++* Context: Interrupt
++***************************************************************************/
++static void
++qla2x00_timer(scsi_qla_host_t *ha)
++{
++      int             t,l;
++      unsigned long   cpu_flags = 0;
++      struct list_head        *fcpl;
++      fc_port_t       *fcport;
++      os_lun_t *lq;
++      os_tgt_t *tq;
++      int             start_dpc = 0;
++
++      /*
++       * We try and restart any request in the retry queue every second.
++       */
++      if (!list_empty(&ha->retry_queue)) {
++              set_bit(PORT_RESTART_NEEDED, &ha->dpc_flags);
++              start_dpc++;
++      }
++
++      /*
++       * We try and restart any request in the scsi_retry queue every second.
++       */
++      if (!list_empty(&ha->scsi_retry_queue)) {
++              set_bit(SCSI_RESTART_NEEDED, &ha->dpc_flags);
++              start_dpc++;
++      }
++
++      /*
++       * We try and failover any request in the failover queue every second.
++       */
++      if (!list_empty(&ha->failover_queue)) {
++              set_bit(FAILOVER_NEEDED, &ha->dpc_flags);
++              start_dpc++;
++      }
++
++      /*
++       * Ports - Port down timer.
++       *
++       * Whenever, a port is in the LOST state we start decrementing its port
++       * down timer every second until it reaches zero. Once  it reaches zero
++       * the port it marked DEAD. 
++       */
++      t = 0;
++      list_for_each(fcpl, &ha->fcports) {
++              fcport = list_entry(fcpl, fc_port_t, list);
++
++              if (atomic_read(&fcport->state) == FC_DEVICE_LOST) {
++
++                      if (atomic_read(&fcport->port_down_timer) == 0)
++                              continue;
++
++                      if (atomic_dec_and_test(&fcport->port_down_timer) != 0) 
++                              atomic_set(&fcport->state, FC_DEVICE_DEAD);
++                      
++                      DEBUG(printk("scsi(%ld): fcport-%d - port retry count: "
++                          "%d remainning\n",
++                          ha->host_no,
++                          t, atomic_read(&fcport->port_down_timer)));
++              }
++              t++;
++      } /* End of for fcport  */
++
++      /*
++       * LUNS - lun suspend timer.
++       *
++       * Whenever, a lun is suspended the timer starts decrementing its
++       * suspend timer every second until it reaches zero. Once  it reaches
++       * zero the lun retry count is decremented. 
++       */
++
++      /*
++       * FIXME(dg) - Need to convert this linear search of luns into a search
++       * of a list of suspended luns.
++       */
++      for (t = 0; t < ha->max_targets; t++) {
++              if ((tq = ha->otgt[t]) == NULL)
++                      continue;
++
++              for (l = 0; l < ha->max_luns; l++) {
++                      if ((lq = (os_lun_t *) tq->olun[l]) == NULL)
++                              continue;
++
++                      spin_lock_irqsave(&lq->q_lock, cpu_flags);
++                      if (lq->q_state == LUN_STATE_WAIT &&
++                              atomic_read(&lq->q_timer) != 0) {
++
++                              if (atomic_dec_and_test(&lq->q_timer) != 0) {
++                                      /*
++                                       * A delay should immediately
++                                       * transition to a READY state
++                                       */
++                                      if (test_and_clear_bit(LUN_EXEC_DELAYED,
++                                          &lq->q_flag)) {
++                                              lq->q_state = LUN_STATE_READY;
++                                      }
++                                      else {
++                                              lq->q_count++;
++                                              if (lq->q_count == lq->q_max)
++                                                      lq->q_state =
++                                                          LUN_STATE_TIMEOUT;
++                                              else
++                                                      lq->q_state =
++                                                          LUN_STATE_RUN;
++                                      }
++                              }
++                              DEBUG3(printk("scsi(%ld): lun%d - timer %d, "
++                                  "count=%d, max=%d, state=%d\n",
++                                  ha->host_no,
++                                  l,
++                                  atomic_read(&lq->q_timer),
++                                  lq->q_count, lq->q_max, lq->q_state));
++                      }
++                      spin_unlock_irqrestore(&lq->q_lock, cpu_flags);
++              } /* End of for luns  */
++      } /* End of for targets  */
++
++      /* Loop down handler. */
++      if (atomic_read(&ha->loop_down_timer) > 0 &&
++          !(test_bit(ABORT_ISP_ACTIVE, &ha->dpc_flags)) && ha->flags.online) {
++
++              /* dg 10/30 if (atomic_read(&ha->loop_down_timer) == LOOP_DOWN_TIME) { */
++              if (atomic_read(&ha->loop_down_timer) ==
++                  ha->loop_down_abort_time ) {
++
++                      DEBUG(printk("scsi(%ld): Loop Down - aborting the "
++                          "queues before time expire\n",
++                          ha->host_no));
++
++                      set_bit(ABORT_QUEUES_NEEDED, &ha->dpc_flags);
++                      start_dpc++;
++              }
++
++              /* if the loop has been down for 4 minutes, reinit adapter */
++              if (atomic_dec_and_test(&ha->loop_down_timer) != 0) {
++                      DEBUG(printk("scsi(%ld): Loop down exceed 4 mins - "
++                          "restarting queues.\n",
++                          ha->host_no));
++
++                      set_bit(RESTART_QUEUES_NEEDED, &ha->dpc_flags);
++                      start_dpc++;
++                      if (!(ha->device_flags & DFLG_NO_CABLE) &&
++                          qla2x00_reinit && !ha->flags.failover_enabled) {
++
++                              DEBUG(printk("scsi(%ld): Loop down - "
++                                  "aborting ISP.\n",
++                                  ha->host_no));
++
++                              set_bit(ISP_ABORT_NEEDED, &ha->dpc_flags);
++                      }
++              }
++              DEBUG3(printk("scsi(%ld): Loop Down - seconds remainning %d\n",
++                  ha->host_no,
++                  atomic_read(&ha->loop_down_timer)));
++      }
++
++      /*
++       * Done Q Handler -- dgFIXME This handler will kick off doneq if we
++       * haven't process it in 2 seconds.
++       */
++      if (!list_empty(&ha->done_queue))
++              schedule_work(&ha->run_qla_task);
++
++#if QLA2100_LIPTEST
++      /*
++       * This block is used to periodically schedule isp abort after
++       * qla2x00_lip flag is set. 
++       */
++
++      /*
++         if (qla2x00_lip && (ha->forceLip++) == (60*2)) {
++         printk("timer: schedule isp abort.\n");
++         set_bit(ISP_ABORT_NEEDED, &ha->dpc_flags);
++         ha->forceLip = 0;
++         }
++       */
++
++      /*
++       * This block is used to periodically schedule mailbox cmd timeout
++       * simulation
++       */
++      if (qla2x00_lip && (ha->forceLip++) == (60*6)) {
++              printk("qla2x00_timer: Going to force mbx timeout\n");
++
++              ha->forceLip = 0;
++              mbxtimeout = 1;
++      }
++#endif
++
++      if (test_bit(FAILOVER_EVENT_NEEDED, &ha->dpc_flags)) {
++              if (ha->failback_delay)  {
++                      ha->failback_delay--;
++                      if (ha->failback_delay == 0)  {
++                              set_bit(FAILOVER_EVENT, &ha->dpc_flags);
++                              clear_bit(FAILOVER_EVENT_NEEDED,
++                                  &ha->dpc_flags);
++                      }
++              } else {
++                      set_bit(FAILOVER_EVENT, &ha->dpc_flags);
++                      clear_bit(FAILOVER_EVENT_NEEDED, &ha->dpc_flags);
++              }
++      }
++
++      /* Schedule the DPC routine if needed */
++      if ((test_bit(ISP_ABORT_NEEDED, &ha->dpc_flags) ||
++          test_bit(LOOP_RESYNC_NEEDED, &ha->dpc_flags) ||
++          start_dpc ||
++          test_bit(LOGIN_RETRY_NEEDED, &ha->dpc_flags) ||
++          test_bit(FAILOVER_EVENT, &ha->dpc_flags) ||
++          test_bit(FAILOVER_NEEDED, &ha->dpc_flags) ||
++          test_bit(MAILBOX_CMD_NEEDED, &ha->dpc_flags)) &&
++          ha->dpc_wait && !ha->dpc_active ) {
++
++              up(ha->dpc_wait);
++      }
++
++      qla2x00_restart_timer(ha, WATCH_INTERVAL);
++}
++
++/*
++ * qla2x00_extend_timeout
++ *      This routine will extend the timeout to the specified value.
++ *
++ * Input:
++ *      cmd = SCSI command structure
++ *
++ * Returns:
++ *      None.
++ */
++void 
++qla2x00_extend_timeout(Scsi_Cmnd *cmd, int timeout) 
++{
++      srb_t *sp = (srb_t *) CMD_SP(cmd);
++      u_long our_jiffies = (timeout * HZ) + jiffies;
++
++      sp->ext_history= 0; 
++      sp->e_start = jiffies;
++      if (cmd->eh_timeout.function) {
++              mod_timer(&cmd->eh_timeout,our_jiffies);
++              sp->ext_history |= 1;
++      }
++      if (sp->timer.function != NULL) {
++              /* 
++               * Our internal timer should timeout before the midlayer has a
++               * chance begin the abort process
++               */
++              mod_timer(&sp->timer,our_jiffies - (QLA_CMD_TIMER_DELTA * HZ));
++
++              sp->ext_history |= 2;
++      }
++}
++
++/**************************************************************************
++*   qla2x00_cmd_timeout
++*
++* Description:
++*       Handles the command if it times out in any state.
++*
++* Input:
++*     sp - pointer to validate
++*
++* Returns:
++* None.
++* Note:Need to add the support for if( sp->state == SRB_FAILOVER_STATE).
++**************************************************************************/
++static void
++qla2x00_cmd_timeout(srb_t *sp)
++{
++      int t, l;
++      int processed;
++      scsi_qla_host_t *vis_ha, *dest_ha;
++      Scsi_Cmnd *cmd;
++      ulong      flags;
++#if defined(QL_DEBUG_LEVEL_3)
++      ulong      cpu_flags;
++#endif
++      fc_port_t       *fcport;
++
++      cmd = sp->cmd;
++      vis_ha = (scsi_qla_host_t *)cmd->device->host->hostdata;
++
++      DEBUG3(printk("cmd_timeout: Entering sp->state = %x\n", sp->state));
++
++      t = SCSI_TCN_32(cmd);
++      l = SCSI_LUN_32(cmd);
++      fcport = sp->fclun->fcport;
++      dest_ha = sp->ha;
++
++      /*
++       * If IO is found either in retry Queue 
++       *    OR in Lun Queue
++       * Return this IO back to host
++       */
++      spin_lock_irqsave(&vis_ha->list_lock, flags);
++      processed = 0;
++      if (sp->state == SRB_PENDING_STATE) {
++              __del_from_pending_queue(vis_ha, sp);
++              DEBUG2(printk("scsi(%ld): Found in Pending queue pid %ld, "
++                  "State = %x., fcport state=%d jiffies=%lx\n",
++                  vis_ha->host_no,
++                  sp->cmd->serial_number, sp->state,
++                  atomic_read(&fcport->state), jiffies));
++
++              /*
++               * If FC_DEVICE is marked as dead return the cmd with
++               * DID_NO_CONNECT status.  Otherwise set the host_byte to
++               * DID_BUS_BUSY to let the OS  retry this cmd.
++               */
++              if (atomic_read(&fcport->state) == FC_DEVICE_DEAD) {
++                      cmd->result = DID_NO_CONNECT << 16;
++              } else {
++                      cmd->result = DID_BUS_BUSY << 16;
++              }
++              __add_to_done_queue(vis_ha, sp);
++              processed++;
++      } 
++      spin_unlock_irqrestore(&vis_ha->list_lock, flags);
++
++      if (processed) {
++               schedule_work(&vis_ha->run_qla_task);
++
++               return;
++      }
++
++      spin_lock_irqsave(&dest_ha->list_lock, flags);
++      if ((sp->state == SRB_RETRY_STATE) ||
++          (sp->state == SRB_SCSI_RETRY_STATE) ||
++          (sp->state == SRB_FAILOVER_STATE)) {
++
++              DEBUG2(printk("scsi(%ld): Found in (Scsi) Retry queue or "
++                  "failover Q pid %ld, State = %x., fcport state=%d "
++                  "jiffies=%lx retried=%d\n",
++                  dest_ha->host_no,
++                  sp->cmd->serial_number, sp->state,
++                  atomic_read(&fcport->state),
++                  jiffies, sp->cmd->retries));
++
++              if ((sp->state == SRB_RETRY_STATE)) {
++                      __del_from_retry_queue(dest_ha, sp);
++              } else if ((sp->state == SRB_SCSI_RETRY_STATE)) {
++                      __del_from_scsi_retry_queue(dest_ha, sp);
++              } else if ((sp->state == SRB_FAILOVER_STATE)) {
++                      __del_from_failover_queue(dest_ha, sp);
++              }
++
++              /*
++               * If FC_DEVICE is marked as dead return the cmd with
++               * DID_NO_CONNECT status.  Otherwise set the host_byte to
++               * DID_BUS_BUSY to let the OS  retry this cmd.
++               */
++              if (dest_ha->flags.failover_enabled) {
++                      cmd->result = DID_BUS_BUSY << 16;
++              } else {
++                      if (atomic_read(&fcport->state) == FC_DEVICE_DEAD) {
++                              cmd->result = DID_NO_CONNECT << 16;
++                              qla2x00_extend_timeout(cmd, EXTEND_CMD_TIMEOUT);
++                      } else {
++                              cmd->result = DID_BUS_BUSY << 16;
++                      }
++              }
++
++              __add_to_done_queue(dest_ha, sp);
++              processed++;
++      } 
++      spin_unlock_irqrestore(&dest_ha->list_lock, flags);
++
++      if (processed) {
++               schedule_work(&dest_ha->run_qla_task);
++
++               return;
++      }
++/* TODO: Remove this code!!! */
++#if defined(QL_DEBUG_LEVEL_3)
++      spin_lock_irqsave(&dest_ha->list_lock, cpu_flags);
++      if (sp->state == SRB_DONE_STATE) {
++              /* IO in done_q  -- leave it */
++              DEBUG(printk("scsi(%ld): Found in Done queue pid %ld sp=%p.\n",
++                  dest_ha->host_no, sp->cmd->serial_number, sp));
++      } else if (sp->state == SRB_SUSPENDED_STATE) {
++              DEBUG(printk("scsi(%ld): Found SP %p in suspended state  "
++                  "- pid %d:\n",
++                  dest_ha->host_no,sp,
++                  (int)sp->cmd->serial_number));
++              DEBUG(qla2x00_dump_buffer((uint8_t *)sp, sizeof(srb_t));)
++      } else if (sp->state == SRB_ACTIVE_STATE) {
++              /*
++               * IO is with ISP find the command in our active list.
++               */
++              spin_unlock_irqrestore(&dest_ha->list_lock, cpu_flags);
++              spin_lock_irqsave(&dest_ha->hardware_lock, flags);
++              if (sp ==
++                  dest_ha->outstanding_cmds[(u_long)CMD_HANDLE(sp->cmd)]) {
++
++                      DEBUG(printk("cmd_timeout: Found in ISP \n");)
++
++                      sp->state = SRB_ACTIVE_TIMEOUT_STATE;
++                      spin_unlock_irqrestore(&dest_ha->hardware_lock, flags);
++              } else {
++                      spin_unlock_irqrestore(&dest_ha->hardware_lock, flags);
++                      printk(KERN_INFO 
++                              "qla_cmd_timeout: State indicates it is with "
++                              "ISP, But not in active array\n");
++              }
++              spin_lock_irqsave(&dest_ha->list_lock, cpu_flags);      /* 01/03 */
++      } else if (sp->state == SRB_ACTIVE_TIMEOUT_STATE) {
++              DEBUG(printk("qla2100%ld: Found in Active timeout state"
++                              "pid %ld, State = %x., \n",
++                              dest_ha->host_no,
++                              sp->cmd->serial_number, sp->state);)
++      } else {
++              /* EMPTY */
++              DEBUG2(printk("cmd_timeout%ld: LOST command state = "
++                              "0x%x, sp=%p\n",
++                              vis_ha->host_no, sp->state,sp);)
++
++              printk(KERN_INFO
++                      "cmd_timeout: LOST command state = 0x%x\n", sp->state);
++      }
++      spin_unlock_irqrestore(&dest_ha->list_lock, cpu_flags);
++#endif
++      
++      DEBUG3(printk("cmd_timeout: Leaving\n");)
++}
++
++/*
++ * qla2x00_done_work
++ *
++ * This is a task to process completion only similar to a
++ * bottom half handler.
++ *
++ *      Input:
++ *      p -- pointer to hba struct
++ *
++ */
++void
++qla2x00_done_work(void *p)
++{
++      scsi_qla_host_t *ha = (scsi_qla_host_t *) p;
++
++      ENTER(__func__);
++
++      set_bit(TASKLET_SCHED, &ha->dpc_flags);
++
++      if (!list_empty(&ha->done_queue))
++              qla2x00_done(ha);
++      
++      clear_bit(TASKLET_SCHED, &ha->dpc_flags);
++
++      LEAVE(__func__);
++}
++
++
++/**************************************************************************
++* qla2x00_done
++*      Process completed commands.
++*
++* Input:
++*      old_ha           = adapter block pointer.
++*
++* Returns:
++* int     
++**************************************************************************/
++int
++qla2x00_done(scsi_qla_host_t *old_ha)
++{
++      os_lun_t        *lq;
++      Scsi_Cmnd       *cmd;
++      unsigned long   flags = 0;
++      scsi_qla_host_t *ha;
++      scsi_qla_host_t *vis_ha;
++      int     cnt;
++      int     send_marker_once = 0;
++      struct list_head        *spl, *sptemp;
++      srb_t           *sp;
++      struct  list_head local_sp_list;
++
++      ENTER(__func__);
++
++      if (test_bit(DONE_RUNNING, &old_ha->dpc_flags))
++              return (0);
++
++      set_bit(DONE_RUNNING, &old_ha->dpc_flags);
++      cnt = 0;
++
++      INIT_LIST_HEAD(&local_sp_list);
++
++      /*
++       * Get into local queue such that we do not wind up calling done queue
++       * takslet for the same IOs from DPC or any other place.
++       */
++      spin_lock_irqsave(&old_ha->list_lock,flags);
++      list_for_each_safe(spl, sptemp, &old_ha->done_queue) {
++              sp = list_entry(spl, srb_t, list);
++
++              /* remove command from done list */
++              list_del_init(&sp->list);
++
++              old_ha->done_q_cnt--;
++              sp->state = SRB_NO_QUEUE_STATE;
++
++              /* add to local queue */
++              list_add_tail(&sp->list, &local_sp_list);
++      }
++      spin_unlock_irqrestore(&old_ha->list_lock, flags);
++
++      /*
++       * All done commands are in the local queue, now do the call back.
++       */
++      list_for_each_safe(spl, sptemp, &local_sp_list) {
++              sp = list_entry(spl, srb_t, list);
++
++              /* remove command from local list */
++              list_del_init(&sp->list);
++
++              cnt++;
++
++              cmd = sp->cmd;
++              if (cmd == NULL)
++                      continue;
++
++              vis_ha = (scsi_qla_host_t *)cmd->device->host->hostdata;
++              lq = sp->lun_queue;
++              ha = lq->fclun->fcport->ha;
++
++              if (sp->flags & SRB_DMA_VALID) {
++                      sp->flags &= ~SRB_DMA_VALID;
++
++                      /* 4.10   64 and 32 bit */
++                      /* Release memory used for this I/O */
++                      if (cmd->use_sg) {
++                              pci_unmap_sg(ha->pdev,
++                                  cmd->request_buffer,
++                                  cmd->use_sg,
++                                  scsi_to_pci_dma_dir(
++                                          cmd->sc_data_direction));
++                      } else if (cmd->request_bufflen) {
++                              pci_unmap_page(ha->pdev,
++                                  sp->saved_dma_handle,
++                                  cmd->request_bufflen,
++                                  scsi_to_pci_dma_dir(
++                                          cmd->sc_data_direction));
++                      }
++              }
++
++              if (!(sp->flags & SRB_IOCTL) && ha->flags.failover_enabled) {
++                      /*
++                       * This routine checks for DID_NO_CONNECT to decide
++                       * whether to failover to another path or not. We only
++                       * failover on that status.
++                       */
++                      if (qla2x00_fo_check(ha,sp)) {
++                              if ((sp->state != SRB_FAILOVER_STATE)) {
++                                      /*
++                                       * Retry the command on this path
++                                       * several times before selecting a new
++                                       * path.
++                                       */
++                                      add_to_pending_queue_head(vis_ha, sp);
++                                      qla2x00_next(vis_ha);
++                              }
++                              else {
++                                      /* we failover this path */
++                                      qla2x00_extend_timeout(sp->cmd,
++                                                      EXTEND_CMD_TIMEOUT);
++                              }
++                              continue;
++                      }
++                      
++              }
++
++              switch ((CMD_RESULT(cmd)>>16)) {
++                      case DID_OK:
++                      case DID_ERROR:
++                              break;
++
++                      case DID_RESET:
++                              /*
++                               * Set marker needed, so we don't have to
++                               * send multiple markers
++                               */
++                              if (!send_marker_once) {
++                                      ha->marker_needed = 1;
++                                      send_marker_once++;
++                              }
++
++                              /*
++                               * WORKAROUND
++                               *
++                               * A backdoor device-reset requires different
++                               * error handling.  This code differentiates
++                               * between normal error handling and the
++                               * backdoor method.
++                               *
++                               */
++                              if (ha->host->eh_active != EH_ACTIVE)
++                                      CMD_RESULT(sp->cmd) =
++                                          DID_BUS_BUSY << 16;
++                              break;
++
++
++                      case DID_ABORT:
++                              sp->flags &= ~SRB_ABORT_PENDING;
++                              sp->flags |= SRB_ABORTED;
++
++                              if (sp->flags & SRB_TIMEOUT)
++                                      CMD_RESULT(cmd)= DID_TIME_OUT << 16;
++
++                              break;
++
++                      default:
++                              DEBUG2(printk("scsi(%ld:%d:%d) %s: did_error "
++                                  "= %d, comp-scsi= 0x%x-0x%x.\n",
++                                  vis_ha->host_no,
++                                  SCSI_TCN_32(cmd),
++                                  SCSI_LUN_32(cmd),
++                                  __func__,
++                                  (CMD_RESULT(cmd)>>16),
++                                  CMD_COMPL_STATUS(cmd),
++                                  CMD_SCSI_STATUS(cmd)));
++                              break;
++              }
++
++              /*
++               * Call the mid-level driver interrupt handler -- via sp_put()
++               */
++              sp_put(ha, sp);
++
++              qla2x00_next(vis_ha);
++
++      } /* end of while */
++      clear_bit(DONE_RUNNING, &old_ha->dpc_flags);
++
++      LEAVE(__func__);
++
++      return (cnt);
++}
++
++/*
++ * qla2x00_next
++ *    Retrieve and process next job in the LUN queue.
++ *
++ * Input:
++ *    tq = SCSI target queue pointer.
++ *    lq = SCSI LUN queue pointer.
++ *    TGT_LOCK must be already obtained.
++ *
++ * Output:
++ *    Releases TGT_LOCK upon exit.
++ *
++ * Context:
++ *    Kernel/Interrupt context.
++ * 
++ * Note: This routine will always try to start I/O from visible HBA.
++ */
++void
++qla2x00_next(scsi_qla_host_t *vis_ha) 
++{
++      scsi_qla_host_t *dest_ha;
++      fc_port_t       *fcport;
++      srb_t           *sp;
++      int             rval;
++      unsigned long   flags;
++
++      ENTER(__func__);
++
++      spin_lock_irqsave(&vis_ha->list_lock, flags);
++      while (!list_empty(&vis_ha->pending_queue)) {
++              sp = list_entry(vis_ha->pending_queue.next, srb_t, list);
++
++              fcport = sp->fclun->fcport;
++              dest_ha = fcport->ha;
++
++              /* Check if command can be started, exit if not. */
++              if (LOOP_TRANSITION(dest_ha)) {
++                      break;
++              }
++
++              __del_from_pending_queue(vis_ha, sp);
++
++              /* If device is dead then send request back to OS */
++              if ((dest_ha->flags.link_down_error_enable &&
++                  atomic_read(&fcport->state) == FC_DEVICE_DEAD)) {
++
++                      CMD_RESULT(sp->cmd) = DID_NO_CONNECT << 16;
++
++                      if (!atomic_read(&dest_ha->loop_down_timer) &&
++                          dest_ha->loop_state == LOOP_DOWN) {
++                              sp->err_id = 2;
++                      } else {
++                              sp->err_id = 1;
++                      }
++                      DEBUG3(printk("scsi(%ld): loop/port is down - "
++                          "pid=%ld, sp=%p loopid=0x%x queued to dest HBA "
++                          "scsi%ld.\n",
++                          dest_ha->host_no,
++                          sp->cmd->serial_number, sp,
++                          fcport->loop_id, dest_ha->host_no));
++                      /* 
++                       * Initiate a failover - done routine will initiate.
++                       */
++                      __add_to_done_queue(vis_ha, sp);
++
++                      continue;
++              }
++
++              /*
++               * SCSI Kluge: Whenever, we need to wait for an event such as
++               * loop down (i.e. loop_down_timer ) or port down (i.e.  LUN
++               * request qeueue is suspended) then we will recycle new
++               * commands back to the SCSI layer.  We do this because this is
++               * normally a temporary condition and we don't want the
++               * mid-level scsi.c driver to get upset and start aborting
++               * commands.  The timeout value is extracted from the command
++               * minus 1-second and put on a retry queue (watchdog). Once the
++               * command timeout it is returned to the mid-level with a BUSY
++               * status, so the mid-level will retry it. This process
++               * continues until the LOOP DOWN time expires or the condition
++               * goes away.
++               */
++              if (!(sp->flags & SRB_IOCTL) &&
++                  (atomic_read(&fcport->state) != FC_ONLINE ||
++                      test_bit(ABORT_ISP_ACTIVE, &dest_ha->dpc_flags) ||
++                      (dest_ha->loop_state != LOOP_READY) ||
++                      (sp->flags & SRB_FAILOVER))) {
++
++                      DEBUG3(printk("scsi(%ld): port=(0x%x) retry_q(%d) "
++                          "loop state = %d, loop counter = 0x%x dpc flags "
++                          "= 0x%lx\n",
++                          dest_ha->host_no,
++                          fcport->loop_id,
++                          atomic_read(&fcport->state),
++                          dest_ha->loop_state,
++                          atomic_read(&dest_ha->loop_down_timer),
++                          dest_ha->dpc_flags));
++
++                      qla2x00_extend_timeout(sp->cmd, EXTEND_CMD_TIMEOUT);
++                      __add_to_retry_queue(vis_ha, sp);
++
++                      continue;
++              } 
++
++              /*
++               * If this request's lun is suspended then put the request on
++               * the  scsi_retry queue. 
++               */
++              if (!(sp->flags & SRB_IOCTL) &&
++                  sp->lun_queue->q_state == LUN_STATE_WAIT) {
++                      DEBUG3(printk("scsi(%ld): lun wait state - pid=%ld, "
++                          "opcode=%d, allowed=%d, retries=%d\n",
++                          dest_ha->host_no,
++                          sp->cmd->serial_number,
++                          sp->cmd->cmnd[0],
++                          sp->cmd->allowed,
++                          sp->cmd->retries));
++                              
++                      __add_to_scsi_retry_queue(vis_ha, sp);
++
++                      continue;
++              }
++
++              sp->lun_queue->io_cnt++;
++
++              /* Release target queue lock */
++              spin_unlock_irqrestore(&vis_ha->list_lock, flags);
++
++              rval = qla2x00_start_scsi(sp);
++
++              spin_lock_irqsave(&vis_ha->list_lock, flags);
++
++              if (rval != QLA2X00_SUCCESS) {
++                      /* Place request back on top of device queue */
++                      /* add to the top of queue */
++                      __add_to_pending_queue_head(vis_ha, sp);
++
++                      sp->lun_queue->io_cnt--;
++                      break;
++              }
++      }
++      spin_unlock_irqrestore(&vis_ha->list_lock, flags);
++
++      LEAVE(__func__);
++}
++
++/*
++ *  qla2x00_flush_failover_queue
++ *    Return cmds of a "specific" LUN from the failover queue with
++ *      DID_BUS_BUSY status.
++ *
++ * Input:
++ *    ha = adapter block pointer.
++ *      q  = lun queue.
++ *
++ * Context:
++ *    Interrupt context.
++ */
++void
++qla2x00_flush_failover_q(scsi_qla_host_t *ha, os_lun_t *q)
++{
++      srb_t  *sp;
++      struct list_head *list, *temp;
++      unsigned long flags;
++
++      spin_lock_irqsave(&ha->list_lock, flags);
++      list_for_each_safe(list, temp, &ha->failover_queue) {
++              sp = list_entry(list, srb_t, list);
++              /*
++               * If request originated from the same lun_q then delete it
++               * from the failover queue 
++               */
++              if (q == sp->lun_queue) {
++                      /* Remove srb from failover queue. */
++                      __del_from_failover_queue(ha,sp);
++                      CMD_RESULT(sp->cmd) = DID_BUS_BUSY << 16;
++                      CMD_HANDLE(sp->cmd) = (unsigned char *) NULL;
++                      __add_to_done_queue(ha, sp);
++              }
++      }
++      spin_unlock_irqrestore(&ha->list_lock, flags);
++}
++
++
++/*
++ * qla2x00_reset_lun_fo_counts
++ *    Reset failover retry counts
++ *
++ * Input:
++ *    ha = adapter block pointer.
++ *
++ * Context:
++ *    Interrupt context.
++ */
++void 
++qla2x00_reset_lun_fo_counts(scsi_qla_host_t *ha, os_lun_t *lq) 
++{
++      srb_t           *tsp;
++      os_lun_t        *orig_lq;
++      struct list_head *list;
++      unsigned long   flags ;
++
++      spin_lock_irqsave(&ha->list_lock, flags);
++      /*
++       * the pending queue.
++       */
++      list_for_each(list,&ha->pending_queue) {
++              tsp = list_entry(list, srb_t, list);
++              orig_lq = tsp->lun_queue;
++              if (orig_lq == lq)
++                      tsp->fo_retry_cnt = 0;
++      }
++      /*
++       * the retry queue.
++       */
++      list_for_each(list,&ha->retry_queue) {
++              tsp = list_entry(list, srb_t, list);
++              orig_lq = tsp->lun_queue;
++              if (orig_lq == lq)
++                      tsp->fo_retry_cnt = 0;
++      }
++
++      /*
++       * the done queue.
++       */
++      list_for_each(list, &ha->done_queue) {
++              tsp = list_entry(list, srb_t, list);
++              orig_lq = tsp->lun_queue;
++              if (orig_lq == lq)
++                      tsp->fo_retry_cnt = 0;
++      }
++      spin_unlock_irqrestore(&ha->list_lock, flags);
++}
++
++/*
++ *  qla2x00_failover_cleanup
++ *    Cleanup queues after a failover.
++ *
++ * Input:
++ *    sp = command pointer
++ *
++ * Context:
++ *    Interrupt context.
++ */
++static void
++qla2x00_failover_cleanup(srb_t *sp) 
++{
++      CMD_RESULT(sp->cmd) = DID_BUS_BUSY << 16;
++      CMD_HANDLE(sp->cmd) = (unsigned char *) NULL;
++
++      /* turn-off all failover flags */
++      sp->flags = sp->flags & ~(SRB_RETRY|SRB_FAILOVER|SRB_FO_CANCEL);
++}
++
++
++/*
++ *  qla2x00_process_failover
++ *    Process any command on the failover queue.
++ *
++ * Input:
++ *    ha = adapter block pointer.
++ *
++ * Context:
++ *    Interrupt context.
++ */
++static void
++qla2x00_process_failover(scsi_qla_host_t *ha) 
++{
++
++      os_tgt_t        *tq;
++      os_lun_t        *lq;
++      srb_t       *sp;
++      fc_port_t *fcport;
++      struct list_head *list, *temp;
++      unsigned long flags;
++      uint32_t    t, l;
++      scsi_qla_host_t *vis_ha = NULL;
++
++      DEBUG(printk("scsi(%ld): Processing failover for hba.\n", ha->host_no));
++
++      /*
++       * Process all the commands in the failover queue. Attempt to failover
++       * then either complete the command as is or requeue for retry.
++       */
++
++      /* Prevent or allow acceptance of new I/O requests. */
++      spin_lock_irqsave(&ha->list_lock, flags);
++
++      /*
++       * Get first entry to find our visible adapter.  We could never get
++       * here if the list is empty
++       */
++      list = ha->failover_queue.next;
++      sp = list_entry(list, srb_t, list);
++      vis_ha = (scsi_qla_host_t *) sp->cmd->device->host->hostdata;
++      list_for_each_safe(list, temp, &ha->failover_queue) {
++              sp = list_entry(list, srb_t, list);
++
++              tq = sp->tgt_queue;
++              lq = sp->lun_queue;
++              fcport = lq->fclun->fcport;
++
++              /* Remove srb from failover queue. */
++              __del_from_failover_queue(ha, sp);
++
++              DEBUG2(printk("%s(): pid %ld retrycnt=%d\n",
++                  __func__, sp->cmd->serial_number, sp->cmd->retries));
++
++              /*** Select an alternate path ***/
++              /* 
++               * If the path has already been change by a previous request
++               * sp->fclun != lq->fclun
++               */
++              if (sp->fclun != lq->fclun ||
++                  atomic_read(&fcport->state) != FC_DEVICE_DEAD) {
++
++                      qla2x00_failover_cleanup(sp);
++
++              } else if (qla2x00_cfg_failover(ha,
++                  lq->fclun, tq, sp) == NULL) {
++
++                      /*
++                       * We ran out of paths, so just post the status which
++                       * is already set in the cmd.
++                       */
++                      printk(KERN_INFO
++                          "scsi(%ld): Ran out of paths - pid %ld\n",
++                          ha->host_no, sp->cmd->serial_number);
++              } else {
++                      qla2x00_failover_cleanup(sp);
++
++              }
++              __add_to_done_queue(ha, sp);
++      } /* list_for_each_safe */
++      spin_unlock_irqrestore(&ha->list_lock,flags);
++
++      for (t = 0; t < vis_ha->max_targets; t++) {
++              if ((tq = vis_ha->otgt[t]) == NULL)
++                      continue;
++              for (l = 0; l < vis_ha->max_luns; l++) {
++                      if ((lq = (os_lun_t *) tq->olun[l]) == NULL)
++                              continue;
++
++                      if( test_and_clear_bit(LUN_MPIO_BUSY, &lq->q_flag) ) {
++                              /* EMPTY */
++                              DEBUG(printk("scsi(%ld): remove suspend for "
++                                  "lun %d\n", ha->host_no, lq->fclun->lun));
++                      }
++              }
++      }
++
++      //qla2x00_restart_queues(ha,TRUE);
++      qla2x00_restart_queues(ha, FALSE);
++
++      DEBUG(printk("%s() - done", __func__));
++}
++
++/**************************************************************************
++*   qla2x00_check_tgt_status
++*
++* Description:
++*     Checks to see if the target or loop is down.
++*
++* Input:
++*     cmd - pointer to Scsi cmd structure
++*
++* Returns:
++*   1 - if target is present
++*   0 - if target is not present
++*
++**************************************************************************/
++uint8_t
++qla2x00_check_tgt_status(scsi_qla_host_t *ha, Scsi_Cmnd *cmd)
++{
++      os_lun_t        *lq;
++      uint32_t         b, t, l;
++      fc_port_t       *fcport;
++
++      /* Generate LU queue on bus, target, LUN */
++      b = SCSI_BUS_32(cmd);
++      t = SCSI_TCN_32(cmd);
++      l = SCSI_LUN_32(cmd);
++
++      if ((lq = GET_LU_Q(ha,t,l)) == NULL) {
++              return(QL_STATUS_ERROR);
++      }
++
++      fcport = lq->fclun->fcport;
++
++      if (TGT_Q(ha, t) == NULL ||
++          l >= ha->max_luns ||
++          (atomic_read(&fcport->state) == FC_DEVICE_DEAD) ||
++          (!atomic_read(&ha->loop_down_timer) &&
++              ha->loop_state == LOOP_DOWN) ||
++          (test_bit(ABORT_ISP_ACTIVE, &ha->dpc_flags)) ||
++          ABORTS_ACTIVE ||
++          ha->loop_state != LOOP_READY) {
++
++              DEBUG(printk(KERN_INFO
++                  "scsi(%ld:%2d:%2d:%2d): %s connection is down\n",
++                  ha->host_no,
++                  b, t, l,
++                  __func__));
++
++              CMD_RESULT(cmd) = DID_NO_CONNECT << 16;
++              return(QL_STATUS_ERROR);
++      }
++      return (QL_STATUS_SUCCESS);
++}
++
++/**************************************************************************
++*   qla2x00_check_port_status
++*
++* Description:
++*     Checks to see if the port or loop is down.
++*
++* Input:
++*     fcport - pointer to fc_port_t structure.
++*
++* Returns:
++*   1 - if port is present
++*   0 - if port is not present
++*
++**************************************************************************/
++uint8_t
++qla2x00_check_port_status(scsi_qla_host_t *ha, fc_port_t *fcport)
++{
++      uint32_t        port_state;
++
++      if (fcport == NULL) {
++              return(QL_STATUS_ERROR);
++      }
++
++      port_state = (uint32_t)atomic_read(&fcport->state);
++      if ((port_state != FC_ONLINE) ||
++          (port_state == FC_DEVICE_DEAD) ||
++          (!atomic_read(&ha->loop_down_timer) &&
++              ha->loop_state == LOOP_DOWN) ||
++          (test_bit(ABORT_ISP_ACTIVE, &ha->dpc_flags)) ||
++          test_bit(CFG_ACTIVE, &ha->cfg_flags) ||
++          ABORTS_ACTIVE || ha->loop_state != LOOP_READY) {
++
++              DEBUG(printk(KERN_INFO
++                  "scsi(%ld): Connection is down. fcport=%p.\n",
++                  ha->host_no, fcport));
++
++              return (QL_STATUS_ERROR);
++      }
++
++      return (QL_STATUS_SUCCESS);
++}
++
++/****************************************************************************/
++/* Create character driver "HbaApiDev" w dynamically allocated major number */
++/* and create "/proc/scsi/qla2x00/HbaApiNode" as the device node associated */
++/* with the major number.                                                   */
++/****************************************************************************/
++
++#define APIDEV_NODE  "HbaApiNode"
++#define APIDEV_NAME  "HbaApiDev"
++
++static int apidev_major = 0;
++static struct Scsi_Host *apidev_host = 0;
++
++static struct file_operations apidev_fops = {
++      .ioctl = apidev_ioctl,
++      .open = apidev_open,
++      .release = apidev_close,
++};
++
++static int 
++apidev_init(struct Scsi_Host *host) 
++{
++      if (apidev_host)
++              return (0);
++
++      apidev_major = register_chrdev(0, APIDEV_NAME, &apidev_fops);
++      if (0 > apidev_major) {
++              DEBUG(printk("%s(): register_chrdev rc=%d\n",
++                  __func__, apidev_major));
++
++              return (apidev_major);
++      }
++
++      apidev_host = host;
++
++      DEBUG(printk("%s(): Creating (%s) %s/%s major=%d\n",
++          __func__,
++          host->hostt->proc_name, host->hostt->proc_dir->name,
++          APIDEV_NODE, apidev_major));
++
++      proc_mknod(APIDEV_NODE, 0777+S_IFCHR, host->hostt->proc_dir,
++          (kdev_t)mk_kdev(apidev_major, 0));
++
++      return 0;
++}
++
++static int apidev_cleanup() 
++{
++      if (!apidev_host)
++              return (0);
++
++      unregister_chrdev(apidev_major,APIDEV_NAME);
++      remove_proc_entry(APIDEV_NODE,apidev_host->hostt->proc_dir);
++      apidev_host = 0;
++
++      return (0);
++}
++
++static int 
++apidev_open(struct inode *inode, struct file *file) 
++{
++      DEBUG9(printk(KERN_INFO
++          "%s(): open MAJOR number = %d, MINOR number = %d\n",
++          __func__, major(inode->i_rdev), minor(inode->i_rdev)));
++
++      return 0;
++}
++
++static int 
++apidev_close(struct inode *inode, struct file *file) 
++{
++      DEBUG9(printk(KERN_INFO
++          "%s(): closed\n", __func__));
++
++      return 0;
++}
++
++static int 
++apidev_ioctl(struct inode *inode,
++    struct file *fp, unsigned int cmd, unsigned long arg) 
++{
++      /*
++       * Since this var is not really used, use static type to conserve
++       * stack space.
++       */
++      static Scsi_Device dummy_scsi_device;
++
++      dummy_scsi_device.host = apidev_host;
++
++      return (qla2x00_ioctl(&dummy_scsi_device, (int)cmd, (void*)arg));
++}
++
++#define driver_template qla2x00_driver_template
++#include "scsi_module.c"
+--- /dev/null  Thu Apr 11 07:25:15 2002
++++ linux-2.5.73-n9560/drivers/scsi/qla2xxx/qla_os.h   Thu Jul  3 15:34:42 2003
+@@ -0,0 +1,156 @@
++/******************************************************************************
++ *                  QLOGIC LINUX SOFTWARE
++ *
++ * QLogic ISP2x00 device driver for Linux 2.5.x
++ * Copyright (C) 2003 Qlogic Corporation
++ * (www.qlogic.com)
++ *
++ * Portions (C) Arjan van de Ven <arjanv@redhat.com> for Red Hat, Inc.
++ *
++ * This program is free software; you can redistribute it and/or modify it
++ * under the terms of the GNU General Public License as published by the
++ * Free Software Foundation; either version 2, 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.
++ *
++ ******************************************************************************/
++
++#ifndef __QLA_OS_H
++#define __QLA_OS_H
++
++/*
++ * Driver debug definitions.
++ */
++/* #define QL_DEBUG_LEVEL_1  */ /* Output register accesses to COM1 */
++/* #define QL_DEBUG_LEVEL_2  */ /* Output error msgs to COM1 */
++/* #define QL_DEBUG_LEVEL_3  */ /* Output function trace msgs to COM1 */
++/* #define QL_DEBUG_LEVEL_4  */ /* Output NVRAM trace msgs to COM1 */
++/* #define QL_DEBUG_LEVEL_5  */ /* Output ring trace msgs to COM1 */
++/* #define QL_DEBUG_LEVEL_6  */ /* Output WATCHDOG timer trace to COM1 */
++/* #define QL_DEBUG_LEVEL_7  */ /* Output RISC load trace msgs to COM1 */
++/* #define QL_DEBUG_LEVEL_8  */ /* Output ring saturation msgs to COM1 */
++/* #define QL_DEBUG_LEVEL_9  */ /* Output IOCTL trace msgs */
++/* #define QL_DEBUG_LEVEL_10 */ /* Output IOCTL error msgs */
++/* #define QL_DEBUG_LEVEL_11 */ /* Output Mbx Cmd trace msgs */
++/* #define QL_DEBUG_LEVEL_12 */ /* Output IP trace msgs */
++/*
++ *  Local Macro Definitions.
++ */
++#if defined(QL_DEBUG_LEVEL_1)  || defined(QL_DEBUG_LEVEL_2) || \
++    defined(QL_DEBUG_LEVEL_3)  || defined(QL_DEBUG_LEVEL_4) || \
++    defined(QL_DEBUG_LEVEL_5)  || defined(QL_DEBUG_LEVEL_6) || \
++    defined(QL_DEBUG_LEVEL_7)  || defined(QL_DEBUG_LEVEL_8) || \
++    defined(QL_DEBUG_LEVEL_9)  || defined(QL_DEBUG_LEVEL_10) || \
++    defined(QL_DEBUG_LEVEL_11) || defined(QL_DEBUG_LEVEL_12)
++    #define QL_DEBUG_ROUTINES
++#endif
++
++#include <linux/config.h>
++#ifndef QLA_MODVERSION
++#define __NO_VERSION__
++#endif
++#include <linux/module.h>
++#include <linux/version.h>
++#include <linux/init.h>
++#include <linux/string.h>
++#include <linux/errno.h>
++#include <linux/kernel.h>
++#include <linux/ioport.h>
++#include <linux/delay.h>
++#include <linux/timer.h>
++#include <linux/sched.h>
++#include <linux/pci.h>
++#include <linux/proc_fs.h>
++#include <linux/blk.h>
++#include <linux/interrupt.h>
++#include <linux/stat.h>
++#include <linux/slab.h>
++#define __KERNEL_SYSCALLS__
++#include <linux/unistd.h>
++#include <linux/smp_lock.h>
++#include <linux/bio.h>
++#include <linux/moduleparam.h>
++
++#include <asm/system.h>
++
++#include <asm/io.h>
++#include <asm/irq.h>
++#include <asm/segment.h>
++#include <asm/byteorder.h>
++#include <asm/pgtable.h>
++
++#include "scsi.h"
++#include "hosts.h"
++
++#if defined(FC_IP_SUPPORT)
++#include <linux/ip.h>
++#include <linux/if_arp.h>
++#include <linux/skbuff.h>
++#endif
++
++#include <linux/ioctl.h>
++#include <scsi/scsi_ioctl.h>
++#include <asm/uaccess.h>
++
++//TODO Fix this!!!
++/*
++* String arrays
++*/
++#define LINESIZE    256
++#define MAXARGS      26
++
++/* PCI interface definitions */
++struct qla_fw_info {
++      unsigned short  addressing;     /* addressing method used to load fw */
++#define FW_INFO_ADDR_NORMAL   0
++#define FW_INFO_ADDR_EXTENDED 1
++#define FW_INFO_ADDR_NOMORE   0xffff
++      unsigned short  *fwcode;        /* pointer to FW array */
++      unsigned short  *fwlen;         /* number of words in array */
++      unsigned short  *fwstart;       /* start address for F/W */
++      unsigned long   *lfwstart;      /* start address (long) for F/W */
++};
++struct qla_board_info {
++      char                    name[9];        /* Board ID String */
++      struct qla_fw_info      *fwinfo;
++};
++
++/***********************************************************************
++* We use the Scsi_Pointer structure that's included with each command
++* SCSI_Cmnd as a scratchpad. 
++*
++* SCp is defined as follows:
++*  - SCp.ptr  -- > pointer to the SRB
++*  - SCp.this_residual  -- > HBA completion status for ioctl code. 
++*
++* Cmnd->host_scribble --> Used to hold the hba actived handle (1..255).
++***********************************************************************/
++#define       CMD_SP(Cmnd)            ((Cmnd)->SCp.ptr)
++#define CMD_COMPL_STATUS(Cmnd)  ((Cmnd)->SCp.this_residual)
++#define       CMD_HANDLE(Cmnd)        ((Cmnd)->host_scribble)
++/* Additional fields used by ioctl passthru */
++#define CMD_RESID_LEN(Cmnd)   ((Cmnd)->SCp.buffers_residual)
++#define CMD_SCSI_STATUS(Cmnd) ((Cmnd)->SCp.Status)
++#define CMD_ACTUAL_SNSLEN(Cmnd)       ((Cmnd)->SCp.Message)
++#define CMD_ENTRY_STATUS(Cmnd)        ((Cmnd)->SCp.have_data_in)
++
++/*
++ * Other SCS__Cmnd members we only reference
++ */
++#define       CMD_XFRLEN(Cmnd)        (Cmnd)->request_bufflen
++#define       CMD_CDBLEN(Cmnd)        (Cmnd)->cmd_len
++#define       CMD_CDBP(Cmnd)          (Cmnd)->cmnd
++#define       CMD_SNSP(Cmnd)          (Cmnd)->sense_buffer
++#define       CMD_SNSLEN(Cmnd)        (sizeof (Cmnd)->sense_buffer)
++#define       CMD_RESULT(Cmnd)        ((Cmnd)->result)
++#define       CMD_TIMEOUT(Cmnd)       ((Cmnd)->timeout_per_command)
++
++#define  SCSI_BUS_32(scp)     ((scp)->device->channel)
++#define  SCSI_TCN_32(scp)     ((scp)->device->id)
++#define  SCSI_LUN_32(scp)     ((scp)->device->lun)
++
++#endif
+--- /dev/null  Thu Apr 11 07:25:15 2002
++++ linux-2.5.73-n9560/drivers/scsi/qla2xxx/qla_settings.h     Thu Jul  3 15:34:42 2003
+@@ -0,0 +1,80 @@
++/******************************************************************************
++ *                  QLOGIC LINUX SOFTWARE
++ *
++ * QLogic ISP2x00 device driver for Linux 2.5.x
++ * Copyright (C) 2003 Qlogic Corporation
++ * (www.qlogic.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, 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.
++ *
++ ******************************************************************************/
++/*
++ * Compile time Options:
++ *     0 - Disable and 1 - Enable
++ */
++#define MEMORY_MAPPED_IO              0
++#define STOP_ON_ERROR                 0   /* Stop on aborts and resets  */
++#define STOP_ON_RESET                 0
++#define STOP_ON_ABORT                 0
++#define QLA_SCSI_VENDOR_DIR           0 /* Decode vendor specific opcodes for direction */
++#define QLA2100_LIPTEST              0
++#define REQ_TRACE                    1
++#define USE_ABORT_TGT                  1 /* Use Abort Target mbx cmd */
++
++#define DEBUG_QLA2100                 0  /* For Debug of qla2x00 */
++
++#define MPIO_SUPPORT                  0
++#define VSA                           0  /* Volume Set Addressing */
++
++/* 
++ * When a lun is suspended for the "Not Ready" condition
++ * then it will suspend the lun for increments of 6 sec delays.
++ * SUSPEND_COUNT is that count.
++ */
++#define SUSPEND_COUNT                         10  /* 6 secs * 10 retries = 60 secs */
++                                      
++/* Failover options */
++#define MAX_RECOVERYTIME              10  /* Max suspend time for a lun recovery time */
++#define MAX_FAILBACKTIME              5  /* (60) Max suspend time before failing back */
++
++#define QLA_CMD_TIMER_DELTA           3
++
++#define MAX_RETRIES_OF_ISP_ABORT      5  /*  */
++
++/*
++ * Defines the time in seconds that 
++ * the driver extends the command timeout
++ * to get around the problem where the
++ * mid-layer only allows 5 retries for commands
++ * that return BUS_BUSY
++ */
++#define EXTEND_CMD_TIMEOUT             60
++
++/*
++ * We need to hardcode this value since the firmware
++ * does not allow us to retrieve the maximum number of 
++ * IOCBs available during initializtion.
++ *
++ * Factors that affect this value include the amount of 
++ * memory on-board (HBA) and firmware IP support.
++ *
++ */
++#undef IOCB_THROTTLE_USAGE
++#undef IOCB_HIT_RATE
++#define MAX_IOCBS_AVAILBALE           3000
++
++/*
++ * Some vendor subsystems do not recover properly after a device reset.  Define
++ * the following to force a logout after a successful device reset.
++ */
++#undef LOGOUT_AFTER_DEVICE_RESET
++
++#include "qla_version.h"
+--- /dev/null  Thu Apr 11 07:25:15 2002
++++ linux-2.5.73-n9560/drivers/scsi/qla2xxx/qla_sup.c  Thu Jul  3 15:34:42 2003
+@@ -0,0 +1,560 @@
++/******************************************************************************
++ *                  QLOGIC LINUX SOFTWARE
++ *
++ * QLogic ISP2x00 device driver for Linux 2.5.x
++ * Copyright (C) 2003 Qlogic Corporation
++ * (www.qlogic.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, 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 "qla_os.h"
++#include "qla_def.h"
++
++static uint16_t qla2x00_nvram_request(scsi_qla_host_t *, uint32_t);
++
++static void qla2x00_flash_enable(scsi_qla_host_t *);
++static void qla2x00_flash_disable(scsi_qla_host_t *);
++
++uint8_t qla2x00_read_flash_byte(scsi_qla_host_t *, uint32_t);
++static void qla2x00_write_flash_byte(scsi_qla_host_t *, uint32_t, uint8_t);
++static uint8_t qla2x00_poll_flash(scsi_qla_host_t *ha,
++              uint32_t addr, uint8_t poll_data, uint8_t mid);
++static uint8_t qla2x00_program_flash_address(scsi_qla_host_t *ha,
++              uint32_t addr, uint8_t data, uint8_t mid);
++static uint8_t qla2x00_erase_flash_sector(scsi_qla_host_t *ha,
++              uint32_t addr, uint32_t sec_mask, uint8_t mid);
++
++uint8_t qla2x00_get_flash_manufacturer(scsi_qla_host_t *ha);
++uint16_t qla2x00_get_flash_version(scsi_qla_host_t *);
++uint16_t qla2x00_get_flash_image(scsi_qla_host_t *ha, uint8_t *image);
++uint16_t qla2x00_set_flash_image(scsi_qla_host_t *ha, uint8_t *image);
++
++
++/*
++ * NVRAM support routines
++ */
++
++/**
++ * qla2x00_get_nvram_word() - Calculates word position in NVRAM and calls the
++ *    request routine to get the word from NVRAM.
++ * @ha: HA context
++ * @addr: Address in NVRAM to read
++ *
++ * Returns the word read from nvram @addr.
++ */
++uint16_t
++qla2x00_get_nvram_word(scsi_qla_host_t *ha, uint32_t addr)
++{
++      uint16_t        data;
++      uint32_t        nv_cmd;
++
++      ENTER(__func__);
++
++      nv_cmd = addr << 16;
++      nv_cmd |= NV_READ_OP;
++      data = qla2x00_nvram_request(ha, nv_cmd);
++
++      DEBUG4(printk("%s(%ld): NVRAM[%lx]=%lx.\n",
++          __func__, ha->host_no, (u_long)addr, (u_long)data));
++
++      LEAVE(__func__);
++
++      return (data);
++}
++
++/**
++ * qla2x00_nvram_request() - Sends read command to NVRAM and gets data from
++ *    NVRAM.
++ * @ha: HA context
++ * @nv_cmd: NVRAM command
++ *
++ * Bit definitions for NVRAM command:
++ *
++ *    Bit 26     = start bit
++ *    Bit 25, 24 = opcode
++ *    Bit 23-16  = address
++ *    Bit 15-0   = write data
++ *
++ * Returns the word read from nvram @addr.
++ */
++static uint16_t
++qla2x00_nvram_request(scsi_qla_host_t *ha, uint32_t nv_cmd)
++{
++      uint8_t         cnt;
++      device_reg_t    *reg = ha->iobase;
++      uint16_t        data = 0;
++      uint16_t        reg_data;
++
++      /* Send command to NVRAM. */
++      nv_cmd <<= 5;
++      for (cnt = 0; cnt < 11; cnt++) {
++              if (nv_cmd & BIT_31)
++                      qla2x00_nv_write(ha, NVR_DATA_OUT);
++              else
++                      qla2x00_nv_write(ha, 0);
++              nv_cmd <<= 1;
++      }
++
++      /* Read data from NVRAM. */
++      for (cnt = 0; cnt < 16; cnt++) {
++              WRT_REG_WORD(&reg->nvram, NVR_SELECT | NVR_CLOCK);
++              NVRAM_DELAY();
++              data <<= 1;
++              reg_data = RD_REG_WORD(&reg->nvram);
++              if (reg_data & NVR_DATA_IN)
++                      data |= BIT_0;
++              WRT_REG_WORD(&reg->nvram, NVR_SELECT);
++              NVRAM_DELAY();
++      }
++
++      /* Deselect chip. */
++      WRT_REG_WORD(&reg->nvram, NVR_DESELECT);
++      NVRAM_DELAY();
++
++      return (data);
++}
++
++/**
++ * qla2x00_nv_write() - Clean NVRAM operations.
++ * @ha: HA context
++ */
++void
++qla2x00_nv_deselect(scsi_qla_host_t *ha)
++{
++      device_reg_t *reg = ha->iobase;
++
++      WRT_REG_WORD(&reg->nvram, NVR_DESELECT);
++      NVRAM_DELAY();
++}
++
++/**
++ * qla2x00_nv_write() - Prepare for NVRAM read/write operation.
++ * @ha: HA context
++ * @data: Serial interface selector
++ */
++void
++qla2x00_nv_write(scsi_qla_host_t *ha, uint16_t data)
++{
++      device_reg_t *reg = ha->iobase;
++
++      WRT_REG_WORD(&reg->nvram, data | NVR_SELECT);
++      NVRAM_DELAY();
++      WRT_REG_WORD(&reg->nvram, data | NVR_SELECT | NVR_CLOCK);
++      NVRAM_DELAY();
++      WRT_REG_WORD(&reg->nvram, data | NVR_SELECT);
++      NVRAM_DELAY();
++}
++
++/*
++ * Flash support routines
++ */
++
++/**
++ * qla2x00_flash_enable() - Setup flash for reading and writing.
++ * @ha: HA context
++ */
++static void
++qla2x00_flash_enable(scsi_qla_host_t *ha)
++{
++      uint16_t        data;
++      device_reg_t    *reg = ha->iobase;
++
++      data = RD_REG_WORD(&reg->ctrl_status);
++      data |= CSR_FLASH_ENABLE;
++      WRT_REG_WORD(&reg->ctrl_status, data);
++}
++
++/**
++ * qla2x00_flash_disable() - Disable flash and allow RISC to run.
++ * @ha: HA context
++ */
++static void
++qla2x00_flash_disable(scsi_qla_host_t *ha)
++{
++      uint16_t        data;
++      device_reg_t    *reg = ha->iobase;
++
++      data = RD_REG_WORD(&reg->ctrl_status);
++      data &= ~(CSR_FLASH_ENABLE);
++      WRT_REG_WORD(&reg->ctrl_status, data);
++}
++
++/**
++ * qla2x00_read_flash_byte() - Reads a byte from flash
++ * @ha: HA context
++ * @addr: Address in flash to read
++ *
++ * A word is read from the chip, but, only the lower byte is valid.
++ *
++ * Returns the byte read from flash @addr.
++ */
++uint8_t
++qla2x00_read_flash_byte(scsi_qla_host_t *ha, uint32_t addr)
++{
++      uint16_t        data;
++      uint16_t        bank_select;
++      device_reg_t    *reg = ha->iobase;
++
++      /* Setup bit 16 of flash address. */
++      bank_select = RD_REG_WORD(&reg->ctrl_status);
++      if ((addr & BIT_16) && ((bank_select & CSR_FLASH_64K_BANK) == 0)) {
++              bank_select |= CSR_FLASH_64K_BANK;
++              WRT_REG_WORD(&reg->ctrl_status, bank_select);
++      } else if (((addr & BIT_16) == 0) &&
++          (bank_select & CSR_FLASH_64K_BANK)) {
++              bank_select &= ~(CSR_FLASH_64K_BANK);
++              WRT_REG_WORD(&reg->ctrl_status, bank_select);
++      }
++      WRT_REG_WORD(&reg->flash_address, (uint16_t)addr);
++      data = qla2x00_debounce_register(&reg->flash_data);
++
++      return ((uint8_t)data);
++}
++
++/**
++ * qla2x00_write_flash_byte() - Write a byte to flash
++ * @ha: HA context
++ * @addr: Address in flash to write
++ * @data: Data to write
++ */
++static void
++qla2x00_write_flash_byte(scsi_qla_host_t *ha, uint32_t addr, uint8_t data)
++{
++      uint16_t        bank_select;
++      device_reg_t    *reg = ha->iobase;
++
++      /* Setup bit 16 of flash address. */
++      bank_select = RD_REG_WORD(&reg->ctrl_status);
++      if ((addr & BIT_16) && ((bank_select & CSR_FLASH_64K_BANK) == 0)) {
++              bank_select |= CSR_FLASH_64K_BANK;
++              WRT_REG_WORD(&reg->ctrl_status, bank_select);
++      } else if (((addr & BIT_16) == 0) &&
++          (bank_select & CSR_FLASH_64K_BANK)) {
++              bank_select &= ~(CSR_FLASH_64K_BANK);
++              WRT_REG_WORD(&reg->ctrl_status, bank_select);
++      }
++      WRT_REG_WORD(&reg->flash_address, (uint16_t)addr);
++      WRT_REG_WORD(&reg->flash_data, (uint16_t)data);
++}
++
++/**
++ * qla2x00_poll_flash() - Polls flash for completion.
++ * @ha: HA context
++ * @addr: Address in flash to poll
++ * @poll_data: Data to be polled
++ * @mid: Flash manufacturer ID
++ *
++ * This function polls the device until bit 7 of what is read matches data
++ * bit 7 or until data bit 5 becomes a 1.  If that hapens, the flash ROM timed
++ * out (a fatal error).  The flash book recommeds reading bit 7 again after
++ * reading bit 5 as a 1.
++ *
++ * Returns 0 on success, else non-zero.
++ */
++static uint8_t
++qla2x00_poll_flash(scsi_qla_host_t *ha,
++    uint32_t addr, uint8_t poll_data, uint8_t mid)
++{
++      uint8_t         status;
++      uint8_t         flash_data;
++      uint32_t        cnt;
++      int             failed_pass;
++
++      status = 1;
++      failed_pass = 1;
++
++      /* Wait for 30 seconds for command to finish. */
++      poll_data &= BIT_7;
++      for (cnt = 3000000; cnt; cnt--) {
++              flash_data = qla2x00_read_flash_byte(ha, addr);
++              if ((flash_data & BIT_7) == poll_data) {
++                      status = 0;
++                      break;
++              }
++
++              if (mid != 0x40 && mid != 0xda) {
++                      if (flash_data & BIT_5)
++                              failed_pass--;
++                      if (failed_pass < 0)
++                              break;
++              }
++              udelay(10);
++              barrier();
++      }
++      return (status);
++}
++
++/**
++ * qla2x00_program_flash_address() - Programs a flash address
++ * @ha: HA context
++ * @addr: Address in flash to program
++ * @data: Data to be written in flash
++ * @mid: Flash manufacturer ID
++ *
++ * Returns 0 on success, else non-zero.
++ */
++static uint8_t
++qla2x00_program_flash_address(scsi_qla_host_t *ha,
++    uint32_t addr, uint8_t data, uint8_t mid)
++{
++      /* Write Program Command Sequence */
++      qla2x00_write_flash_byte(ha, 0x5555, 0xaa);
++      qla2x00_write_flash_byte(ha, 0x2aaa, 0x55);
++      qla2x00_write_flash_byte(ha, 0x5555, 0xa0);
++      qla2x00_write_flash_byte(ha, addr, data);
++
++      /* Wait for write to complete. */
++      return (qla2x00_poll_flash(ha, addr, data, mid));
++}
++
++/**
++ * qla2x00_erase_flash_sector() - Erase a flash sector.
++ * @ha: HA context
++ * @addr: Flash sector to erase
++ * @sec_mask: Sector address mask
++ * @mid: Flash manufacturer ID
++ *
++ * Returns 0 on success, else non-zero.
++ */
++static uint8_t
++qla2x00_erase_flash_sector(scsi_qla_host_t *ha,
++    uint32_t addr, uint32_t sec_mask, uint8_t mid)
++{
++      /* Individual Sector Erase Command Sequence */
++      qla2x00_write_flash_byte(ha, 0x5555, 0xaa);
++      qla2x00_write_flash_byte(ha, 0x2aaa, 0x55);
++      qla2x00_write_flash_byte(ha, 0x5555, 0x80);
++      qla2x00_write_flash_byte(ha, 0x5555, 0xaa);
++      qla2x00_write_flash_byte(ha, 0x2aaa, 0x55);
++
++      if (mid == 0xda)
++              qla2x00_write_flash_byte(ha, addr & sec_mask, 0x10);
++      else
++              qla2x00_write_flash_byte(ha, addr & sec_mask, 0x30);
++
++      udelay(150);
++
++      /* Wait for erase to complete. */
++      return (qla2x00_poll_flash(ha, addr, 0x80, mid));
++}
++
++/**
++ * qla2x00_get_flash_manufacturer() - Read manufacturer ID from flash chip.
++ * @ha: HA context
++ *
++ * Returns the manufacturer's ID read from the flash chip.
++ */
++uint8_t
++qla2x00_get_flash_manufacturer(scsi_qla_host_t *ha)
++{
++      uint8_t manuf_id;
++
++      qla2x00_write_flash_byte(ha, 0x5555, 0xaa);
++      qla2x00_write_flash_byte(ha, 0x2aaa, 0x55);
++      qla2x00_write_flash_byte(ha, 0x5555, 0x90);
++      manuf_id = qla2x00_read_flash_byte(ha, 0x0001);
++
++      return (manuf_id);
++}
++
++/**
++ * qla2x00_get_flash_version() - Read version information from flash.
++ * @ha: HA context
++ *
++ * Returns QL_STATUS_SUCCESS on successful retrieval of flash version.
++ */
++uint16_t
++qla2x00_get_flash_version(scsi_qla_host_t *ha)
++{
++      uint16_t        ret = QL_STATUS_SUCCESS;
++      uint32_t        loop_cnt = 1;  /* this is for error exit only */
++      uint32_t        pcir_adr;
++
++      ENTER(__func__);
++
++      qla2x00_flash_enable(ha);
++      do {    /* Loop once to provide quick error exit */
++              /* Match signature */
++              if (!(qla2x00_read_flash_byte(ha, 0) == 0x55 &&
++                  qla2x00_read_flash_byte(ha, 1) == 0xaa)) {
++                      /* No signature */
++                      DEBUG2(printk("scsi(%ld): No matching FLASH "
++                          "signature.\n", ha->host_no));
++                      ret = QL_STATUS_ERROR;
++                      break;
++              }
++
++              pcir_adr = qla2x00_read_flash_byte(ha, 0x18) & 0xff;
++
++              /* validate signature of PCI data structure */
++              if ((qla2x00_read_flash_byte(ha, pcir_adr)) == 'P' &&
++                  (qla2x00_read_flash_byte(ha, pcir_adr + 1)) == 'C' &&
++                  (qla2x00_read_flash_byte(ha, pcir_adr + 2)) == 'I' &&
++                  (qla2x00_read_flash_byte(ha, pcir_adr + 3)) == 'R') {
++
++                      /* Read version */
++                      ha->optrom_minor =
++                          qla2x00_read_flash_byte(ha, pcir_adr + 0x12);
++                      ha->optrom_major =
++                          qla2x00_read_flash_byte(ha, pcir_adr + 0x13);
++                      DEBUG3(printk("%s(): got %d.%d.\n",
++                          __func__, ha->optrom_major, ha->optrom_minor));
++              } else {
++                      /* error */
++                      DEBUG2(printk("%s(): PCI data struct not found. "
++                          "pcir_adr=%x.\n",
++                          __func__, pcir_adr));
++                      ret = QL_STATUS_ERROR;
++                      break;
++              }
++
++      } while (--loop_cnt);
++      qla2x00_flash_disable(ha);
++
++      LEAVE(__func__);
++
++      return (ret);
++}
++
++/**
++ * qla2x00_get_flash_image() - Read image from flash chip.
++ * @ha: HA context
++ * @image: Buffer to receive flash image
++ *
++ * Returns 0 on success, else non-zero.
++ */
++uint16_t
++qla2x00_get_flash_image(scsi_qla_host_t *ha, uint8_t *image)
++{
++      uint32_t        addr;
++      uint32_t        midpoint;
++      uint8_t         *data;
++      device_reg_t    *reg = ha->iobase;
++
++      midpoint = FLASH_IMAGE_SIZE / 2;
++
++      qla2x00_flash_enable(ha);
++      WRT_REG_WORD(&reg->nvram, 0);
++      for (addr = 0, data = image; addr < FLASH_IMAGE_SIZE; addr++, data++) {
++              if (addr == midpoint)
++                      WRT_REG_WORD(&reg->nvram, NVR_SELECT);
++
++              *data = qla2x00_read_flash_byte(ha, addr);
++      }
++      qla2x00_flash_disable(ha);
++
++      return (0);
++}
++
++/**
++ * qla2x00_set_flash_image() - Write image to flash chip.
++ * @ha: HA context
++ * @image: Source image to write to flash
++ *
++ * Returns 0 on success, else non-zero.
++ */
++uint16_t
++qla2x00_set_flash_image(scsi_qla_host_t *ha, uint8_t *image)
++{
++      uint16_t        status;
++      uint32_t        addr;
++      uint32_t        midpoint;
++      uint32_t        sec_mask;
++      uint32_t        rest_addr;
++      uint8_t         mid;
++      uint8_t         sec_number;
++      uint8_t         data;
++      device_reg_t    *reg = ha->iobase;
++
++      status = 0;
++      sec_number = 0;
++
++      /* Reset ISP chip. */
++      WRT_REG_WORD(&reg->ctrl_status, CSR_ISP_SOFT_RESET);
++
++      qla2x00_flash_enable(ha);
++      do {    /* Loop once to provide quick error exit */
++              /* Structure of flash memory based on manufacturer */
++              mid = qla2x00_get_flash_manufacturer(ha);
++              if (mid == 0x6d) {
++                      // Am29LV001 part
++                      rest_addr = 0x1fff;
++                      sec_mask = 0x1e000;
++              }
++              else if (mid == 0x40) {
++                      // Mostel v29c51001 part
++                      rest_addr = 0x1ff;
++                      sec_mask = 0x1fe00;
++              }
++              else if (mid == 0xbf) {
++                      // SST39sf10 part
++                      rest_addr = 0xfff;
++                      sec_mask = 0x1f000;
++              }
++              else if (mid == 0xda) {
++                      // Winbond W29EE011 part
++                      rest_addr = 0x7f;
++                      sec_mask = 0x1ff80;
++                      addr = 0;
++                      if (qla2x00_erase_flash_sector(ha,
++                          addr, sec_mask, mid)) {
++                              status = 1;
++                              break;
++                      }
++              }
++              else {
++                      // Am29F010 part
++                      rest_addr = 0x3fff;
++                      sec_mask = 0x1c000;
++              }
++
++              midpoint = FLASH_IMAGE_SIZE / 2;
++              for (addr = 0; addr < FLASH_IMAGE_SIZE; addr++) {
++                      data = *image++;
++                      /* Are we at the beginning of a sector? */
++                      if (!(addr & rest_addr)) {
++                              if (addr == midpoint)
++                                      WRT_REG_WORD(&reg->nvram, NVR_SELECT);
++
++                              /* Then erase it */
++                              if (qla2x00_erase_flash_sector(ha,
++                                  addr, sec_mask, mid)) {
++                                      status = 1;
++                                      break;
++                              }
++
++                              sec_number++;
++                      }
++                      if (mid == 0x6d) {
++                              if (sec_number == 1 &&
++                                  (addr == (rest_addr - 1))) {
++                                      rest_addr = 0x0fff;
++                                      sec_mask   = 0x1f000;
++                              }
++                              else if (sec_number == 3 && (addr & 0x7ffe)) {
++                                      rest_addr = 0x3fff;
++                                      sec_mask   = 0x1c000;
++                              }
++                      }
++
++                      if (qla2x00_program_flash_address(ha,
++                          addr, data, mid)) {
++                              status = 1;
++                              break;
++                      }
++              }
++      } while (0);
++      qla2x00_flash_disable(ha);
++
++      return (status);
++}
+--- /dev/null  Thu Apr 11 07:25:15 2002
++++ linux-2.5.73-n9560/drivers/scsi/qla2xxx/qla_vendor.c       Thu Jul  3 15:34:42 2003
+@@ -0,0 +1,193 @@
++/******************************************************************************
++ *                  QLOGIC LINUX SOFTWARE
++ *
++ * QLogic ISP2x00 device driver for Linux 2.5.x
++ * Copyright (C) 2003 Qlogic Corporation
++ * (www.qlogic.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, 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 "qla_os.h"
++#include "qla_def.h"
++
++/*
++ * vendor specific op codes.
++*/
++#define       UCSCSI_DCMD             0x20 /* vendor specific command */
++#define DAC_CDB_LEN           12
++#define DAC_SENSE_LEN         64
++
++#define DACMD_WRITE_CONF_ONDISK       0x4B
++#define       DACMD_WRITE_CONFIG      0x06
++#define       DACMD_WRITE_CONF2       0x3C
++#define       DACMD_WRITE_CONFLABEL   0x49 /* Write configuration label */
++#define       DACMD_WRITE_CONFIG_V3x  0x4F
++#define       DACMD_ADD_CONFIG_V2x    0x18
++#define       DACMD_ADD_CONFIG_V3x    0x4C
++#define       DACMD_STORE_IMAGE       0x21
++#define       DACMD_ADD_CAPACITY      0x2A /* add physical drives to existing array */
++#define       DACMD_WRITE_IOPORT      0x3A /* write port B */
++#define       DACMD_S2S_WRITEFULLCONF         0x60 /* write full configuration */
++#define       DACMD_S2S_ADDFULLCONF           0x62 /* add   full configuration */
++#define       DACMD_S2S_WRITELUNMAP_OLD       0x58 /* write LUN map information */
++#define DACMD_S2S_WRITELUNMAP         0xD2    /* Write LUN MAP Information */
++#define       DACMD_S2S_WRITE_IOPORT  0x66 /* write expanded IO port */
++#define       DACMD_WRITE_V3x         0x34 /* write data from plain memory */
++#define       DACMD_S2S_WRITESIG      0x4D /* write signature information */
++
++#if !defined(s08bits)
++#define       s08bits char
++#define       s16bits short
++#define       s32bits int
++#define       u08bits unsigned s08bits
++#define       u16bits unsigned s16bits
++#define       u32bits unsigned s32bits
++#endif
++
++typedef struct dac_command
++{
++        u08bits       mb_Command;     /* Mail Box register 0  */
++        u08bits       mb_CmdID;       /* Mail Box register 1  */
++        u08bits       mb_ChannelNo;   /* Mail Box register 2  */
++        u08bits       mb_TargetID;    /* Mail Box register 3  */
++        u08bits       mb_DevState;    /* Mail Box register 4  */
++        u08bits       mb_MailBox5;    /* Mail Box register 5  */
++        u08bits       mb_MailBox6;    /* Mail Box register 6  */
++        u08bits       mb_SysDevNo;    /* Mail Box register 7  */
++        u32bits       mb_Datap;       /* Mail Box register 8-B */
++        u08bits       mb_MailBoxC;    /* Mail Box register C  */
++        u08bits       mb_StatusID;    /* Mail box register D  */
++        u16bits       mb_Status;      /* Mail Box Register E,F */
++}
++dac_command_t;
++
++typedef struct        dac_scdb
++{
++        u08bits db_ChannelTarget;     /* ChannelNo 7..4 & Target 3..0 */
++        u08bits db_DATRET;            /* different bits, see below */
++        u16bits       db_TransferSize;        /* Request/done size in bytes */
++        u32bits db_PhysDatap;         /* Physical addr in host memory */
++        u08bits db_CdbLen;            /* 6, 10 or 12                  */
++        u08bits db_SenseLen;          /* If returned from DAC (<= 64) */
++        u08bits       db_Cdb[DAC_CDB_LEN];    /* The CDB itself               */
++        u08bits       db_SenseData[DAC_SENSE_LEN];/* Result of request sense  */
++        u08bits db_StatusIn;          /* SCSI status returned         */
++        u08bits       db_Reserved1;
++}
++dac_scdb_t;
++
++typedef       struct dga_scdb
++{
++        u08bits       dsc_osreq[1024];        /* OS related buffer:sizeof(mdac_req_t) */
++
++        u08bits       dsc_familyctlno;        /* Controller number within family */
++        u08bits       dsc_ctlno;              /* Controller number */
++        u08bits       dsc_chno;               /* Channel number */
++        u08bits       dsc_tgt;                /* target ID */
++
++        u08bits       dsc_lun;                /* Lun ID */
++        u08bits       dsc_rebuildflag;        /* current rebuild flag */
++        u16bits       dsc_status;             /* completion status */
++
++        u08bits       dsc_scsiversion;        /* SCSI protocol version */
++        u08bits       dsc_hostctlno;          /* host system controller number */
++        u16bits       dsc_reqsenseseqno;      /* request sense sequence number */
++
++        u32bits       dsc_events;             /* # events at start */
++
++        u32bits       dsc_pollwaitchan;       /* sleep/wakeup channel */
++        u32bits       dsc_poll;               /* polling value, if =0 op complete */
++
++        struct dga_ctldev *dsc_ctp;   /* pointer back to controller */
++        void *dsc_pdp;        /* pointer back to physical device */
++        void *dsc_ldp;        /* pointer back to logical device */
++        void (*dsc_intr)(void);       /* completion call back function */
++
++        /* all save functions are used in S2S */
++        u08bits       dsc_savedcdb[DAC_CDB_LEN];/* 12 bytes saved CDB from SCSI CDB */
++        u32bits       (*dsc_statsintr)(struct dga_scdb *); /* statistics completion function */
++
++        void (*dsc_savedintr)(void);  /* completion call back function */
++        void *dsc_savedctp;           /* pointer back to controller */
++        u08bits       dsc_savedfamilyctlno;   /* Controller number within family */
++        u08bits       dsc_savedctlno;         /* Controller number */
++        u08bits       dsc_savedchno;          /* Channel number */
++        u08bits       dsc_savedtgt;           /* target ID */
++
++        u08bits       dsc_savedlun;           /* Lun ID */
++        u08bits       dsc_savedcdblen;        /* saved CDB len for SCDB */
++        u08bits       dsc_scanmode;
++        u08bits dsc_pageno;             /* pageno for data > 4K */
++        u32bits       dsc_residue;
++        u32bits       dsc_Reserved4;
++
++        dac_command_t dsc_dcmd;               /* DCMD space, 16 bytes */
++        dac_scdb_t dsc_scdb;          /* SCDB space */
++        u32bits       dsc_EventSeqNo;
++        u32bits       dsc_ReqSenseNo;
++
++        u32bits       dsc_Reserved64[16];     /* leave this for OLD SCO driver bug */
++
++        u08bits       dsc_data[256];          /* Rest is data */
++}
++dga_scdb_t;
++
++/*
++* qla2100_set_scsi_direction
++*      This routine will set the proper direction for vendor specific
++*      commands. 
++*
++*      Note: Vendors should modify this routine to set the proper 
++*      direction of the transfer if they used vendor specific commands.
++*
++* Input:
++*      ha = adapter block pointer.
++*      sp = SCSI Request Block structure pointer.
++*
++* Returns:
++*      0 = success, was able to issue command.
++*/
++void
++qla2x00_set_vend_direction(scsi_qla_host_t *ha,
++    Scsi_Cmnd *cmd, cmd_entry_t *pkt)
++{
++      dga_scdb_t      *dsp = (dga_scdb_t *) cmd;
++
++      if (cmd->data_cmnd[0] == UCSCSI_DCMD) {
++              switch( dsp->dsc_dcmd.mb_Command ) {
++              case DACMD_WRITE_CONF_ONDISK:
++              case DACMD_WRITE_CONFIG:
++              case DACMD_WRITE_CONF2:
++              case DACMD_WRITE_CONFLABEL:
++              case DACMD_WRITE_CONFIG_V3x:
++              case DACMD_ADD_CONFIG_V2x:
++              case DACMD_ADD_CONFIG_V3x:
++              case DACMD_STORE_IMAGE:
++              case DACMD_ADD_CAPACITY:
++              case DACMD_WRITE_IOPORT:
++              case DACMD_S2S_WRITEFULLCONF:
++              case DACMD_S2S_ADDFULLCONF:
++              case DACMD_S2S_WRITELUNMAP_OLD:
++              case DACMD_S2S_WRITELUNMAP:
++              case DACMD_S2S_WRITE_IOPORT:
++              case DACMD_WRITE_V3x:
++              case DACMD_S2S_WRITESIG:
++                      pkt->control_flags |= BIT_6;
++                      break;
++              default:
++                      pkt->control_flags |= BIT_5;
++              }
++      } else
++              pkt->control_flags |= BIT_5;
++}
++
+--- /dev/null  Thu Apr 11 07:25:15 2002
++++ linux-2.5.73-n9560/drivers/scsi/qla2xxx/qla_version.h      Thu Jul  3 15:34:42 2003
+@@ -0,0 +1,31 @@
++/******************************************************************************
++ *                  QLOGIC LINUX SOFTWARE
++ *
++ * QLogic ISP2x00 device driver for Linux 2.5.x
++ * Copyright (C) 2003 Qlogic Corporation
++ * (www.qlogic.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, 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.
++ *
++ ******************************************************************************/
++/*
++ * Driver version 
++ */
++#if DEBUG_QLA2100
++#define QLA2100_VERSION      "8.00.00b1-debug"
++#else
++#define QLA2100_VERSION      "8.00.00b1"
++#endif
++
++#define QLA_DRIVER_MAJOR_VER  8
++#define QLA_DRIVER_MINOR_VER  0
++#define QLA_DRIVER_PATCH_VER  0
++#define QLA_DRIVER_BETA_VER   1
+--- /dev/null  Thu Apr 11 07:25:15 2002
++++ linux-2.5.73-n9560/drivers/scsi/qla2xxx/qla_xioct.c        Thu Jul  3 15:34:42 2003
+@@ -0,0 +1,6589 @@
++/******************************************************************************
++ *                  QLOGIC LINUX SOFTWARE
++ *
++ * QLogic ISP2x00 device driver for Linux 2.5.x
++ * Copyright (C) 2003 Qlogic Corporation
++ * (www.qlogic.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, 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 "qla_os.h"
++#include "qla_def.h"
++
++#include "inioct.h"
++
++
++#define       QLA_PT_CMD_TOV                  (60) /* firmware timeout */
++#define QLA_PT_CMD_DRV_TOV            (QLA_PT_CMD_TOV + 1) /* drvr timeout */
++#define QLA_IOCTL_ACCESS_WAIT_TIME    (QLA_PT_CMD_DRV_TOV + 2) /* wait_q tov */
++#define QLA_INITIAL_IOCTLMEM_SIZE     (2 * PAGE_SIZE)
++#define QLA_IOCTL_SCRAP_SIZE          2048 /* scrap memory for local use. */
++
++/* ELS related defines */
++#define FC_HEADER_LEN         24
++#define ELS_RJT_LENGTH                0x08    /* 8  */
++#define ELS_RPS_ACC_LENGTH    0x40    /* 64 */
++#define ELS_RLS_ACC_LENGTH    0x1C    /* 28 */
++
++/* ELS cmd Reply Codes */
++#define ELS_STAT_LS_RJT               0x01
++#define ELS_STAT_LS_ACC               0x02
++
++#define IOCTL_INVALID_STATUS    0xffff
++
++
++int qla2x00_alloc_ioctl_mem(scsi_qla_host_t *);
++void qla2x00_free_ioctl_mem(scsi_qla_host_t *);
++
++int qla2x00_get_ioctl_scrap_mem(scsi_qla_host_t *, void **, uint32_t);
++void qla2x00_free_ioctl_scrap_mem(scsi_qla_host_t *);
++
++/*
++ * Local prototypes
++ */
++static int qla2x00_get_new_ioctl_dma_mem(scsi_qla_host_t *, uint32_t);
++
++#if defined(ISP2300)
++static uint8_t qla2x00_get_next_free_pub_id(scsi_qla_host_t *, uint16_t *);
++static uint8_t qla2x00_host_relogin(scsi_qla_host_t *, fcdev_t *);
++#endif
++
++static int qla2x00_find_curr_ha(uint16_t, scsi_qla_host_t **);
++
++static int qla2x00_get_driver_specifics(EXT_IOCTL *);
++
++static int qla2x00_aen_reg(scsi_qla_host_t *, EXT_IOCTL *, int);
++static int qla2x00_aen_get(scsi_qla_host_t *, EXT_IOCTL *, int);
++
++static int qla2x00_query(scsi_qla_host_t *, EXT_IOCTL *, int);
++static int qla2x00_query_hba_node(scsi_qla_host_t *, EXT_IOCTL *, int);
++static int qla2x00_query_hba_port(scsi_qla_host_t *, EXT_IOCTL *, int);
++static int qla2x00_query_disc_port(scsi_qla_host_t *, EXT_IOCTL *, int);
++static int qla2x00_query_disc_tgt(scsi_qla_host_t *, EXT_IOCTL *, int);
++static int qla2x00_query_chip(scsi_qla_host_t *, EXT_IOCTL *, int);
++
++static int qla2x00_get_data(scsi_qla_host_t *, EXT_IOCTL *, int);
++static int qla2x00_get_statistics(scsi_qla_host_t *, EXT_IOCTL *, int);
++static int qla2x00_get_fc_statistics(scsi_qla_host_t *, EXT_IOCTL *, int);
++static int qla2x00_get_port_summary(scsi_qla_host_t *, EXT_IOCTL *, int);
++static int qla2x00_query_driver(scsi_qla_host_t *, EXT_IOCTL *, int);
++static int qla2x00_query_fw(scsi_qla_host_t *, EXT_IOCTL *, int);
++
++#if defined(ISP2300)
++static int qla2x00_send_els_passthru(scsi_qla_host_t *, EXT_IOCTL *, int);
++#endif
++static int qla2x00_send_fcct(scsi_qla_host_t *, EXT_IOCTL *, int);
++static int qla2x00_start_ms_cmd(scsi_qla_host_t *, EXT_IOCTL *, srb_t *,
++    EXT_ELS_PT_REQ *);
++
++static int qla2x00_wwpn_to_scsiaddr(scsi_qla_host_t *, EXT_IOCTL *, int);
++static int qla2x00_scsi_passthru(scsi_qla_host_t *, EXT_IOCTL *, int);
++static int qla2x00_sc_scsi_passthru(scsi_qla_host_t *, EXT_IOCTL *, int);
++static int qla2x00_sc_fc_scsi_passthru(scsi_qla_host_t *, EXT_IOCTL *, int);
++static int qla2x00_sc_scsi3_passthru(scsi_qla_host_t *, EXT_IOCTL *, int);
++
++static int qla2x00_send_els_rnid(scsi_qla_host_t *, EXT_IOCTL *, int);
++static int qla2x00_get_rnid_params(scsi_qla_host_t *, EXT_IOCTL *, int);
++static int qla2x00_set_host_data(scsi_qla_host_t *, EXT_IOCTL *, int);
++static int qla2x00_set_rnid_params(scsi_qla_host_t *, EXT_IOCTL *, int);
++
++static void qla2x00_waitq_sem_timeout(unsigned long);
++static uint8_t qla2x00_get_ioctl_access(scsi_qla_host_t *, uint32_t);
++static uint8_t qla2x00_release_ioctl_access(scsi_qla_host_t *);
++
++static void qla2x00_wait_q_memb_alloc(scsi_qla_host_t *, wait_q_t **);
++static void qla2x00_wait_q_memb_free(scsi_qla_host_t *, wait_q_t *);
++static uint8_t qla2x00_wait_q_add(scsi_qla_host_t *, wait_q_t **);
++static void qla2x00_wait_q_get_next(scsi_qla_host_t *, wait_q_t **);
++static void qla2x00_wait_q_remove(scsi_qla_host_t *, wait_q_t *);
++
++
++/*
++ * qla2x00_ioctl_sleep_done
++ *
++ * Description:
++ *   This is the callback function to wakeup ioctl completion semaphore
++ *   for the ioctl request that is waiting.
++ *
++ * Input:
++ *   sem - pointer to the ioctl completion semaphore.
++ *
++ * Returns:
++ */
++static void
++qla2x00_ioctl_sleep_done(struct semaphore * sem)
++{
++      DEBUG9(printk("%s: entered.\n", __func__);)
++
++      if (sem != NULL){
++              DEBUG9(printk("ioctl_sleep: wake up sem.\n");)
++              up(sem);
++      }
++
++      DEBUG9(printk("%s: exiting.\n", __func__);)
++}
++
++/*
++ * qla2x00_ioctl_sem_init
++ *
++ * Description:
++ *   Initialize the ioctl timer and semaphore used to wait for passthru
++ *   completion.
++ *
++ * Input:
++ *   ha - pointer to scsi_qla_host_t structure used for initialization.
++ *
++ * Returns:
++ *   None.
++ */
++static void
++qla2x00_ioctl_sem_init(scsi_qla_host_t *ha)
++{
++      init_MUTEX_LOCKED(&ha->ioctl->cmpl_sem);
++      init_timer(&(ha->ioctl->cmpl_timer));
++      ha->ioctl->cmpl_timer.data = (unsigned long)&ha->ioctl->cmpl_sem;
++      ha->ioctl->cmpl_timer.function =
++          (void (*)(unsigned long))qla2x00_ioctl_sleep_done;
++}
++
++/*
++ * qla2x00_scsi_pt_done
++ *
++ * Description:
++ *   Resets ioctl progress flag and wakes up the ioctl completion semaphore.
++ *
++ * Input:
++ *   pscsi_cmd - pointer to the passthru Scsi cmd structure which has completed.
++ *
++ * Returns:
++ */
++static void
++qla2x00_scsi_pt_done(Scsi_Cmnd *pscsi_cmd)
++{
++      struct Scsi_Host *host;
++      scsi_qla_host_t  *ha;
++
++      host = pscsi_cmd->device->host;
++      ha = (scsi_qla_host_t *) host->hostdata;
++
++      DEBUG9(printk("%s post function called OK\n", __func__);)
++
++      /* save detail status for IOCTL reporting */
++      ha->ioctl->SCSIPT_InProgress = 0;
++      ha->ioctl->ioctl_tov = 0;
++
++      up(&ha->ioctl->cmpl_sem);
++
++      DEBUG9(printk("%s: exiting.\n", __func__);)
++
++      return;
++}
++
++/*
++ * qla2x00_msiocb_done
++ *
++ * Description:
++ *   Resets MSIOCB ioctl progress flag and wakes up the ioctl completion
++ *   semaphore.
++ *
++ * Input:
++ *   cmd - pointer to the passthru Scsi cmd structure which has completed.
++ *
++ * Returns:
++ */
++static void
++qla2x00_msiocb_done(Scsi_Cmnd *pscsi_cmd)
++{
++      struct Scsi_Host *host;
++      scsi_qla_host_t  *ha;
++
++      host = pscsi_cmd->device->host;
++      ha = (scsi_qla_host_t *) host->hostdata;
++
++      DEBUG9(printk("%s post function called OK\n", __func__);)
++
++      ha->ioctl->MSIOCB_InProgress = 0;
++      ha->ioctl->ioctl_tov = 0;
++
++      up(&ha->ioctl->cmpl_sem);
++
++      DEBUG9(printk("%s: exiting.\n", __func__);)
++              
++      return;
++}
++
++/*************************************************************************
++ * qla2x00_ioctl
++ *
++ * Description:
++ *   Performs additional ioctl requests not satisfied by the upper levels.
++ *
++ * Returns:
++ *   ret  = 0    Success
++ *   ret != 0    Failed; detailed status copied to EXT_IOCTL structure
++ *               if possible
++ *************************************************************************/
++int
++qla2x00_ioctl(Scsi_Device *dev, int cmd, void *arg)
++{
++      int             mode = 0;
++      int             tmp_rval = 0;
++      int             ret = -EINVAL;
++
++      uint8_t         *temp;
++      uint8_t         tempbuf[8];
++      uint32_t        i;
++      uint32_t        status;
++
++      EXT_IOCTL       *pext;
++
++      scsi_qla_host_t *ha;
++
++
++      DEBUG9(printk("%s: entry to command (%x), arg (%p)\n",
++          __func__, cmd, arg);)
++
++      /* Catch any non-exioct ioctls */
++      if (_IOC_TYPE(cmd) != QLMULTIPATH_MAGIC) {
++              return (ret);
++      }
++
++      ret = verify_area(VERIFY_READ, (void *)arg, sizeof(EXT_IOCTL));
++      if (ret) {
++              DEBUG9_10(printk("%s: ERROR VERIFY_READ EXT_IOCTL "
++                  "sturct. cmd=%d arg=%p.\n", __func__, cmd, arg);)
++              return (ret);
++      }
++
++      /* Allocate ioctl structure buffer to support multiple concurrent
++       * entries.
++       */
++      pext = KMEM_ZALLOC(sizeof(EXT_IOCTL), 16);
++      if (pext == NULL) {
++              /* error */
++              printk(KERN_WARNING
++                  "qla2x00: ERROR in main ioctl buffer allocation.\n");
++              return (-ENOMEM);
++      }
++
++      /* copy in application layer EXT_IOCTL */
++      ret = copy_from_user(pext, arg, sizeof(EXT_IOCTL));
++      if (ret) {
++              DEBUG9_10(printk("%s: ERROR COPY_FROM_USER "
++                  "EXT_IOCTL sturct. cmd=%d arg=%p.\n",
++                  __func__, cmd, arg);)
++
++              KMEM_FREE(pext, sizeof(EXT_IOCTL));
++              return (ret);
++      }
++
++      /* Verify before update status fields in EXT_IOCTL struct. */
++      ret = verify_area(VERIFY_WRITE, (void *)arg, sizeof(EXT_IOCTL));
++      if (ret) {
++              DEBUG9_10(printk("%s: ERROR VERIFY_WRITE EXT_IOCTL "
++                  "sturct. cmd=%d arg=%p.\n", __func__, cmd, arg);)
++
++              KMEM_FREE(pext, sizeof(EXT_IOCTL));
++              return (ret);
++      }
++
++      /* check signature of this ioctl */
++      temp = (uint8_t *) &pext->Signature;
++
++      for (i = 0; i < 4; i++, temp++)
++              tempbuf[i] = *temp;
++
++      if ((tempbuf[0] == 'Q') && (tempbuf[1] == 'L') &&
++          (tempbuf[2] == 'O') && (tempbuf[3] == 'G'))
++              status = 0;
++      else
++              status = 1;
++
++      if (status != 0) {
++              DEBUG9_10(printk("%s: signature did not match. "
++                  "cmd=%d arg=%p.\n", __func__, cmd, arg);)
++              pext->Status = EXT_STATUS_INVALID_PARAM;
++              copy_to_user((void *)arg, (void *)pext, sizeof(EXT_IOCTL));
++
++              KMEM_FREE(pext, sizeof(EXT_IOCTL));
++              return (-EINVAL);
++      }
++
++      /* check version of this ioctl */
++      if (pext->Version > EXT_VERSION) {
++              printk(KERN_WARNING
++                  "qla2x00: ioctl interface version not supported = %d.\n",
++                  pext->Version);
++              pext->Status = EXT_STATUS_UNSUPPORTED_VERSION;
++              copy_to_user((void *)arg, (void *)pext, sizeof(EXT_IOCTL));
++
++              KMEM_FREE(pext, sizeof(EXT_IOCTL));
++              return (-EINVAL);
++      }
++
++      /* check for special cmds used during application's setup time. */
++      switch (cmd) {
++      case EXT_CC_STARTIOCTL:
++              DEBUG9(printk("%s: got startioctl command.\n", __func__);)
++
++              pext->Instance = num_hosts;
++              pext->Status = EXT_STATUS_OK;
++              ret = copy_to_user((void *)arg, (void *)pext,
++                  sizeof(EXT_IOCTL));
++
++              KMEM_FREE(pext, sizeof(EXT_IOCTL));
++              return (ret);
++
++      case EXT_CC_SETINSTANCE:
++              /* This call is used to return the HBA's host number to
++               * ioctl caller.  All subsequent ioctl commands will put
++               * the host number in HbaSelect field to tell us which
++               * HBA is the destination.
++               */
++              if (pext->Instance < num_hosts) {
++                      if (!((uint32_t)pext->VendorSpecificData &
++                          EXT_DEF_USE_HBASELECT)) {
++                              /* Backward compatible code. */
++                              apiHBAInstance = pext->Instance;
++                      }
++
++                      /*
++                       * Return host number via pext->HbaSelect for
++                       * specified API instance number.
++                       */
++                      if (qla2x00_find_curr_ha(pext->Instance, &ha) != 0) {
++                              pext->Status = EXT_STATUS_DEV_NOT_FOUND;
++                              ret = copy_to_user(arg, pext, sizeof(EXT_IOCTL));
++                              DEBUG9_10(printk("%s: SETINSTANCE invalid inst "
++                                  "%d. num_hosts=%d ha=%p ret=%d.\n",
++                                  __func__, pext->Instance, num_hosts, ha,
++                                  ret);)
++
++                              KMEM_FREE(pext, sizeof(EXT_IOCTL));
++                              return (ret); /* ioctl completed ok */
++                      }
++
++                      pext->HbaSelect = ha->host_no;
++                      pext->Status = EXT_STATUS_OK;
++
++                      DEBUG9(printk("%s: Matching instance %d to hba "
++                          "%ld.\n", __func__, pext->Instance, ha->host_no);)
++              } else {
++                      DEBUG9_10(printk("%s: ERROR EXT_SETINSTANCE."
++                          " Instance=%d num_hosts=%d ha=%p.\n",
++                          __func__, pext->Instance, num_hosts, ha);)
++
++                      pext->Status = EXT_STATUS_DEV_NOT_FOUND;
++              }
++              ret = copy_to_user(arg, pext, sizeof(EXT_IOCTL));
++              KMEM_FREE(pext, sizeof(EXT_IOCTL));
++
++              DEBUG9(printk("%s: SETINSTANCE exiting. ret=%d.\n",
++                  __func__, ret);)
++
++              return (ret);
++
++      case EXT_CC_DRIVER_SPECIFIC:
++              ret = qla2x00_get_driver_specifics(pext);
++              tmp_rval = copy_to_user(arg, (void *)pext, sizeof(EXT_IOCTL));
++
++              if (ret == 0)
++                      ret = tmp_rval;
++
++              KMEM_FREE(pext, sizeof(EXT_IOCTL));
++              return (ret);
++
++      default:
++              break;
++      }
++
++      if (!((uint32_t)pext->VendorSpecificData & EXT_DEF_USE_HBASELECT)) {
++              /* Backward compatible code. */
++              /* Will phase out soon. */
++
++              /* Check for valid apiHBAInstance (set previously by
++               * EXT_SETINSTANCE or default 0)  and set ha context
++               * for this IOCTL.
++               */
++              if (qla2x00_find_curr_ha(apiHBAInstance, &ha) != 0) {
++
++                      DEBUG9_10(printk("%s: ERROR matching apiHBAInstance "
++                          "%d to an HBA Instance.\n",
++                          __func__, pext->HbaSelect);)
++
++                      pext->Status = EXT_STATUS_DEV_NOT_FOUND;
++                      copy_to_user(arg, pext, sizeof(EXT_IOCTL));
++
++                      KMEM_FREE(pext, sizeof(EXT_IOCTL));
++                      return (-EINVAL);
++              }
++
++              DEBUG9(printk("%s: active apiHBAInstance=%d host_no=%ld "
++                  "CC=%x SC=%x.\n",
++                  __func__, apiHBAInstance, ha->host_no, cmd, pext->SubCode);)
++
++      } else {
++              /* Use HbaSelect value to get a matching ha instance
++               * for this ioctl command.
++               */
++              if (qla2x00_find_curr_ha(pext->HbaSelect, &ha) != 0) {
++
++                      DEBUG9_10(printk("%s: ERROR matching pext->HbaSelect "
++                          "%d to an HBA Instance.\n",
++                          __func__, pext->HbaSelect);)
++
++                      pext->Status = EXT_STATUS_DEV_NOT_FOUND;
++                      copy_to_user(arg, pext, sizeof(EXT_IOCTL));
++
++                      KMEM_FREE(pext, sizeof(EXT_IOCTL));
++                      return (-EINVAL);
++              }
++
++              DEBUG9(printk("%s: active host_inst=%ld CC=%x SC=%x.\n",
++                  __func__, ha->instance, cmd, pext->SubCode);)
++      }
++
++      /*
++       * Get permission to process ioctl command. Only one will proceed
++       * at a time.
++       */
++      if (qla2x00_get_ioctl_access(ha, QLA_IOCTL_ACCESS_WAIT_TIME) != 0) {
++              /* error timed out */
++              DEBUG9_10(printk("%s: ERROR timeout getting ioctl "
++                  "access. host no=%d.\n", __func__, pext->HbaSelect);)
++
++              pext->Status = EXT_STATUS_BUSY;
++              copy_to_user(arg, pext, sizeof(EXT_IOCTL));
++
++              KMEM_FREE(pext, sizeof(EXT_IOCTL));
++              return (-EBUSY);
++      }
++
++
++      while (test_bit(CFG_ACTIVE, &ha->cfg_flags) || ha->dpc_active) {
++              if( signal_pending(current) )
++                      break;   /* get out */
++
++              set_current_state(TASK_INTERRUPTIBLE);
++              schedule_timeout(HZ);
++      }
++
++      switch (cmd) { /* switch on EXT IOCTL COMMAND CODE */
++
++      case EXT_CC_QUERY:
++              DEBUG9(printk("%s: got query command.\n", __func__);)
++
++              ret = qla2x00_query(ha, pext, 0);
++
++              break;
++
++      case EXT_CC_GET_DATA:
++              DEBUG9(printk("%s: got get_data command.\n", __func__);)
++
++              ret = qla2x00_get_data(ha, pext, 0);
++
++              break;
++
++      case EXT_CC_SEND_FCCT_PASSTHRU:
++              DEBUG9(printk("%s: got CT passthru cmd.\n", __func__));
++
++              ret = qla2x00_send_fcct(ha, pext, 0);
++
++              break;
++
++      case EXT_CC_SEND_SCSI_PASSTHRU:
++              DEBUG9(printk("%s: got SCSI passthru cmd.\n", __func__));
++
++              ret = qla2x00_scsi_passthru(ha, pext, mode);
++
++              break;
++
++      case EXT_CC_REG_AEN:
++              ret = qla2x00_aen_reg(ha, pext, mode);
++
++              break;
++
++      case EXT_CC_GET_AEN:
++              ret = qla2x00_aen_get(ha, pext, mode);
++
++              break;
++
++      case EXT_CC_WWPN_TO_SCSIADDR:
++              ret = qla2x00_wwpn_to_scsiaddr(ha, pext, 0);
++              break;
++
++      case EXT_CC_SEND_ELS_RNID:
++              ret = qla2x00_send_els_rnid(ha, pext, mode);
++              break;
++
++      case EXT_CC_SET_DATA:
++              ret = qla2x00_set_host_data(ha, pext, mode);
++              break;                                                          
++
++      case INT_CC_READ_NVRAM:
++              ret = qla2x00_read_nvram(ha, pext, mode);
++
++              break;
++
++      case INT_CC_UPDATE_NVRAM:
++              ret = qla2x00_update_nvram(ha, pext, mode);
++
++              break;
++
++      case INT_CC_LOOPBACK:
++              ret = qla2x00_send_loopback(ha, pext, mode);
++
++              break;
++
++      case INT_CC_READ_OPTION_ROM:
++              ret = qla2x00_read_option_rom(ha, pext, mode);
++
++              break;
++
++      case INT_CC_UPDATE_OPTION_ROM:
++              ret = qla2x00_update_option_rom(ha, pext, mode);
++
++              break;
++
++#if defined(ISP2300)
++      case EXT_CC_SEND_ELS_PASSTHRU:
++              DEBUG9(printk("%s: got ELS passthru cmd.\n", __func__));
++
++              ret = qla2x00_send_els_passthru(ha, pext, 0);
++
++              break;
++#endif
++
++      /* all others go here */
++      /*
++         case EXT_CC_PLATFORM_REG:
++         break;
++       */
++
++      /* Failover IOCTLs */
++      case FO_CC_GET_PARAMS:
++      case FO_CC_SET_PARAMS:
++      case FO_CC_GET_PATHS:
++      case FO_CC_SET_CURRENT_PATH:
++      case FO_CC_RESET_HBA_STAT:
++      case FO_CC_GET_HBA_STAT:
++      case FO_CC_GET_LUN_DATA:
++      case FO_CC_SET_LUN_DATA:
++      case FO_CC_GET_TARGET_DATA:
++      case FO_CC_SET_TARGET_DATA:
++              DEBUG9(printk("%s: failover arg (%p):\n", __func__, arg);)
++
++              qla2x00_fo_ioctl(ha, cmd, pext, mode);
++
++              break;
++
++      default:
++              pext->Status = EXT_STATUS_INVALID_REQUEST;
++              break;
++
++      } /* end of CC decode switch */
++
++      /* Always try to copy values back regardless what happened before. */
++      tmp_rval = copy_to_user(arg, (void *)pext, sizeof(EXT_IOCTL));
++
++      if (ret == 0)
++              ret = tmp_rval;
++
++      DEBUG9(printk("%s: exiting. tmp_rval(%d) ret(%d)\n",
++          __func__, tmp_rval, ret);)
++
++      qla2x00_release_ioctl_access(ha);
++
++      KMEM_FREE(pext, sizeof(EXT_IOCTL));
++      return (ret);
++}
++
++/*
++ * qla2x00_alloc_ioctl_mem
++ *    Allocates memory needed by IOCTL code.
++ *
++ * Input:
++ *    ha = adapter state pointer.
++ *
++ * Returns:
++ *    qla2x00 local function return status code.
++ *
++ * Context:
++ *    Kernel context.
++ */
++int
++qla2x00_alloc_ioctl_mem(scsi_qla_host_t *ha)
++{
++      DEBUG9(printk("%s(%ld): inst=%ld entered.\n",
++          __func__, ha->host_no, ha->instance);)
++
++      if (qla2x00_get_new_ioctl_dma_mem(ha, QLA_INITIAL_IOCTLMEM_SIZE) !=
++          QL_STATUS_SUCCESS) {
++              printk(KERN_WARNING
++                  "qla2x00: ERROR in ioctl physical memory allocation\n");
++
++              return QL_STATUS_RESOURCE_ERROR;
++      }
++
++      /* Allocate context memory buffer */
++      ha->ioctl = KMEM_ZALLOC(sizeof(hba_ioctl_context), 11);
++      if (ha->ioctl == NULL) {
++              /* error */
++              printk(KERN_WARNING
++                  "qla2x00: ERROR in ioctl context allocation.\n");
++              return QL_STATUS_RESOURCE_ERROR;
++      }
++
++      /* Allocate AEN tracking buffer */
++      ha->ioctl->aen_tracking_queue =
++          KMEM_ZALLOC(EXT_DEF_MAX_AEN_QUEUE * sizeof(EXT_ASYNC_EVENT), 12);
++      if (ha->ioctl->aen_tracking_queue == NULL) {
++              printk(KERN_WARNING
++                  "qla2x00: ERROR in ioctl aen_queue allocation.\n");
++              return QL_STATUS_RESOURCE_ERROR;
++      }
++
++      ha->ioctl->ioctl_tq = KMEM_ZALLOC(sizeof(os_tgt_t), 13);
++      if (ha->ioctl->ioctl_tq == NULL) {
++              printk(KERN_WARNING
++                  "qla2x00: ERROR in ioctl tgt queue allocation.\n");
++              return QL_STATUS_RESOURCE_ERROR;
++      }
++
++      ha->ioctl->ioctl_lq = KMEM_ZALLOC(sizeof(os_lun_t), 14);
++      if (ha->ioctl->ioctl_lq == NULL) {
++              printk(KERN_WARNING
++                  "qla2x00: ERROR in ioctl lun queue allocation.\n");
++              return QL_STATUS_RESOURCE_ERROR;
++      }
++      /*INIT_LIST_HEAD(&(ha->ioctl->ioctl_lq->cmd));*/
++
++      /* Pick the largest size we'll need per ha of all ioctl cmds.
++       * Use this size when freeing.
++       */
++      ha->ioctl->scrap_mem = KMEM_ZALLOC(QLA_IOCTL_SCRAP_SIZE, 15);
++      if (ha->ioctl->scrap_mem == NULL) {
++              printk(KERN_WARNING
++                  "qla2x00: ERROR in ioctl scrap_mem allocation.\n");
++              return QL_STATUS_RESOURCE_ERROR;
++      }
++      ha->ioctl->scrap_mem_size = QLA_IOCTL_SCRAP_SIZE;
++      ha->ioctl->scrap_mem_used = 0;
++      DEBUG9(printk("%s(%ld): scrap_mem_size=%d.\n",
++          __func__, ha->host_no, ha->ioctl->scrap_mem_size);)
++
++      ha->ioctl->ioctl_lq->q_state = LUN_STATE_READY;
++      ha->ioctl->ioctl_lq->q_lock = SPIN_LOCK_UNLOCKED;
++
++      /* Init wait_q fields */
++      ha->ioctl->wait_q_lock = SPIN_LOCK_UNLOCKED;
++
++      DEBUG9(printk("%s(%ld): inst=%ld exiting.\n",
++          __func__, ha->host_no, ha->instance);)
++  
++      return QL_STATUS_SUCCESS;
++}
++
++/*
++ * qla2x00_get_new_ioctl_dma_mem
++ *    Allocates dma memory of the specified size.
++ *    This is done to replace any previously allocated ioctl dma buffer.
++ *
++ * Input:
++ *    ha = adapter state pointer.
++ *
++ * Returns:
++ *    qla2x00 local function return status code.
++ *
++ * Context:
++ *    Kernel context.
++ */
++static int
++qla2x00_get_new_ioctl_dma_mem(scsi_qla_host_t *ha, uint32_t size)
++{
++      DEBUG9(printk("%s entered.\n", __func__);)
++
++      if (ha->ioctl_mem) {
++              DEBUG9(printk("%s: ioctl_mem was previously allocated. "
++                  "Dealloc old buffer.\n", __func__);)
++
++              /* free the memory first */
++              pci_free_consistent(ha->pdev, ha->ioctl_mem_size, ha->ioctl_mem,
++                  ha->ioctl_mem_phys);
++      }
++
++      /* Get consistent memory allocated for ioctl I/O operations. */
++      ha->ioctl_mem = pci_alloc_consistent(ha->pdev,
++          size, &ha->ioctl_mem_phys);
++
++      if (ha->ioctl_mem == NULL) {
++              printk(KERN_WARNING
++                  "%s: ERROR in ioctl physical memory allocation. "
++                  "Requested length=%x.\n", __func__, size);
++
++              ha->ioctl_mem_size = 0;
++              return QL_STATUS_RESOURCE_ERROR;
++      }
++      ha->ioctl_mem_size = size;
++
++      DEBUG9(printk("%s exiting.\n", __func__);)
++
++      return QL_STATUS_SUCCESS;
++}
++
++/*
++ * qla2x00_free_ioctl_mem
++ *    Frees memory used by IOCTL code for the specified ha.
++ *
++ * Input:
++ *    ha = adapter state pointer.
++ *
++ * Context:
++ *    Kernel context.
++ */
++void
++qla2x00_free_ioctl_mem(scsi_qla_host_t *ha)
++{
++      DEBUG9(printk("%s(%ld): inst=%ld entered.\n",
++          __func__, ha->host_no, ha->instance);)
++
++      if (ha->ioctl != NULL) {
++
++              if (ha->ioctl->scrap_mem != NULL) {
++                      /* The size here must match up to what we
++                       * allocated before.
++                       */
++                      KMEM_FREE(ha->ioctl->scrap_mem,
++                          ha->ioctl->scrap_mem_size);
++                      ha->ioctl->scrap_mem = NULL;
++                      ha->ioctl->scrap_mem_size = 0;
++              }
++
++              if (ha->ioctl->ioctl_tq != NULL) {
++                      KMEM_FREE(ha->ioctl->ioctl_tq, sizeof(os_tgt_t));
++                      ha->ioctl->ioctl_tq = NULL;
++              }
++
++              if (ha->ioctl->ioctl_lq != NULL) {
++                      KMEM_FREE(ha->ioctl->ioctl_lq, sizeof(os_lun_t));
++                      ha->ioctl->ioctl_lq = NULL;
++              }
++
++              if (ha->ioctl->aen_tracking_queue != NULL) {
++                      KMEM_FREE(ha->ioctl->aen_tracking_queue,
++                          EXT_DEF_MAX_AEN_QUEUE * sizeof(EXT_ASYNC_EVENT));
++                      ha->ioctl->aen_tracking_queue = NULL;
++              }
++
++              KMEM_FREE(ha->ioctl, sizeof(hba_ioctl_context));
++              ha->ioctl = NULL;
++      }
++
++      /* free memory allocated for ioctl operations */
++      pci_free_consistent(ha->pdev, ha->ioctl_mem_size, ha->ioctl_mem,
++          ha->ioctl_mem_phys);
++      ha->ioctl_mem = NULL;
++
++      DEBUG9(printk("%s(%ld): inst=%ld exiting.\n",
++          __func__, ha->host_no, ha->instance);)
++
++}
++
++/*
++ * qla2x00_get_ioctl_scrap_mem
++ *    Returns pointer to memory of the specified size from the scrap buffer.
++ *    This can be called multiple times before the free call as long
++ *    as the memory is to be used by the same ioctl command and
++ *    there's still memory left in the scrap buffer.
++ *
++ * Input:
++ *    ha = adapter state pointer.
++ *    ppmem = pointer to return a buffer pointer.
++ *    size = size of buffer to return.
++ *
++ * Returns:
++ *    qla2x00 local function return status code.
++ *
++ * Context:
++ *    Kernel context.
++ */
++int
++qla2x00_get_ioctl_scrap_mem(scsi_qla_host_t *ha, void **ppmem, uint32_t size)
++{
++      int             ret = QL_STATUS_SUCCESS;
++      uint32_t        free_mem;
++
++      DEBUG9(printk("%s(%ld): inst=%ld entered. size=%d.\n",
++          __func__, ha->host_no, ha->instance, size);)
++
++      free_mem = ha->ioctl->scrap_mem_size - ha->ioctl->scrap_mem_used;
++      if (free_mem >= size) {
++              *ppmem = ha->ioctl->scrap_mem + ha->ioctl->scrap_mem_used;
++              ha->ioctl->scrap_mem_used += size;
++      } else {
++              DEBUG10(printk("%s(%ld): no more scrap memory.\n",
++                  __func__, ha->host_no);)
++
++              ret = QL_STATUS_ERROR;
++      }
++
++      DEBUG9(printk("%s(%ld): exiting. ret=%d.\n",
++          __func__, ha->host_no, ret);)
++
++      return (ret);
++}
++
++/*
++ * qla2x00_free_ioctl_scrap_mem
++ *    Makes the entire scrap buffer free for use.
++ *
++ * Input:
++ *    ha = adapter state pointer.
++ *
++ * Returns:
++ *    qla2x00 local function return status code.
++ *
++ */
++void
++qla2x00_free_ioctl_scrap_mem(scsi_qla_host_t *ha)
++{
++      DEBUG9(printk("%s(%ld): inst=%ld entered.\n",
++          __func__, ha->host_no, ha->instance);)
++
++      memset(ha->ioctl->scrap_mem, 0, ha->ioctl->scrap_mem_size);
++      ha->ioctl->scrap_mem_used = 0;
++
++      DEBUG9(printk("%s(%ld): exiting.\n",
++          __func__, ha->host_no);)
++}
++
++#if defined(ISP2300)
++/*
++ * qla2x00_get_next_free_pub_id
++ *    Find the next free public loop ID to use, starting from the old
++ *    loop ID passed in.  If the old loop ID is invalid, this function
++ *    will start the search from beginning.
++ *
++ * Input:
++ *    ha              = adapter block pointer.
++ *    ploop_id        = pointer to a 16bit var containing the old loop
++ *                    ID which is also to be used to get the new loop ID.
++ *
++ * Returns:
++ *      QL_STATUS_SUCCESS - Found an usable loop ID
++ *      QL_STATUS_RESOURCE_ERROR - No more free loop ID
++ */
++static uint8_t
++qla2x00_get_next_free_pub_id(scsi_qla_host_t *ha, uint16_t *ploop_id)
++{
++      uint8_t         retval = QL_STATUS_SUCCESS;
++      uint16_t        index;
++      uint16_t        old_id;
++
++      DEBUG9(printk("%s(%ld): inst=%ld entered.\n",
++          __func__, ha->host_no, ha->instance);)
++
++      old_id = *ploop_id;
++      if (old_id >= LAST_SNS_LOOP_ID) {
++              /* set a starting point */
++              old_id = ha->min_external_loopid;
++      }
++
++      for (index = old_id; index < LAST_SNS_LOOP_ID; index++) {
++              if (!ha->fabricid[index].in_use) {
++                      ha->fabricid[index].in_use = TRUE;
++                      *ploop_id = index;
++                      DEBUG9(printk("%s(%ld): found Lid %02x.\n",
++                          __func__, ha->host_no, index);)
++                      break;
++              }
++      }
++      if (index >= LAST_SNS_LOOP_ID) {
++              /* no more free ID */
++              DEBUG9_10(printk("%s(%ld): inst=%ld ERROR no more free LID "
++                  "available.\n", __func__, ha->host_no, ha->instance);)
++
++              retval = QL_STATUS_RESOURCE_ERROR;
++      }
++
++      DEBUG9(printk("%s(%ld): inst=%ld exiting. retval=%d.\n",
++           __func__, ha->host_no, ha->instance, retval);)
++
++      return retval;
++}
++
++/*
++ * qla2x00_host_relogin
++ *    Issue fabric login command to a host in the host_db which
++ *    had somehow been lost before. All updates are passed back
++ *    via pdevice. No update will be done to any of ha's database.
++ *
++ * Input:
++ *    ha = adapter block pointer.
++ *    pdevice = pointer to FC device type structure.
++ *
++ * Returns:
++ *      QL_STATUS_SUCCESS - Login successfully
++ *      QL_STATUS_ERROR - Login failed
++ *      QL_STATUS_FATAL_ERROR - Fatal error
++ */
++static uint8_t
++qla2x00_host_relogin(scsi_qla_host_t *ha, fcdev_t *pdevice) 
++{
++      uint8_t         retval = QL_STATUS_SUCCESS;
++      uint16_t        status[3];
++      uint16_t        tmp_loop_id;
++
++      DEBUG9(printk("%s(%ld): inst=%ld entered.\n",
++          __func__, ha->host_no, ha->instance);)
++
++      /* pdevice->loop_id is assumed to be straight from the current
++       * database content.
++       */
++      tmp_loop_id = pdevice->loop_id & 0xff;
++      if (tmp_loop_id >= LAST_SNS_LOOP_ID) {
++              /* Invalid value.  We need to find a valid ID to use. */
++              if (qla2x00_get_next_free_pub_id(ha, &tmp_loop_id) != 0) {
++                      /* no more free IDs to use */
++                      DEBUG9_10(printk("%s(%ld): inst=%ld no free loop_id "
++                          " available for login.\n",
++                          __func__, ha->host_no, ha->instance);)
++
++                      return QL_STATUS_ERROR;
++              }
++      }
++
++      for (;;) {
++              DEBUG9(printk("%s(%ld): Login w/loop id 0x%02x for port "
++                  "%02x%02x%02x\n",
++                  __func__, ha->host_no, pdevice->loop_id,
++                  pdevice->d_id.b.domain,
++                  pdevice->d_id.b.area,
++                  pdevice->d_id.b.al_pa));
++
++              /* Login device on switch. */
++              qla2x00_login_fabric(ha,
++                  tmp_loop_id, pdevice->d_id.b.domain,
++                  pdevice->d_id.b.area, pdevice->d_id.b.al_pa, 
++                  &status[0], 0);
++
++              if (status[0] != MBS_CMD_CMP &&
++                  status[0] != MBS_PORT_ID_IN_USE &&
++                  status[0] != MBS_LOOP_ID_IN_USE) {
++
++                      DEBUG9_10(printk("%s(%ld): inst=%ld "
++                          "ERROR login status[0]=%x status[1]=%x.\n",
++                          __func__, ha->host_no, ha->instance, status[0],
++                          status[1]);)
++
++                      retval = QL_STATUS_FATAL_ERROR;
++                      break;
++              }
++
++              if (status[0] == MBS_CMD_CMP) {
++                      DEBUG9(printk("%s(%ld): inst=%ld "
++                          " host login success; loop_id=%x.\n",
++                          __func__, ha->host_no, ha->instance, tmp_loop_id);)
++
++                      pdevice->loop_id = tmp_loop_id;
++                      retval = QL_STATUS_SUCCESS;
++                      break;
++
++              } else if (status[0] == MBS_PORT_ID_IN_USE) {
++                      ha->fabricid[tmp_loop_id].in_use = FALSE;
++                      tmp_loop_id = status[1];
++
++                      DEBUG9(printk("%s(%ld): inst=%ld "
++                          "port %02x%02x%02x already using loop id=0x%02x in "
++                          "f/w database. Retrying.\n",
++                          __func__, ha->host_no, ha->instance,
++                          pdevice->d_id.b.domain,
++                          pdevice->d_id.b.area,
++                          pdevice->d_id.b.al_pa,
++                          tmp_loop_id);)
++
++                      if (tmp_loop_id <= LAST_SNS_LOOP_ID) {
++                              ha->fabricid[tmp_loop_id].in_use = TRUE;
++                      } else {
++                              /* Error */
++                              DEBUG9_10(printk("%s(%ld): inst=%ld "
++                                  "PORT_ID_IN_USE - invalid loop id %02x "
++                                  "returned.\n",
++                                  __func__, ha->host_no, ha->instance,
++                                  pdevice->loop_id);)
++                              retval = QL_STATUS_ERROR;
++                              break;
++                      }
++
++              } else if (status[0] == MBS_LOOP_ID_IN_USE) {
++                      /* loop id already used by others; try another one */
++                      DEBUG9_10(printk("%s(%ld): inst=%ld "
++                          "loop id %02x already used.\n",
++                          __func__, ha->host_no, ha->instance,
++                          pdevice->loop_id);)
++
++                      /* Search for another usable loop_id */
++                      if (qla2x00_get_next_free_pub_id(ha,
++                          &tmp_loop_id) == 0) {
++
++                              DEBUG9(printk("%s(%ld): previous loop "
++                                  "id in use. Retry with 0x%02x.\n",
++                                  __func__, ha->host_no, tmp_loop_id);)
++
++                              ha->fabricid[tmp_loop_id].in_use = TRUE;
++                      } else {
++                              /* Error */
++                              DEBUG9_10(printk("%s(%ld): inst=%ld loop id "
++                                  "in use; no more free loop id.\n",
++                                  __func__, ha->host_no, ha->instance);)
++
++                              retval = QL_STATUS_ERROR;
++                              break;
++                      }
++              }
++      }
++
++      DEBUG9(printk("%s(%ld): inst=%ld exiting. retval=%d.\n",
++           __func__, ha->host_no, ha->instance, retval);)
++
++      return (retval);
++}
++#endif
++
++/*
++ * qla2x00_find_curr_ha
++ *    Searches and returns the pointer to the adapter host_no specified.
++ *
++ * Input:
++ *    host_inst = driver internal adapter instance number to search.
++ *    ha = adapter state pointer of the instance requested.
++ *
++ * Returns:
++ *    qla2x00 local function return status code.
++ *
++ * Context:
++ *    Kernel context.
++ */
++static int
++qla2x00_find_curr_ha(uint16_t host_inst, scsi_qla_host_t **ret_ha)
++{
++      int     rval = QL_STATUS_SUCCESS;
++      int     found;
++      struct list_head *hal;
++      scsi_qla_host_t *search_ha = NULL;
++
++      /*
++       * Set ha context for this IOCTL by matching host_no.
++       */
++      found = 0;
++      read_lock(&qla_hostlist_lock);
++      list_for_each(hal, &qla_hostlist) {
++              search_ha = list_entry(hal, scsi_qla_host_t, list);
++
++              if (search_ha->instance == host_inst) {
++                      found++;
++                      break;
++              }
++      }
++      read_unlock(&qla_hostlist_lock);
++
++      if (!found) {
++              DEBUG10(printk("%s: ERROR matching host_inst "
++                  "%d to an HBA Instance.\n", __func__, host_inst);)
++              rval = QL_STATUS_ERROR;
++      } else {
++              DEBUG9(printk("%s: found matching host_inst "
++                  "%d to an HBA Instance.\n", __func__, host_inst);)
++              *ret_ha = search_ha;
++      }
++
++      return rval;
++}
++
++/*
++ * qla2x00_get_driver_specifics
++ *    Returns driver specific data in the response buffer.
++ *
++ * Input:
++ *    pext = pointer to EXT_IOCTL structure containing values from user.
++ *
++ * Returns:
++ *    0 = success
++ *    others = errno value
++ *
++ * Context:
++ *    Kernel context.
++ */
++static int
++qla2x00_get_driver_specifics(EXT_IOCTL *pext)
++{
++      int                     ret = 0;
++      EXT_LN_DRIVER_DATA      data;
++
++      DEBUG9(printk("%s: entered.\n",
++          __func__);)
++
++      if (pext->ResponseLen < sizeof(EXT_LN_DRIVER_DATA)) {
++              pext->Status = EXT_STATUS_BUFFER_TOO_SMALL;
++              DEBUG9_10(printk("%s: ERROR ResponseLen too small.\n",
++                  __func__);)
++
++              return (ret);
++      }
++
++      data.DrvVer.Major = QLA_DRIVER_MAJOR_VER;
++      data.DrvVer.Minor = QLA_DRIVER_MINOR_VER;
++      data.DrvVer.Patch = QLA_DRIVER_PATCH_VER;
++      data.DrvVer.Beta = QLA_DRIVER_BETA_VER;
++
++      ret = verify_area(VERIFY_WRITE, (void *)pext->ResponseAdr,
++          sizeof(EXT_LN_DRIVER_DATA));
++      if (ret) {
++              pext->Status = EXT_STATUS_COPY_ERR;
++              DEBUG9_10(printk("%s: ERROR verify write resp buf\n",
++                  __func__);)
++
++              return (ret);
++      }
++
++      ret = copy_to_user(pext->ResponseAdr, &data, sizeof(EXT_LN_DRIVER_DATA));
++      if (ret) {
++              pext->Status = EXT_STATUS_COPY_ERR;
++              DEBUG9_10(printk("%s: ERROR copy resp buf\n",
++                  __func__);)
++      }
++
++      DEBUG9(printk("%s: exiting. ret=%d.\n",
++          __func__, ret);)
++
++      return (ret);
++}
++
++/*
++ * qla2x00_aen_reg
++ *    IOCTL management server Asynchronous Event Tracking Enable/Disable.
++ *
++ * Input:
++ *    ha = pointer to the adapter struct of the adapter to register.
++ *    cmd = pointer to EXT_IOCTL structure containing values from user.
++ *    mode = flags. not used.
++ *
++ * Returns:
++ *    0 = success
++ *    others = errno value
++ *
++ * Context:
++ *    Kernel context.
++ */
++static int
++qla2x00_aen_reg(scsi_qla_host_t *ha, EXT_IOCTL *cmd, int mode)
++{
++      int             rval = 0;
++      EXT_REG_AEN     reg_struct;
++
++      DEBUG9(printk("%s(%ld): inst %ld entered.\n",
++          __func__, ha->host_no, ha->instance);)
++
++      rval = verify_area(VERIFY_READ, (void *)cmd->RequestAdr,
++          sizeof(EXT_REG_AEN));
++      if (rval) {
++              cmd->Status = EXT_STATUS_COPY_ERR;
++              DEBUG9_10(printk("%s(%ld): inst %ld ERROR verify read req buf\n",
++                  __func__, ha->host_no, ha->instance);)
++
++              return (rval);
++      }
++
++      rval = copy_from_user(&reg_struct, cmd->RequestAdr, sizeof(EXT_REG_AEN));
++      if (rval == 0) {
++              cmd->Status = EXT_STATUS_OK;
++              if (reg_struct.Enable) {
++                      ha->ioctl->flags |= IOCTL_AEN_TRACKING_ENABLE;
++              } else {
++                      ha->ioctl->flags &= ~IOCTL_AEN_TRACKING_ENABLE;
++              }
++      } else {
++              cmd->Status = EXT_STATUS_COPY_ERR;
++      }
++
++      DEBUG9(printk("%s(%ld): inst %ld reg_struct.Enable(%d) "
++          "ha->ioctl_flag(%x) cmd->Status(%d).",
++          __func__, ha->host_no, ha->instance, reg_struct.Enable,
++          ha->ioctl->flags, cmd->Status);)
++
++      DEBUG9(printk("%s(%ld): inst=%ld exiting.\n",
++          __func__, ha->host_no, ha->instance);)
++
++      return (rval);
++}
++
++/*
++ * qla2x00_aen_get
++ *    Asynchronous Event Record Transfer to user.
++ *    The entire queue will be emptied and transferred back.
++ *
++ * Input:
++ *    ha = pointer to the adapter struct of the specified adapter.
++ *    pext = pointer to EXT_IOCTL structure containing values from user.
++ *    mode = flags.
++ *
++ * Returns:
++ *    0 = success
++ *    others = errno value
++ *
++ * Context:
++ *    Kernel context.
++ *
++ * NOTE: Need to use hardware lock to protect the queues from updates
++ *     via isr/enqueue_aen after we get rid of io_request_lock.
++ */
++static int
++qla2x00_aen_get(scsi_qla_host_t *ha, EXT_IOCTL *cmd, int mode)
++{
++      int             rval = 0;
++      EXT_ASYNC_EVENT *tmp_q;
++      EXT_ASYNC_EVENT *paen;
++      uint8_t         i;
++      uint8_t         queue_cnt;
++      uint8_t         request_cnt;
++      uint32_t        stat = EXT_STATUS_OK;
++      uint32_t        ret_len = 0;
++      unsigned long   cpu_flags = 0;
++
++      DEBUG9(printk("%s(%ld): inst=%ld entered.\n",
++          __func__, ha->host_no, ha->instance);)
++
++      request_cnt = (uint8_t)(cmd->ResponseLen / sizeof(EXT_ASYNC_EVENT));
++
++      if (request_cnt < EXT_DEF_MAX_AEN_QUEUE) {
++              /* We require caller to alloc for the maximum request count */
++              cmd->Status       = EXT_STATUS_BUFFER_TOO_SMALL;
++              DEBUG9_10(printk("%s(%ld): inst=%ld Buffer too small. "
++                  "Exiting normally.",
++                  __func__, ha->host_no, ha->instance);)
++
++              return (rval);
++      }
++
++      if (qla2x00_get_ioctl_scrap_mem(ha, (void **)&paen,
++          sizeof(EXT_ASYNC_EVENT) * EXT_DEF_MAX_AEN_QUEUE)) {
++              /* not enough memory */
++              cmd->Status = EXT_STATUS_NO_MEMORY;
++              DEBUG9_10(printk("%s(%ld): inst=%ld scrap not big enough. "
++                  "size requested=%d.\n",
++                  __func__, ha->host_no, ha->instance,
++                  sizeof(EXT_ASYNC_EVENT)*EXT_DEF_MAX_AEN_QUEUE);)
++              return (rval);
++      }
++
++      /* 1st: Make a local copy of the entire queue content. */
++      tmp_q = (EXT_ASYNC_EVENT *)ha->ioctl->aen_tracking_queue;
++      queue_cnt = 0;
++
++      spin_lock_irqsave(&ha->hardware_lock, cpu_flags);
++      i = ha->ioctl->aen_q_head;
++
++      for (; queue_cnt < EXT_DEF_MAX_AEN_QUEUE;) {
++              if (tmp_q[i].AsyncEventCode != 0) {
++                      memcpy(&paen[queue_cnt], &tmp_q[i],
++                          sizeof(EXT_ASYNC_EVENT));
++                      queue_cnt++;
++                      tmp_q[i].AsyncEventCode = 0; /* empty out the slot */
++              }
++
++              if (i == ha->ioctl->aen_q_tail) {
++                      /* done. */
++                      break;
++              }
++
++              i++;
++
++              if (i == EXT_DEF_MAX_AEN_QUEUE) {
++                      i = 0;
++              }
++      }
++
++      /* Empty the queue. */
++      ha->ioctl->aen_q_head = 0;
++      ha->ioctl->aen_q_tail = 0;
++
++      spin_unlock_irqrestore(&ha->hardware_lock, cpu_flags);
++
++      /* 2nd: Now transfer the queue content to user buffer */
++      /* Copy the entire queue to user's buffer. */
++      ret_len = (uint32_t)(queue_cnt * sizeof(EXT_ASYNC_EVENT));
++      if (queue_cnt != 0) {
++              rval = verify_area(VERIFY_WRITE, (void *)cmd->ResponseAdr,
++                  ret_len);
++              if (rval != 0) {
++                      cmd->Status = EXT_STATUS_COPY_ERR;
++                      DEBUG9_10(printk(
++                          "%s(%ld): inst=%ld ERROR verify write resp buf.\n",
++                          __func__, ha->host_no, ha->instance);)
++
++                      qla2x00_free_ioctl_scrap_mem(ha);
++                      return (rval);
++              }
++
++              rval = copy_to_user(cmd->ResponseAdr, paen, ret_len);
++      }
++      cmd->ResponseLen = ret_len;
++
++      if (rval != 0) {
++              stat = EXT_STATUS_COPY_ERR;
++              DEBUG9_10(printk("%s(%ld): inst=%ld FAILED. error = %d\n",
++                  __func__, ha->host_no, ha->instance, stat);)
++      } else {
++              stat = EXT_STATUS_OK;
++      }
++
++      cmd->Status = stat;
++      qla2x00_free_ioctl_scrap_mem(ha);
++
++      DEBUG9(printk("%s(%ld): inst=%ld exiting. rval=%d.\n",
++           __func__, ha->host_no, ha->instance, rval);)
++
++      return (rval);
++}
++
++/*
++ * qla2x00_enqueue_aen
++ *
++ * Input:
++ *    ha = adapter state pointer.
++ *    event_code = async event code of the event to add to queue.
++ *    payload = event payload for the queue.
++ *
++ * Context:
++ *    Interrupt context.
++ * NOTE: Need to hold the hardware lock to protect the queues from
++ *     aen_get after we get rid of the io_request_lock.
++ */
++void
++qla2x00_enqueue_aen(scsi_qla_host_t *ha, uint16_t event_code, void *payload)
++{
++      uint8_t                 new_entry; /* index to current entry */
++      uint16_t                *mbx;
++      EXT_ASYNC_EVENT         *aen_queue;
++
++      DEBUG9(printk("%s(%ld): inst=%ld entered.\n",
++          __func__, ha->host_no, ha->instance);)
++
++      aen_queue = (EXT_ASYNC_EVENT *)ha->ioctl->aen_tracking_queue;
++      if (aen_queue[ha->ioctl->aen_q_tail].AsyncEventCode != 0) {
++              /* Need to change queue pointers to make room. */
++
++              /* Increment tail for adding new entry. */
++              ha->ioctl->aen_q_tail++;
++              if (ha->ioctl->aen_q_tail == EXT_DEF_MAX_AEN_QUEUE) {
++                      ha->ioctl->aen_q_tail = 0;
++              }
++
++              if (ha->ioctl->aen_q_head == ha->ioctl->aen_q_tail) {
++                      /*
++                       * We're overwriting the oldest entry, so need to
++                       * update the head pointer.
++                       */
++                      ha->ioctl->aen_q_head++;
++                      if (ha->ioctl->aen_q_head == EXT_DEF_MAX_AEN_QUEUE) {
++                              ha->ioctl->aen_q_head = 0;
++                      }
++              }
++      }
++
++      DEBUG(printk("%s(%ld): inst=%ld Adding code 0x%x to aen_q %p @ %d\n",
++          __func__, ha->host_no, ha->instance, event_code, aen_queue,
++          ha->ioctl->aen_q_tail);)
++
++      new_entry = ha->ioctl->aen_q_tail;
++      aen_queue[new_entry].AsyncEventCode = event_code;
++
++              /* Update payload */
++      switch (event_code) {
++      case MBA_LIP_OCCURRED:
++      case MBA_LOOP_UP:
++      case MBA_LOOP_DOWN:
++      case MBA_LIP_RESET:
++      case MBA_PORT_UPDATE:
++              /* empty */
++              break;
++
++      case MBA_SCR_UPDATE:
++              mbx = (uint16_t *)payload;
++              /* al_pa */
++              aen_queue[new_entry].Payload.RSCN.RSCNInfo[0] = LSB(mbx[2]);
++              /* area */
++              aen_queue[new_entry].Payload.RSCN.RSCNInfo[1] = MSB(mbx[2]);
++              /* domain */
++              aen_queue[new_entry].Payload.RSCN.RSCNInfo[2] = LSB(mbx[1]);
++              /* save in big endian */
++              BIG_ENDIAN_24(aen_queue[new_entry].Payload.RSCN.RSCNInfo[0]);
++
++              aen_queue[new_entry].Payload.RSCN.AddrFormat = MSB(mbx[1]);
++
++              break;
++
++      default:
++              /* Not supported */
++              aen_queue[new_entry].AsyncEventCode = 0;
++              break;
++      }
++
++      DEBUG9(printk("%s(%ld): inst=%ld exiting.\n",
++          __func__, ha->host_no, ha->instance);)
++}
++
++/*
++ * qla2x00_query
++ *    Handles all subcommands of the EXT_CC_QUERY command.
++ *
++ * Input:
++ *    ha = adapter state pointer.
++ *    pext = EXT_IOCTL structure pointer.
++ *    mode = not used.
++ *
++ * Returns:
++ *    0 = success
++ *    others = errno value
++ *
++ * Context:
++ *    Kernel context.
++ */
++static int
++qla2x00_query(scsi_qla_host_t *ha, EXT_IOCTL *pext, int mode)
++{
++      int rval = 0;
++
++      DEBUG9(printk("%s(%ld): inst=%ld entered.\n",
++          __func__, ha->host_no, ha->instance);)
++
++      /* All Query type ioctls are done here */
++      switch(pext->SubCode) {
++
++      case EXT_SC_QUERY_HBA_NODE:
++              /* fill in HBA NODE Information */
++              rval = qla2x00_query_hba_node(ha, pext, mode);
++              break;
++
++      case EXT_SC_QUERY_HBA_PORT:
++              /* return HBA PORT related info */
++              rval = qla2x00_query_hba_port(ha, pext, mode);
++              break;
++
++      case EXT_SC_QUERY_DISC_PORT:
++              /* return discovered port information */
++              rval = qla2x00_query_disc_port(ha, pext, mode);
++              break;
++
++      case EXT_SC_QUERY_DISC_TGT:
++              /* return discovered target information */
++              rval = qla2x00_query_disc_tgt(ha, pext, mode);
++              break;
++
++      case EXT_SC_QUERY_CHIP:
++              rval = qla2x00_query_chip(ha, pext, mode);
++              break;
++
++      case EXT_SC_QUERY_DISC_LUN:
++              pext->Status = EXT_STATUS_UNSUPPORTED_SUBCODE;
++              break;
++
++      default:
++              DEBUG9_10(printk("%s(%ld): inst=%ld unknown SubCode %d.\n",
++                  __func__, ha->host_no, ha->instance, pext->SubCode);)
++              pext->Status = EXT_STATUS_UNSUPPORTED_SUBCODE;
++              break;
++      }
++
++      DEBUG9(printk("%s(%ld): inst=%ld exiting.\n",
++          __func__, ha->host_no, ha->instance);)
++      return rval;
++}
++
++/*
++ * qla2x00_query_hba_node
++ *    Handles EXT_SC_QUERY_HBA_NODE subcommand.
++ *
++ * Input:
++ *    ha = adapter state pointer.
++ *    pext = EXT_IOCTL structure pointer.
++ *    mode = not used.
++ *
++ * Returns:
++ *    0 = success
++ *    others = errno value
++ *
++ * Context:
++ *    Kernel context.
++ */
++static int
++qla2x00_query_hba_node(scsi_qla_host_t *ha, EXT_IOCTL *pext, int mode)
++{
++      int             ret = 0;
++      uint32_t        i, transfer_size;
++      EXT_HBA_NODE    *ptmp_hba_node;
++
++      DEBUG9(printk("%s(%ld): inst=%ld entered.\n",
++          __func__, ha->host_no, ha->instance);)
++
++      if (qla2x00_get_ioctl_scrap_mem(ha, (void **)&ptmp_hba_node,
++          sizeof(EXT_HBA_NODE))) {
++              /* not enough memory */
++              pext->Status = EXT_STATUS_NO_MEMORY;
++              DEBUG9_10(printk("%s(%ld): inst=%ld scrap not big enough. "
++                  "size requested=%d.\n",
++                  __func__, ha->host_no, ha->instance,
++                  sizeof(EXT_HBA_NODE));)
++              return (ret);
++      }
++
++      /* fill all available HBA NODE Information */
++      for (i = 0; i < 8 ; i++)
++              ptmp_hba_node->WWNN[i] = ha->node_name[i];
++
++      sprintf((char *)(ptmp_hba_node->Manufacturer),"Qlogic Corp.");
++      sprintf((char *)(ptmp_hba_node->Model), ha->brd_info->name);
++
++      ptmp_hba_node->SerialNum[0] = ha->serial0;
++      ptmp_hba_node->SerialNum[1] = ha->serial1;
++      ptmp_hba_node->SerialNum[2] = ha->serial2;
++      sprintf((char *)(ptmp_hba_node->DriverVersion), qla2x00_version_str);
++      sprintf((char *)(ptmp_hba_node->FWVersion),"%2d.%02d.%02d",
++          ha->fw_major_version, 
++          ha->fw_minor_version, 
++          ha->fw_subminor_version);
++
++      sprintf((char *)(ptmp_hba_node->OptRomVersion),"%d.%d",
++          ha->optrom_major, ha->optrom_minor);
++
++      ptmp_hba_node->InterfaceType = EXT_DEF_FC_INTF_TYPE;
++      ptmp_hba_node->PortCount = 1;
++
++
++      ptmp_hba_node->DriverAttr = (ha->flags.failover_enabled) ?
++          DRVR_FO_ENABLED : 0;
++
++      ret = verify_area(VERIFY_WRITE, (void  *)pext->ResponseAdr,
++          sizeof(EXT_HBA_NODE));
++      if (ret) {
++              pext->Status = EXT_STATUS_COPY_ERR;
++              DEBUG9_10(printk("%s(%ld): inst=%ld ERROR verify wrt rsp buf\n",
++                  __func__, ha->host_no, ha->instance);)
++              qla2x00_free_ioctl_scrap_mem(ha);
++              return (ret);
++      }
++
++      /* now copy up the HBA_NODE to user */
++      if (pext->ResponseLen < sizeof(EXT_HBA_NODE))
++              transfer_size = pext->ResponseLen;
++      else
++              transfer_size = sizeof(EXT_HBA_NODE);
++
++      ret = copy_to_user((uint8_t *)pext->ResponseAdr,
++          (uint8_t *)ptmp_hba_node, transfer_size);
++      if (ret) {
++              pext->Status = EXT_STATUS_COPY_ERR;
++              DEBUG9_10(printk("%s(%ld): inst=%ld ERROR copy rsp buffer.\n",
++                  __func__, ha->host_no, ha->instance);)
++              qla2x00_free_ioctl_scrap_mem(ha);
++              return (ret);
++      }
++
++      pext->Status       = EXT_STATUS_OK;
++      pext->DetailStatus = EXT_STATUS_OK;
++
++      DEBUG9(printk("%s(%ld): inst=%ld exiting.\n",
++          __func__, ha->host_no, ha->instance);)
++
++      qla2x00_free_ioctl_scrap_mem(ha);
++      return (ret);
++}
++
++/*
++ * qla2x00_query_hba_port
++ *    Handles EXT_SC_QUERY_HBA_PORT subcommand.
++ *
++ * Input:
++ *    ha = adapter state pointer.
++ *    pext = EXT_IOCTL structure pointer.
++ *    mode = not used.
++ *
++ * Returns:
++ *    0 = success
++ *    others = errno value
++ *
++ * Context:
++ *    Kernel context.
++ */
++static int
++qla2x00_query_hba_port(scsi_qla_host_t *ha, EXT_IOCTL *pext, int mode)
++{
++      int             ret = 0;
++      uint32_t        tgt_cnt, tgt, transfer_size;
++      uint32_t        port_cnt;
++      struct list_head        *fcpl;
++      fc_port_t       *fcport;
++      EXT_HBA_PORT    *ptmp_hba_port;
++
++      DEBUG9(printk("%s(%ld): inst=%ld entered.\n",
++          __func__, ha->host_no, ha->instance);)
++
++      if (qla2x00_get_ioctl_scrap_mem(ha, (void **)&ptmp_hba_port,
++          sizeof(EXT_HBA_PORT))) {
++              /* not enough memory */
++              pext->Status = EXT_STATUS_NO_MEMORY;
++              DEBUG9_10(printk("%s(%ld): inst=%ld scrap not big enough. "
++                  "size requested=%d.\n",
++                  __func__, ha->host_no, ha->instance,
++                  sizeof(EXT_HBA_PORT));)
++              return (ret);
++      }
++
++      /* reflect all HBA PORT related info */
++      ptmp_hba_port->WWPN[7] = ha->init_cb->port_name[7];
++      ptmp_hba_port->WWPN[6] = ha->init_cb->port_name[6];
++      ptmp_hba_port->WWPN[5] = ha->init_cb->port_name[5];
++      ptmp_hba_port->WWPN[4] = ha->init_cb->port_name[4];
++      ptmp_hba_port->WWPN[3] = ha->init_cb->port_name[3];
++      ptmp_hba_port->WWPN[2] = ha->init_cb->port_name[2];
++      ptmp_hba_port->WWPN[1] = ha->init_cb->port_name[1];
++      ptmp_hba_port->WWPN[0] = ha->init_cb->port_name[0];
++      ptmp_hba_port->Id[0] = 0;
++      ptmp_hba_port->Id[1] = ha->d_id.r.d_id[2];
++      ptmp_hba_port->Id[2] = ha->d_id.r.d_id[1];
++      ptmp_hba_port->Id[3] = ha->d_id.r.d_id[0];
++      ptmp_hba_port->Type =  EXT_DEF_INITIATOR_DEV;
++
++      switch (ha->current_topology) {
++      case ISP_CFG_NL:
++      case ISP_CFG_FL:
++              ptmp_hba_port->Mode = EXT_DEF_LOOP_MODE;
++              break;
++
++      case ISP_CFG_N:
++      case ISP_CFG_F:
++              ptmp_hba_port->Mode = EXT_DEF_P2P_MODE;
++              break;
++
++      default:
++              ptmp_hba_port->Mode = EXT_DEF_UNKNOWN_MODE;
++              break;
++      }
++
++      port_cnt = 0;
++      list_for_each(fcpl, &ha->fcports) {
++              fcport = list_entry(fcpl, fc_port_t, list);
++
++              /* if removed or missing */
++              if (atomic_read(&fcport->state) != FC_ONLINE) {
++                      DEBUG9_10(printk(
++                          "%s(%ld): inst=%ld port %02x%02x%02x not online\n",
++                          __func__, ha->host_no, ha->instance,
++                          fcport->d_id.b.domain,
++                          fcport->d_id.b.area,
++                          fcport->d_id.b.al_pa));
++                      continue;
++              }
++              port_cnt++;
++      }
++
++      tgt_cnt  = 0;
++      for (tgt = 0; tgt < MAX_TARGETS; tgt++) {
++              if (ha->otgt[tgt] == NULL) {
++                      continue;
++              }
++              tgt_cnt++;
++      }
++
++      DEBUG9_10(printk("%s(%ld): inst=%ld disc_port cnt=%d, tgt cnt=%d.\n",
++          __func__, ha->host_no, ha->instance,
++          port_cnt, tgt_cnt);)
++      ptmp_hba_port->DiscPortCount   = port_cnt;
++      ptmp_hba_port->DiscTargetCount = tgt_cnt;
++
++      if (ha->loop_state == LOOP_DOWN) {
++
++              ptmp_hba_port->State = EXT_DEF_HBA_LOOP_DOWN;
++
++      } else if (ha->loop_state != LOOP_READY ||
++          test_bit(ABORT_ISP_ACTIVE, &ha->dpc_flags) ||
++          test_bit(CFG_ACTIVE, &ha->cfg_flags) || ABORTS_ACTIVE) {
++
++              ptmp_hba_port->State = EXT_DEF_HBA_SUSPENDED;
++
++      } else {
++
++              ptmp_hba_port->State = EXT_DEF_HBA_OK;
++
++      }
++
++      ptmp_hba_port->DiscPortNameType = EXT_DEF_USE_PORT_NAME;
++
++      /* Return supported FC4 type depending on driver support. */
++      ptmp_hba_port->PortSupportedFC4Types = EXT_DEF_FC4_TYPE_SCSI;
++#if defined(FC_IP_SUPPORT)
++
++      ptmp_hba_port->PortSupportedFC4Types |= EXT_DEF_FC4_TYPE_IP;
++#endif
++#if defined(FC_SCTP_SUPPORT)
++
++      ptmp_hba_port->PortSupportedFC4Types |= EXT_DEF_FC4_TYPE_SCTP;
++#endif
++
++      ptmp_hba_port->PortActiveFC4Types = ha->active_fc4_types;
++
++      /* Return supported speed depending on adapter type */
++#if defined(ISP2100)
++
++      ptmp_hba_port->PortSupportedSpeed = EXT_DEF_PORTSPEED_1GBIT;
++#elif defined(ISP2200)
++
++      ptmp_hba_port->PortSupportedSpeed = EXT_DEF_PORTSPEED_1GBIT;
++#elif defined(ISP2300)
++
++      ptmp_hba_port->PortSupportedSpeed = EXT_DEF_PORTSPEED_2GBIT;
++#else
++      /* invalid */
++      ptmp_hba_port->PortSupportedSpeed = 0;
++#endif
++
++      ptmp_hba_port->PortSpeed = ha->current_speed;
++
++      ret = verify_area(VERIFY_WRITE, (void *)pext->ResponseAdr ,
++          sizeof(EXT_HBA_PORT));
++      if (ret) {
++              pext->Status = EXT_STATUS_COPY_ERR;
++              DEBUG9_10(printk("%s(%ld): inst=%ld ERROR verify wrt rsp buf\n",
++                  __func__, ha->host_no, ha->instance);)
++              qla2x00_free_ioctl_scrap_mem(ha);
++              return (ret);
++      }
++
++      /* now copy up the HBA_PORT to user */
++      if (pext->ResponseLen < sizeof(EXT_HBA_PORT))
++              transfer_size = pext->ResponseLen;
++      else
++              transfer_size = sizeof(EXT_HBA_PORT);
++
++      ret = copy_to_user((uint8_t *)pext->ResponseAdr,
++          (uint8_t *)ptmp_hba_port, transfer_size);
++      if (ret) {
++              pext->Status = EXT_STATUS_COPY_ERR;
++              DEBUG9_10(printk("%s(%ld): inst=%ld ERROR copy rsp buffer.\n",
++                  __func__, ha->host_no, ha->instance);)
++              qla2x00_free_ioctl_scrap_mem(ha);
++              return (ret);
++      }
++
++      pext->Status       = EXT_STATUS_OK;
++      pext->DetailStatus = EXT_STATUS_OK;
++      qla2x00_free_ioctl_scrap_mem(ha);
++
++      DEBUG9(printk("%s(%ld): inst=%ld exiting.\n",
++          __func__, ha->host_no, ha->instance);)
++
++      return ret;
++}
++
++/*
++ * qla2x00_query_disc_port
++ *    Handles EXT_SC_QUERY_DISC_PORT subcommand.
++ *
++ * Input:
++ *    ha = adapter state pointer.
++ *    pext = EXT_IOCTL structure pointer.
++ *    mode = not used.
++ *
++ * Returns:
++ *    0 = success
++ *    others = errno value
++ *
++ * Context:
++ *    Kernel context.
++ */
++static int
++qla2x00_query_disc_port(scsi_qla_host_t *ha, EXT_IOCTL *pext, int mode)
++{
++      int             ret = 0;
++      int             found;
++      uint32_t        tgt, transfer_size, inst;
++      struct list_head *fcpl;
++      fc_port_t       *fcport;
++      os_tgt_t        *tq;
++      EXT_DISC_PORT   *ptmp_disc_port;
++
++      DEBUG9(printk("%s(%ld): inst=%ld entered. Port inst=%02d.\n",
++          __func__, ha->host_no, ha->instance, pext->Instance);)
++
++      inst = 0;
++      found = 0;
++      fcport = NULL;
++      list_for_each(fcpl, &ha->fcports) {
++              fcport = list_entry(fcpl, fc_port_t, list);
++
++              if (atomic_read(&fcport->state) != FC_ONLINE) {
++                      /* port does not exist anymore */
++                      DEBUG9(printk("%s(%ld): fcport marked lost. "
++                          "d_id=%02x%02x%02x loop_id=%02x not online.\n",
++                          __func__, ha->host_no,
++                          fcport->d_id.b.domain,
++                          fcport->d_id.b.area,
++                          fcport->d_id.b.al_pa,
++                          fcport->loop_id);)
++
++                      continue;
++              }
++
++              if (inst != pext->Instance) {
++                      DEBUG9(printk("%s(%ld): found fcport %02d "
++                          "d_id=%02x%02x%02x. Skipping.\n",
++                          __func__, ha->host_no, inst,
++                          fcport->d_id.b.domain,
++                          fcport->d_id.b.area,
++                          fcport->d_id.b.al_pa));
++
++                      inst++;
++                      continue;
++              }
++
++              DEBUG9(printk("%s(%ld): inst=%ld found matching fcport %02d "
++                  "online. d_id=%02x%02x%02x loop_id=%02x online.\n",
++                  __func__, ha->host_no, ha->instance, inst,
++                  fcport->d_id.b.domain,
++                  fcport->d_id.b.area,
++                  fcport->d_id.b.al_pa,
++                  fcport->loop_id);)
++
++              /* Found the matching port still connected. */
++              found++;
++              break;
++      }
++
++      if (!found) {
++              DEBUG9_10(printk("%s(%ld): inst=%ld dev not found.\n",
++                  __func__, ha->host_no, ha->instance);)
++
++              pext->Status = EXT_STATUS_DEV_NOT_FOUND;
++              return (ret);
++      }
++
++      if (qla2x00_get_ioctl_scrap_mem(ha, (void **)&ptmp_disc_port,
++          sizeof(EXT_DISC_PORT))) {
++              /* not enough memory */
++              pext->Status = EXT_STATUS_NO_MEMORY;
++              DEBUG9_10(printk("%s(%ld): inst=%ld scrap not big enough. "
++                  "size requested=%d.\n",
++                  __func__, ha->host_no, ha->instance,
++                  sizeof(EXT_DISC_PORT));)
++              return (ret);
++      }
++
++      memcpy(ptmp_disc_port->WWNN, fcport->node_name, WWN_SIZE);
++      memcpy(ptmp_disc_port->WWPN, fcport->port_name, WWN_SIZE);
++
++      ptmp_disc_port->Id[0] = 0;
++      ptmp_disc_port->Id[1] = fcport->d_id.r.d_id[2];
++      ptmp_disc_port->Id[2] = fcport->d_id.r.d_id[1];
++      ptmp_disc_port->Id[3] = fcport->d_id.r.d_id[0];
++
++      /* Currently all devices on fcport list are target capable devices */
++      /* This default value may need to be changed after we add non target
++       * devices also to this list.
++       */
++      ptmp_disc_port->Type = EXT_DEF_TARGET_DEV;
++
++      if (fcport->flags & FC_FABRIC_DEVICE) {
++              ptmp_disc_port->Type |= EXT_DEF_FABRIC_DEV;
++      }
++      if (fcport->flags & FC_TAPE_DEVICE) {
++              ptmp_disc_port->Type |= EXT_DEF_TAPE_DEV;
++      }
++      if (fcport->flags & FC_INITIATOR_DEVICE) {
++              ptmp_disc_port->Type |= EXT_DEF_INITIATOR_DEV;
++      }
++
++      ptmp_disc_port->LoopID = fcport->loop_id;
++      ptmp_disc_port->Status = 0;
++      ptmp_disc_port->Bus    = 0;
++
++      for (tgt = 0; tgt < MAX_TARGETS; tgt++) {
++              if ((tq = ha->otgt[tgt]) == NULL) {
++                      continue;
++              }
++
++              if (tq->vis_port == NULL)  /* dg 08/14/01 */
++                      continue;
++
++              if (memcmp(fcport->port_name, tq->vis_port->port_name,
++                  EXT_DEF_WWN_NAME_SIZE) == 0) {
++                      ptmp_disc_port->TargetId = tgt;
++                      break;
++              }
++      }
++
++      ret = verify_area(VERIFY_WRITE, (void *)pext->ResponseAdr ,
++          sizeof(EXT_DISC_PORT));
++      if (ret) {
++              pext->Status = EXT_STATUS_COPY_ERR;
++              DEBUG9_10(printk("%s(%ld): inst=%ld ERROR verify wrt rsp buf\n",
++                  __func__, ha->host_no, ha->instance);)
++              qla2x00_free_ioctl_scrap_mem(ha);
++              return (ret);
++      }
++
++      /* now copy up the DISC_PORT to user */
++      if (pext->ResponseLen < sizeof(EXT_DISC_PORT))
++              transfer_size = pext->ResponseLen;
++      else
++              transfer_size = sizeof(EXT_DISC_PORT);
++
++      ret = copy_to_user((uint8_t *)pext->ResponseAdr,
++          (uint8_t *)ptmp_disc_port, transfer_size);
++      if (ret) {
++              pext->Status = EXT_STATUS_COPY_ERR;
++              DEBUG9_10(printk("%s(%ld): inst=%ld ERROR copy rsp buffer.\n",
++                  __func__, ha->host_no, ha->instance);)
++              qla2x00_free_ioctl_scrap_mem(ha);
++              return (ret);
++      }
++
++      pext->Status       = EXT_STATUS_OK;
++      pext->DetailStatus = EXT_STATUS_OK;
++      qla2x00_free_ioctl_scrap_mem(ha);
++
++      DEBUG9(printk("%s(%ld): inst=%ld exiting.\n",
++          __func__, ha->host_no, ha->instance);)
++
++      return (ret);
++}
++
++/*
++ * qla2x00_query_disc_tgt
++ *    Handles EXT_SC_QUERY_DISC_TGT subcommand.
++ *
++ * Input:
++ *    ha = adapter state pointer.
++ *    pext = EXT_IOCTL structure pointer.
++ *    mode = not used.
++ *
++ * Returns:
++ *    0 = success
++ *    others = errno value
++ *
++ * Context:
++ *    Kernel context.
++ */
++static int
++qla2x00_query_disc_tgt(scsi_qla_host_t *ha, EXT_IOCTL *pext, int mode)
++{
++      int             ret = 0;
++      uint32_t        tgt, transfer_size, inst;
++      uint32_t        cnt, i;
++      fc_port_t       *tgt_fcport;
++      os_tgt_t        *tq;
++      EXT_DISC_TARGET *ptmp_disc_target;
++
++      DEBUG9(printk("%s(%ld): inst=%ld entered.\n",
++          __func__, ha->host_no, ha->instance);)
++
++      tq = NULL;
++      for (tgt = 0, inst = 0; tgt < MAX_TARGETS; tgt++) {
++              if (ha->otgt[tgt] == NULL) {
++                      continue;
++              }
++              /* if wrong target id then skip to next entry */
++              if (inst != pext->Instance) {
++                      inst++;
++                      continue;
++              }
++              tq = ha->otgt[tgt];
++              break;
++      }
++
++      if (tq == NULL || tgt == MAX_TARGETS) {
++              pext->Status = EXT_STATUS_DEV_NOT_FOUND;
++              DEBUG9_10(printk("%s(%ld): inst=%ld target dev not found. "
++                  "tq=%p, tgt=%d.\n",
++                  __func__, ha->host_no, ha->instance, tq, tgt);)
++              return (ret);
++      }
++
++      if (tq->vis_port == NULL) {     /* dg 08/14/01 */
++              pext->Status = EXT_STATUS_BUSY;
++              DEBUG9_10(printk("%s(%ld): inst=%ld target dev not found. "
++                  "tq=%p.\n",
++                  __func__, ha->host_no, ha->instance, tq);)
++              return (ret);
++      }
++
++      if (qla2x00_get_ioctl_scrap_mem(ha, (void **)&ptmp_disc_target,
++          sizeof(EXT_DISC_TARGET))) {
++              /* not enough memory */
++              pext->Status = EXT_STATUS_NO_MEMORY;
++              DEBUG9_10(printk("%s(%ld): inst=%ld scrap not big enough. "
++                  "size requested=%d.\n",
++                  __func__, ha->host_no, ha->instance,
++                  sizeof(EXT_DISC_TARGET));)
++              return (ret);
++      }
++
++      tgt_fcport = tq->vis_port;
++      memcpy(ptmp_disc_target->WWNN, tgt_fcport->node_name, WWN_SIZE);
++      memcpy(ptmp_disc_target->WWPN, tgt_fcport->port_name, WWN_SIZE);
++
++      ptmp_disc_target->Id[0] = 0;
++      ptmp_disc_target->Id[1] = tgt_fcport->d_id.r.d_id[2];
++      ptmp_disc_target->Id[2] = tgt_fcport->d_id.r.d_id[1];
++      ptmp_disc_target->Id[3] = tgt_fcport->d_id.r.d_id[0];
++
++      /* All devices on ha->otgt list are target capable devices. */
++      ptmp_disc_target->Type = EXT_DEF_TARGET_DEV;
++
++      if (tgt_fcport->flags & FC_FABRIC_DEVICE) {
++              ptmp_disc_target->Type |= EXT_DEF_FABRIC_DEV;
++      }
++      if (tgt_fcport->flags & FC_TAPE_DEVICE) {
++              ptmp_disc_target->Type |= EXT_DEF_TAPE_DEV;
++      }
++      if (tgt_fcport->flags & FC_INITIATOR_DEVICE) {
++              ptmp_disc_target->Type |= EXT_DEF_INITIATOR_DEV;
++      }
++
++      ptmp_disc_target->LoopID   = tgt_fcport->loop_id;
++      ptmp_disc_target->Status   = 0;
++      ptmp_disc_target->Bus      = 0;
++      ptmp_disc_target->TargetId = tgt;
++
++      cnt = 0;
++      /* enumerate available LUNs under this TGT (if any) */
++      if (ha->otgt[tgt] != NULL) {
++              for (i = 0; i < MAX_LUNS ; i++) {
++                      if ((ha->otgt[tgt])->olun[i] !=0)
++                              cnt++;
++              }
++      }
++
++      ptmp_disc_target->LunCount = cnt;
++
++      ret = verify_area(VERIFY_WRITE, (void *)pext->ResponseAdr,
++          sizeof(EXT_DISC_TARGET));
++      if (ret) {
++              pext->Status = EXT_STATUS_COPY_ERR;
++              DEBUG9_10(printk("%s(%ld): inst=%ld ERROR verify wrt rsp buf\n",
++                  __func__, ha->host_no, ha->instance);)
++              qla2x00_free_ioctl_scrap_mem(ha);
++              return (ret);
++      }
++
++      /* now copy up the DISC_PORT to user */
++      if (pext->ResponseLen < sizeof(EXT_DISC_PORT))
++              transfer_size = pext->ResponseLen;
++      else
++              transfer_size = sizeof(EXT_DISC_TARGET);
++
++      ret = copy_to_user((uint8_t *)pext->ResponseAdr,
++          (uint8_t *)ptmp_disc_target, transfer_size);
++      if (ret) {
++              pext->Status = EXT_STATUS_COPY_ERR;
++              DEBUG9_10(printk("%s(%ld): inst=%ld ERROR copy rsp buffer.\n",
++                  __func__, ha->host_no, ha->instance);)
++              qla2x00_free_ioctl_scrap_mem(ha);
++              return (ret);
++      }
++
++      pext->Status       = EXT_STATUS_OK;
++      pext->DetailStatus = EXT_STATUS_OK;
++      qla2x00_free_ioctl_scrap_mem(ha);
++
++      DEBUG9(printk("%s(%ld): inst=%ld exiting.\n",
++          __func__, ha->host_no, ha->instance);)
++
++      return (ret);
++}
++
++/*
++ * qla2x00_query_chip
++ *    Handles EXT_SC_QUERY_CHIP subcommand.
++ *
++ * Input:
++ *    ha = adapter state pointer.
++ *    pext = EXT_IOCTL structure pointer.
++ *    mode = not used.
++ *
++ * Returns:
++ *    0 = success
++ *    others = errno value
++ *
++ * Context:
++ *    Kernel context.
++ */
++static int
++qla2x00_query_chip(scsi_qla_host_t *ha, EXT_IOCTL *pext, int mode)
++{
++      int             ret = 0;
++      uint32_t        transfer_size, i;
++      EXT_CHIP                *ptmp_isp;
++      struct Scsi_Host        *host;
++
++      DEBUG9(printk("%s(%ld): inst=%ld entered.\n",
++          __func__, ha->host_no, ha->instance);)
++
++      if (qla2x00_get_ioctl_scrap_mem(ha, (void **)&ptmp_isp,
++          sizeof(EXT_CHIP))) {
++              /* not enough memory */
++              pext->Status = EXT_STATUS_NO_MEMORY;
++              DEBUG9_10(printk("%s(%ld): inst=%ld scrap not big enough. "
++                  "size requested=%d.\n",
++                  __func__, ha->host_no, ha->instance,
++                  sizeof(EXT_CHIP));)
++              return (ret);
++      }
++
++      host = ha->host;
++      ptmp_isp->VendorId       = ha->pdev->vendor;
++      ptmp_isp->DeviceId       = ha->pdev->device;
++      ptmp_isp->SubVendorId    = ha->pdev->subsystem_vendor;
++      ptmp_isp->SubSystemId    = ha->pdev->subsystem_device;
++      ptmp_isp->PciBusNumber   = ha->pdev->bus->number;
++      ptmp_isp->PciDevFunc     = ha->pdev->devfn;
++      ptmp_isp->PciSlotNumber  = PCI_SLOT(ha->pdev->devfn);
++      ptmp_isp->IoAddr         = host->io_port;
++      ptmp_isp->IoAddrLen      = 512;
++      ptmp_isp->MemAddr        = 0; /* ? */
++      ptmp_isp->MemAddrLen     = 0; /* ? */
++      ptmp_isp->ChipType       = 0; /* ? */
++      ptmp_isp->InterruptLevel = host->irq;
++
++      for (i = 0; i < 8; i++)
++              ptmp_isp->OutMbx[i] = 0;
++
++      ret = verify_area(VERIFY_WRITE, (void *)pext->ResponseAdr,
++          sizeof(EXT_CHIP));
++      if (ret) {
++              pext->Status = EXT_STATUS_COPY_ERR;
++              DEBUG9_10(printk("%s(%ld): inst=%ld ERROR verify wrt rsp buf\n",
++                  __func__, ha->host_no, ha->instance);)
++              qla2x00_free_ioctl_scrap_mem(ha);
++              return (ret);
++      }
++
++      /* now copy up the ISP to user */
++      if (pext->ResponseLen < sizeof(EXT_CHIP))
++              transfer_size = pext->ResponseLen;
++      else
++              transfer_size = sizeof(EXT_CHIP);
++
++      ret = copy_to_user((uint8_t *)pext->ResponseAdr, (uint8_t *)ptmp_isp,
++          transfer_size);
++      if (ret) {
++              pext->Status = EXT_STATUS_COPY_ERR;
++              DEBUG9_10(printk("%s(%ld): inst=%ld ERROR copy rsp buffer.\n",
++                  __func__, ha->host_no, ha->instance);)
++              qla2x00_free_ioctl_scrap_mem(ha);
++              return (ret);
++      }
++
++      pext->Status       = EXT_STATUS_OK;
++      pext->DetailStatus = EXT_STATUS_OK;
++      qla2x00_free_ioctl_scrap_mem(ha);
++
++      DEBUG9(printk("%s(%ld): inst=%ld exiting.\n",
++          __func__, ha->host_no, ha->instance);)
++
++      return (ret);
++}
++
++/*
++ * qla2x00_get_data
++ *    Handles all subcommands of the EXT_CC_GET_DATA command.
++ *
++ * Input:
++ *    ha = adapter state pointer.
++ *    pext = EXT_IOCTL structure pointer.
++ *    mode = not used.
++ *
++ * Returns:
++ *    0 = success
++ *    others = errno value
++ *
++ * Context:
++ *    Kernel context.
++ */
++static int
++qla2x00_get_data(scsi_qla_host_t *ha, EXT_IOCTL *pext, int mode)
++{
++      int     tmp_rval = 0;
++
++      switch(pext->SubCode) {
++      case EXT_SC_GET_STATISTICS:
++              tmp_rval = qla2x00_get_statistics(ha, pext, mode);
++              break;
++
++      case EXT_SC_GET_FC_STATISTICS:
++              tmp_rval = qla2x00_get_fc_statistics(ha, pext, mode);
++              break;
++
++      case EXT_SC_GET_PORT_SUMMARY:
++              tmp_rval = qla2x00_get_port_summary(ha, pext, mode);
++              break;
++
++      case EXT_SC_QUERY_DRIVER:
++              tmp_rval = qla2x00_query_driver(ha, pext, mode);
++              break;
++
++      case EXT_SC_QUERY_FW:
++              tmp_rval = qla2x00_query_fw(ha, pext, mode);
++              break;
++
++      case EXT_SC_GET_RNID:
++              tmp_rval = qla2x00_get_rnid_params(ha, pext, mode);
++              break;
++
++      default:
++              DEBUG10(printk("%s(%ld): inst=%ld unknown SubCode %d.\n",
++                  __func__, ha->host_no, ha->instance, pext->SubCode);)
++              pext->Status = EXT_STATUS_UNSUPPORTED_SUBCODE;
++              break;
++       }
++
++      return (tmp_rval);
++}
++
++/*
++ * qla2x00_get_statistics
++ *    Issues get_link_status mbx cmd and returns statistics
++ *    relavent to the specified adapter.
++ *
++ * Input:
++ *    ha = pointer to adapter struct of the specified adapter.
++ *    pext = pointer to EXT_IOCTL structure containing values from user.
++ *    mode = not used.
++ *
++ * Returns:
++ *    0 = success
++ *    others = errno value
++ *
++ * Context:
++ *    Kernel context.
++ */
++static int
++qla2x00_get_statistics(scsi_qla_host_t *ha, EXT_IOCTL *pext, int mode)
++{
++      EXT_HBA_PORT_STAT       *ptmp_stat;
++      int             ret = 0;
++      link_stat_t     stat_buf;
++      uint8_t         rval;
++      uint8_t         *usr_temp, *kernel_tmp;
++      uint16_t        mb_stat[1];
++      uint32_t        transfer_size;
++
++
++      DEBUG9(printk("%s(%ld): inst=%ld entered.\n",
++          __func__, ha->host_no, ha->instance);)
++
++      ret = verify_area(VERIFY_WRITE, (void *)pext->ResponseAdr,
++          sizeof(EXT_HBA_PORT_STAT));
++      if (ret) {
++              pext->Status = EXT_STATUS_COPY_ERR;
++              DEBUG9_10(printk("%s(%ld): inst=%ld ERROR VERIFY_WRITE "
++                  "EXT_HBA_PORT_STAT.\n",
++                  __func__, ha->host_no, ha->instance);)
++              return (ret);
++      }
++
++      /* check on loop down */
++      if (ha->loop_state != LOOP_READY || 
++          test_bit(CFG_ACTIVE, &ha->cfg_flags) ||
++          (test_bit(ABORT_ISP_ACTIVE, &ha->dpc_flags)) ||
++          ABORTS_ACTIVE || ha->dpc_active) {
++
++              pext->Status = EXT_STATUS_BUSY;
++              DEBUG9_10(printk("%s(%ld): inst=%ld loop not ready.\n",
++                  __func__, ha->host_no, ha->instance);)
++
++              return (ret);
++      }
++
++      /* Send mailbox cmd to get more. */
++      if ((rval = qla2x00_get_link_status(ha, ha->loop_id, &stat_buf,
++          mb_stat)) != QL_STATUS_SUCCESS) {
++
++              if (rval == BIT_0) {
++                      pext->Status = EXT_STATUS_NO_MEMORY;
++              } else if (rval == BIT_1) {
++                      pext->Status = EXT_STATUS_MAILBOX;
++                      pext->DetailStatus = EXT_DSTATUS_NOADNL_INFO;
++              } else {
++                      pext->Status = EXT_STATUS_ERR;
++              }
++
++              DEBUG9_10(printk("%s(%ld): inst=%ld ERROR mailbox failed. "
++                  "mb[0]=%x.\n",
++                  __func__, ha->host_no, ha->instance, mb_stat[0]);)
++              printk(KERN_WARNING
++                   "%s(%ld): inst=%ld ERROR mailbox failed. mb[0]=%x.\n",
++                  __func__, ha->host_no, ha->instance, mb_stat[0]);
++
++              return (ret);
++      }
++
++      if (qla2x00_get_ioctl_scrap_mem(ha, (void **)&ptmp_stat,
++          sizeof(EXT_HBA_PORT_STAT))) {
++              /* not enough memory */
++              pext->Status = EXT_STATUS_NO_MEMORY;
++              DEBUG9_10(printk("%s(%ld): inst=%ld scrap not big enough. "
++                  "size requested=%d.\n",
++                  __func__, ha->host_no, ha->instance,
++                  sizeof(EXT_HBA_PORT_STAT));)
++              return (ret);
++      }
++
++      ptmp_stat->ControllerErrorCount   =  ha->total_isp_aborts;
++      ptmp_stat->DeviceErrorCount       =  ha->total_dev_errs;
++      ptmp_stat->TotalIoCount           =  ha->total_ios;
++      ptmp_stat->TotalMBytes            =  ha->total_bytes >> 20;
++      ptmp_stat->TotalLipResets         =  ha->total_lip_cnt;
++      /*
++         ptmp_stat->TotalInterrupts        =  ha->total_isr_cnt;
++       */
++
++      ptmp_stat->TotalLinkFailures               = stat_buf.link_fail_cnt;
++      ptmp_stat->TotalLossOfSync                 = stat_buf.loss_sync_cnt;
++      ptmp_stat->TotalLossOfSignals              = stat_buf.loss_sig_cnt;
++      ptmp_stat->PrimitiveSeqProtocolErrorCount  = stat_buf.prim_seq_err_cnt;
++      ptmp_stat->InvalidTransmissionWordCount    = stat_buf.inval_xmit_word_cnt;
++      ptmp_stat->InvalidCRCCount                 = stat_buf.inval_crc_cnt;
++
++      /* now copy up the STATISTICS to user */
++      if (pext->ResponseLen < sizeof(EXT_HBA_PORT_STAT))
++              transfer_size = pext->ResponseLen;
++      else
++              transfer_size = sizeof(EXT_HBA_PORT_STAT);
++
++      usr_temp   = (uint8_t *)pext->ResponseAdr;
++      kernel_tmp = (uint8_t *)ptmp_stat;
++      ret = copy_to_user(usr_temp, kernel_tmp, transfer_size);
++      if (ret) {
++              pext->Status = EXT_STATUS_COPY_ERR;
++              DEBUG9_10(printk("%s(%ld): inst=%ld ERROR copy rsp buffer.\n",
++                  __func__, ha->host_no, ha->instance);)
++              qla2x00_free_ioctl_scrap_mem(ha);
++              return (ret);
++      }
++
++      pext->Status       = EXT_STATUS_OK;
++      pext->DetailStatus = EXT_STATUS_OK;
++      qla2x00_free_ioctl_scrap_mem(ha);
++
++      DEBUG9(printk("%s(%ld): inst=%ld exiting.\n",
++          __func__, ha->host_no, ha->instance);)
++
++      return (ret);
++}
++
++/*
++ * qla2x00_get_fc_statistics
++ *    Issues get_link_status mbx cmd to the target device with
++ *    the specified WWN and returns statistics relavent to the
++ *    device.
++ *
++ * Input:
++ *    ha = pointer to adapter struct of the specified device.
++ *    pext = pointer to EXT_IOCTL structure containing values from user.
++ *    mode = not used.
++ *
++ * Returns:
++ *    0 = success
++ *    others = errno value
++ *
++ * Context:
++ *    Kernel context.
++ */
++static int
++qla2x00_get_fc_statistics(scsi_qla_host_t *ha, EXT_IOCTL *pext, int mode)
++{
++      EXT_HBA_PORT_STAT       *ptmp_stat;
++      EXT_DEST_ADDR           addr_struct;
++      int             ret = 0;
++      link_stat_t     stat_buf;
++      uint8_t         rval, tgt;
++      uint8_t         *usr_temp, *kernel_tmp;
++      uint8_t         *req_name;
++      uint16_t        mb_stat[1];
++      uint32_t        transfer_size;
++
++
++      DEBUG9(printk("%s(%ld): inst=%ld entered.\n",
++          __func__, ha->host_no, ha->instance);)
++
++      ret = verify_area(VERIFY_WRITE, (void *)pext->ResponseAdr,
++          sizeof(EXT_HBA_PORT_STAT));
++      if (ret) {
++              pext->Status = EXT_STATUS_COPY_ERR;
++              DEBUG9_10(printk("%s(%ld): inst=%ld ERROR VERIFY_WRITE.\n",
++                  __func__, ha->host_no, ha->instance);)
++              return (ret);
++      }
++
++      ret = copy_from_user(&addr_struct, pext->RequestAdr, pext->RequestLen);
++      if (ret) {
++              pext->Status = EXT_STATUS_COPY_ERR;
++              DEBUG9_10(printk("%s(%ld): inst=%ld ERROR copy req buf.\n",
++                  __func__, ha->host_no, ha->instance);)
++              return (ret);
++      }
++
++      /* find the device's loop_id */
++      switch (addr_struct.DestType) {
++      case EXT_DEF_DESTTYPE_WWPN:
++              req_name = addr_struct.DestAddr.WWPN;
++              for (tgt = 0; tgt < MAX_FIBRE_DEVICES; tgt++) {
++                      if (memcmp(ha->fc_db[tgt].wwn, req_name,
++                          EXT_DEF_WWN_NAME_SIZE) == 0) {
++                              break;
++                      }
++              }
++              break;
++
++      case EXT_DEF_DESTTYPE_WWNN:
++      case EXT_DEF_DESTTYPE_PORTID:
++      case EXT_DEF_DESTTYPE_FABRIC:
++      case EXT_DEF_DESTTYPE_SCSI:
++      default:
++              pext->Status = EXT_STATUS_INVALID_PARAM;
++              pext->DetailStatus = EXT_DSTATUS_NOADNL_INFO;
++              DEBUG9_10(printk("%s(%ld): inst=%ld ERROR Unsupported subcode "
++                  "address type.\n", __func__, ha->host_no, ha->instance);)
++              return (ret);
++
++              break;
++      }
++
++      if (tgt == MAX_FIBRE_DEVICES) {
++              /* not found */
++              pext->Status = EXT_STATUS_DEV_NOT_FOUND;
++              pext->DetailStatus = EXT_DSTATUS_TARGET;
++              return (ret);
++      }
++
++      /* check for suspended/lost device */
++      /*
++         if (ha->fcport is suspended/lost) {
++         pext->Status = EXT_STATUS_SUSPENDED;
++         pext->DetailStatus = EXT_DSTATUS_TARGET;
++         return pext->Status;
++         }
++       */
++
++      /* check on loop down */
++      if (ha->loop_state != LOOP_READY ||
++          test_bit(CFG_ACTIVE, &ha->cfg_flags) ||
++          (test_bit(ABORT_ISP_ACTIVE, &ha->dpc_flags)) ||
++          ABORTS_ACTIVE || ha->dpc_active) {
++
++              pext->Status = EXT_STATUS_BUSY;
++              DEBUG9_10(printk("%s(%ld): inst=%ld loop not ready.\n",
++                   __func__, ha->host_no, ha->instance);)
++              return (ret);
++      }
++
++      /* Send mailbox cmd to get more. */
++      if ((rval = qla2x00_get_link_status(ha, ha->fc_db[tgt].loop_id,
++          &stat_buf, mb_stat)) != QL_STATUS_SUCCESS) {
++              if (rval == BIT_0) {
++                      pext->Status = EXT_STATUS_NO_MEMORY;
++              } else if (rval == BIT_1) {
++                      pext->Status = EXT_STATUS_MAILBOX;
++                      pext->DetailStatus = EXT_DSTATUS_NOADNL_INFO;
++              } else {
++                      pext->Status = EXT_STATUS_ERR;
++              }
++
++              DEBUG9_10(printk("%s(%ld): inst=%ld ERROR mailbox failed. "
++                  "mb[0]=%x.\n",
++                  __func__, ha->host_no, ha->instance, mb_stat[0]);)
++              return (ret);
++      }
++
++      if (qla2x00_get_ioctl_scrap_mem(ha, (void **)&ptmp_stat,
++          sizeof(EXT_HBA_PORT_STAT))) {
++              /* not enough memory */
++              pext->Status = EXT_STATUS_NO_MEMORY;
++              DEBUG9_10(printk("%s(%ld): inst=%ld scrap not big enough. "
++                  "size requested=%d.\n",
++                  __func__, ha->host_no, ha->instance,
++                  sizeof(EXT_HBA_PORT_STAT));)
++              return (ret);
++      }
++
++      ptmp_stat->ControllerErrorCount   =  ha->total_isp_aborts;
++      ptmp_stat->DeviceErrorCount       =  ha->total_dev_errs;
++      ptmp_stat->TotalIoCount           =  ha->total_ios;
++      ptmp_stat->TotalMBytes            =  ha->total_bytes >> 20;
++      ptmp_stat->TotalLipResets         =  ha->total_lip_cnt;
++      /*
++         ptmp_stat->TotalInterrupts        =  ha->total_isr_cnt;
++       */
++
++      ptmp_stat->TotalLinkFailures               = stat_buf.link_fail_cnt;
++      ptmp_stat->TotalLossOfSync                 = stat_buf.loss_sync_cnt;
++      ptmp_stat->TotalLossOfSignals              = stat_buf.loss_sig_cnt;
++      ptmp_stat->PrimitiveSeqProtocolErrorCount  = stat_buf.prim_seq_err_cnt;
++      ptmp_stat->InvalidTransmissionWordCount    = stat_buf.inval_xmit_word_cnt;
++      ptmp_stat->InvalidCRCCount                 = stat_buf.inval_crc_cnt;
++
++      /* now copy up the STATISTICS to user */
++      if (pext->ResponseLen < sizeof(EXT_HBA_PORT_STAT))
++              transfer_size = pext->ResponseLen;
++      else
++              transfer_size = sizeof(EXT_HBA_PORT_STAT);
++
++      usr_temp   = (uint8_t *)pext->ResponseAdr;
++      kernel_tmp = (uint8_t *)ptmp_stat;
++      ret = copy_to_user(usr_temp, kernel_tmp, transfer_size);
++      if (ret) {
++              pext->Status = EXT_STATUS_COPY_ERR;
++              DEBUG9_10(printk("%s(%ld): inst=%ld ERROR copy rsp buffer.\n",
++                  __func__, ha->host_no, ha->instance);)
++              qla2x00_free_ioctl_scrap_mem(ha);
++              return (ret);
++      }
++
++      pext->Status       = EXT_STATUS_OK;
++      pext->DetailStatus = EXT_STATUS_OK;
++      qla2x00_free_ioctl_scrap_mem(ha);
++
++      DEBUG9(printk("%s(%ld): inst=%ld exiting.\n",
++          __func__, ha->host_no, ha->instance);)
++
++      return (ret);
++}
++
++/*
++ * qla2x00_get_port_summary
++ *    Handles EXT_SC_GET_PORT_SUMMARY subcommand.
++ *    Returns values of devicedata and dd_entry list.
++ *
++ * Input:
++ *    ha = adapter state pointer.
++ *    pext = EXT_IOCTL structure pointer.
++ *    mode = not used.
++ *
++ * Returns:
++ *    0 = success
++ *    others = errno value
++ *
++ * Context:
++ *    Kernel context.
++ */
++static int
++qla2x00_get_port_summary(scsi_qla_host_t *ha, EXT_IOCTL *pext, int mode)
++{
++      int             ret = 0;
++      uint8_t         *usr_temp, *kernel_tmp;
++      uint32_t        b;
++      uint32_t        i, port_cnt, entry;
++      uint32_t        number_of_entries = 0;
++      uint32_t        tgt_cnt, transfer_size;
++      struct list_head        *fcpl;
++      fc_port_t       *fcport;
++      uint32_t        current_offset;
++      void            *start_of_entry_list;
++
++      EXT_DEVICEDATA          *pdevicedata;
++      EXT_DEVICEDATAENTRY     *pdd_entry;
++
++      DEBUG9(printk("%s(%ld): inst=%ld entered.\n",
++          __func__, ha->host_no, ha->instance);)
++
++      port_cnt = 0;
++      tgt_cnt  = 0;
++
++      if (qla2x00_get_ioctl_scrap_mem(ha, (void **)&pdevicedata,
++          sizeof(EXT_DEVICEDATA))) {
++              /* not enough memory */
++              pext->Status = EXT_STATUS_NO_MEMORY;
++              DEBUG9_10(printk("%s(%ld): inst=%ld scrap not big enough. "
++                  "pdevicedata requested=%d.\n",
++                  __func__, ha->host_no, ha->instance,
++                  sizeof(EXT_DEVICEDATA));)
++              return (ret);
++      }
++
++      if (qla2x00_get_ioctl_scrap_mem(ha, (void **)&pdd_entry,
++          sizeof(EXT_DEVICEDATAENTRY))) {
++              /* not enough memory */
++              pext->Status = EXT_STATUS_NO_MEMORY;
++              DEBUG9_10(printk("%s(%ld): inst=%ld scrap not big enough. "
++                  "pdd_entry requested=%d.\n",
++                  __func__, ha->host_no, ha->instance,
++                  sizeof(EXT_DEVICEDATAENTRY));)
++              qla2x00_free_ioctl_scrap_mem(ha);
++              return (ret);
++      }
++
++      list_for_each(fcpl, &ha->fcports) {
++              fcport = list_entry(fcpl, fc_port_t, list);
++
++              port_cnt++;
++      }
++      pdevicedata->TotalDevices = port_cnt;
++
++      number_of_entries = pext->ResponseLen / sizeof(EXT_DEVICEDATAENTRY);
++
++      /* we want the lesser of port_cnt and number_of_entries */
++      if (number_of_entries > port_cnt)
++              number_of_entries = port_cnt;
++      pdevicedata->ReturnListEntryCount  = number_of_entries;
++
++      DEBUG9(printk("%s(%ld): inst=%ld EXT_SC_GET_PORT_SUMMARY port_cnt=%x, "
++          "return entry cnt=%x.\n",
++          __func__, ha->host_no, ha->instance, port_cnt,
++          number_of_entries);)
++
++      transfer_size = sizeof(pdevicedata->ReturnListEntryCount) +
++          sizeof(pdevicedata->TotalDevices);
++
++      /* copy top of devicedata here */
++      ret = verify_area(VERIFY_WRITE, (void *)(pext->ResponseAdr),
++          transfer_size);
++      if (ret) {
++              pext->Status = EXT_STATUS_COPY_ERR;
++              DEBUG9_10(printk("%s(%ld): inst=%ld ERROR verify wrt rsp buf\n",
++                  __func__, ha->host_no, ha->instance);)
++              qla2x00_free_ioctl_scrap_mem(ha);
++              return (ret);
++      }
++
++      usr_temp   = (uint8_t *)pext->ResponseAdr;
++      kernel_tmp = (uint8_t *)pdevicedata;
++      ret = copy_to_user(usr_temp, kernel_tmp, transfer_size);
++      if (ret) {
++              pext->Status = EXT_STATUS_COPY_ERR;
++              DEBUG9_10(printk("%s(%ld): inst=%ld ERROR copy rsp "
++                  "devicedata buffer.\n",
++                  __func__, ha->host_no, ha->instance);)
++              qla2x00_free_ioctl_scrap_mem(ha);
++              return (ret);
++      }
++
++      start_of_entry_list = (void *)(pext->ResponseAdr) + transfer_size;
++
++      entry = 0;
++      list_for_each(fcpl, &ha->fcports) {
++              fcport = list_entry(fcpl, fc_port_t, list);
++ 
++              if (entry >= number_of_entries)
++                      break;
++ 
++              /* copy from fc_db of this target (port) to dd_entry */
++
++              memcpy(pdd_entry->NodeWWN, fcport->node_name, WWN_SIZE);
++              memcpy(pdd_entry->PortWWN, fcport->port_name, WWN_SIZE);
++
++              for (b = 0; b < 3 ; b++)
++                      pdd_entry->PortID[b] = fcport->d_id.r.d_id[2-b];
++
++              if (fcport->flags & FC_FABRIC_DEVICE) {
++                      pdd_entry->ControlFlags = EXT_DEF_GET_FABRIC_DEVICE;
++              } else {
++                      pdd_entry->ControlFlags = 0;
++              }
++
++              pdd_entry->TargetAddress.Bus    = 0;
++              /* Retrieve 'Target' number for port via fc_db */
++              for (i = 0; i < MAX_TARGETS; i++) {
++                      if (ha->fc_db[i].loop_id == PORT_UNUSED)
++                              continue;
++
++                      if (memcmp(fcport->port_name, ha->fc_db[i].wwn,
++                          EXT_DEF_WWN_NAME_SIZE) == 0) {
++                              pdd_entry->TargetAddress.Target = i;
++                              break;
++                      }
++              }
++              pdd_entry->TargetAddress.Lun    = 0;
++              pdd_entry->DeviceFlags          = 0;
++              pdd_entry->LoopID               = fcport->loop_id;
++              pdd_entry->BaseLunNumber        = 0;
++
++              current_offset = entry * sizeof(EXT_DEVICEDATAENTRY);
++
++              transfer_size = sizeof(EXT_DEVICEDATAENTRY);
++              ret = verify_area(VERIFY_WRITE,
++                  (void *)(start_of_entry_list + current_offset),
++                  transfer_size);
++
++              if (ret) {
++                      pext->Status = EXT_STATUS_COPY_ERR;
++                      DEBUG10(printk("%s(%ld): inst=%ld ERROR verify WRITE "
++                          "rsp bufaddr=%p\n",
++                          __func__, ha->host_no, ha->instance,
++                          (void *)(start_of_entry_list + current_offset));)
++                      qla2x00_free_ioctl_scrap_mem(ha);
++                      return pext->Status;
++              }
++
++              /* now copy up this dd_entry to user */
++              usr_temp = (uint8_t *)((u_long) start_of_entry_list +
++                  current_offset);
++              kernel_tmp = (uint8_t *)pdd_entry;
++              ret = copy_to_user(usr_temp, kernel_tmp, transfer_size);
++              if (ret) {
++                      pext->Status = EXT_STATUS_COPY_ERR;
++                      DEBUG9_10(printk("%s(%ld): inst=%ld ERROR copy rsp "
++                          "entry list buffer.\n",
++                          __func__, ha->host_no, ha->instance);)
++                      qla2x00_free_ioctl_scrap_mem(ha);
++                      return (ret);
++              }
++
++              entry++;
++      } /* for number_of_entries */
++
++      pext->Status       = EXT_STATUS_OK;
++      pext->DetailStatus = EXT_STATUS_OK;
++      qla2x00_free_ioctl_scrap_mem(ha);
++
++      DEBUG9(printk("%s(%ld): inst=%ld exiting.\n",
++          __func__, ha->host_no, ha->instance);)
++
++      return (ret);
++}
++
++/*
++ * qla2x00_query_driver
++ *    Handles EXT_SC_QUERY_DRIVER subcommand.
++ *
++ * Input:
++ *    ha = adapter state pointer.
++ *    pext = EXT_IOCTL structure pointer.
++ *    mode = not used.
++ *
++ * Returns:
++ *    0 = success
++ *    others = errno value
++ *
++ * Context:
++ *    Kernel context.
++ */
++static int
++qla2x00_query_driver(scsi_qla_host_t *ha, EXT_IOCTL *pext, int mode)
++{
++      int             ret = 0;
++      uint8_t         *usr_temp, *kernel_tmp;
++      uint32_t        transfer_size;
++      EXT_DRIVER      *pdriver_prop;
++
++      DEBUG9(printk("%s(%ld): inst=%ld entered.\n",
++          __func__, ha->host_no, ha->instance);)
++
++      if (qla2x00_get_ioctl_scrap_mem(ha, (void **)&pdriver_prop,
++          sizeof(EXT_DRIVER))) {
++              /* not enough memory */
++              pext->Status = EXT_STATUS_NO_MEMORY;
++              DEBUG9_10(printk("%s(%ld): inst=%ld scrap not big enough. "
++                  "size requested=%d.\n",
++                  __func__, ha->host_no, ha->instance,
++                  sizeof(EXT_DRIVER));)
++              return (ret);
++      }
++
++      sprintf(pdriver_prop->Version, qla2x00_version_str);
++      pdriver_prop->NumOfBus = MAX_BUSES;
++      pdriver_prop->TargetsPerBus = MAX_FIBRE_DEVICES;
++      pdriver_prop->LunsPerTarget = MAX_LUNS;
++      pdriver_prop->MaxTransferLen  = 0xffffffff;
++      pdriver_prop->MaxDataSegments = 0xffffffff;
++
++      if (ha->flags.enable_64bit_addressing == 1)
++              pdriver_prop->DmaBitAddresses = 64;
++      else
++              pdriver_prop->DmaBitAddresses = 32;
++
++      if (pext->ResponseLen < sizeof(EXT_DRIVER))
++              transfer_size = pext->ResponseLen;
++      else
++              transfer_size = sizeof(EXT_DRIVER);
++
++      ret = verify_area(VERIFY_WRITE, (void *)pext->ResponseAdr ,
++          transfer_size);
++      if (ret) {
++              pext->Status = EXT_STATUS_COPY_ERR;
++              DEBUG10(printk("%s(%ld): inst=%ld ERROR verify wrt rsp buf.\n",
++                  __func__, ha->host_no, ha->instance);)
++              qla2x00_free_ioctl_scrap_mem(ha);
++              return (ret);
++      }
++
++      /* now copy up the ISP to user */
++      usr_temp   = (uint8_t *)pext->ResponseAdr;
++      kernel_tmp = (uint8_t *)pdriver_prop;
++      ret = copy_to_user(usr_temp, kernel_tmp, transfer_size);
++      if (ret) {
++              pext->Status = EXT_STATUS_COPY_ERR;
++              DEBUG9_10(printk("%s(%ld): inst=%ld ERROR copy rsp buffer.\n",
++                  __func__, ha->host_no, ha->instance);)
++              qla2x00_free_ioctl_scrap_mem(ha);
++              return (ret);
++      }
++
++      pext->Status       = EXT_STATUS_OK;
++      pext->DetailStatus = EXT_STATUS_OK;
++      qla2x00_free_ioctl_scrap_mem(ha);
++
++      DEBUG9(printk("%s(%ld): inst=%ld exiting.\n",
++          __func__, ha->host_no, ha->instance);)
++
++      return (ret);
++}
++
++/*
++ * qla2x00_query_fw
++ *    Handles EXT_SC_QUERY_FW subcommand.
++ *
++ * Input:
++ *    ha = adapter state pointer.
++ *    pext = EXT_IOCTL structure pointer.
++ *    mode = not used.
++ *
++ * Returns:
++ *    0 = success
++ *    others = errno value
++ *
++ * Context:
++ *    Kernel context.
++ */
++static int
++qla2x00_query_fw(scsi_qla_host_t *ha, EXT_IOCTL *pext, int mode)
++{
++      int             ret = 0;
++      uint8_t         *usr_temp, *kernel_tmp;
++      uint32_t        transfer_size;
++      EXT_FW          *pfw_prop;
++
++      DEBUG9(printk("%s(%ld): inst=%ld entered.\n",
++          __func__, ha->host_no, ha->instance);)
++
++      if (qla2x00_get_ioctl_scrap_mem(ha, (void **)&pfw_prop,
++          sizeof(EXT_FW))) {
++              /* not enough memory */
++              pext->Status = EXT_STATUS_NO_MEMORY;
++              DEBUG9_10(printk("%s(%ld): inst=%ld scrap not big enough. "
++                  "size requested=%d.\n",
++                  __func__, ha->host_no, ha->instance,
++                  sizeof(EXT_FW));)
++              return (ret);
++      }
++
++      pfw_prop->Version[0] = ha->fw_major_version; 
++      pfw_prop->Version[1] = ha->fw_minor_version; 
++      pfw_prop->Version[2] = ha->fw_subminor_version;
++
++      transfer_size = sizeof(EXT_FW);
++
++      ret = verify_area(VERIFY_WRITE, (void *)pext->ResponseAdr ,
++          transfer_size);
++      if (ret) {
++              pext->Status = EXT_STATUS_COPY_ERR;
++              DEBUG10(printk("%s(%ld): inst=%ld ERROR verify wrt rsp buf.\n",
++                  __func__, ha->host_no, ha->instance);)
++              qla2x00_free_ioctl_scrap_mem(ha);
++              return (ret);
++      }
++
++      usr_temp   = (uint8_t *)pext->ResponseAdr;
++      kernel_tmp = (uint8_t *)pfw_prop;
++      ret = copy_to_user(usr_temp, kernel_tmp, transfer_size);
++      if (ret) {
++              pext->Status = EXT_STATUS_COPY_ERR;
++              DEBUG9_10(printk("%s(%ld): inst=%ld ERROR copy rsp buffer.\n",
++                  __func__, ha->host_no, ha->instance);)
++              qla2x00_free_ioctl_scrap_mem(ha);
++              return (ret);
++      }
++
++      pext->Status       = EXT_STATUS_OK;
++      pext->DetailStatus = EXT_STATUS_OK;
++      qla2x00_free_ioctl_scrap_mem(ha);
++
++      DEBUG9(printk("%s(%ld): inst=%ld exiting.\n",
++          __func__, ha->host_no, ha->instance);)
++
++      return (ret);
++}
++
++#if defined(ISP2300)
++/*
++ * qla2x00_send_els_passthru
++ *    Passes the ELS command down to firmware as MSIOCB and
++ *    copies the response back when it completes.
++ *
++ * Input:
++ *    ha = adapter state pointer.
++ *    pext = EXT_IOCTL structure pointer.
++ *    mode = not used.
++ *
++ * Returns:
++ *    0 = success
++ *    others = errno value
++ *
++ * Context:
++ *    Kernel context.
++ */
++static int
++qla2x00_send_els_passthru(scsi_qla_host_t *ha, EXT_IOCTL *pext, int mode)
++{
++      int             ret = 0;
++      int             tmp_rval = 0;
++
++      uint8_t         index;
++      uint8_t         invalid_wwn = FALSE;
++      uint8_t         port_found;
++      uint8_t         *ptmp_stat;
++      uint8_t         *pusr_req_buf;
++      uint8_t         *presp_payload;
++      uint32_t        payload_len;
++      uint32_t        usr_req_len;
++
++      fcdev_t         tmpdev;
++
++      fc_lun_t        *ptemp_fclun;   /* buf from scrap mem */
++      fc_port_t       *ptemp_fcport;  /* buf from scrap mem */
++
++      struct list_head *fcpl;
++      fc_port_t       *fcport;
++
++      os_lun_t        *plq;
++      os_tgt_t        *ptq;
++
++      Scsi_Cmnd       *pscsi_cmd;
++
++      srb_t           *sp = NULL;
++      EXT_ELS_PT_REQ  *pels_pt_req;
++
++      struct list_head *fcil;
++      fc_initiator_t  *fcinitiator;
++
++
++      DEBUG9(printk("%s(%ld): inst=%ld entered.\n",
++          __func__, ha->host_no, ha->instance);)
++
++      /* check on current topology */
++      if ((ha->current_topology != ISP_CFG_F) &&
++          (ha->current_topology != ISP_CFG_FL)) {
++              pext->Status = EXT_STATUS_DEV_NOT_FOUND;
++              DEBUG9_10(printk("%s(%ld): inst=%ld ERROR not in F or FL mode\n",
++                  __func__, ha->host_no, ha->instance);)
++              return (ret);
++      }
++
++      if (ha->ioctl_mem_size <= 0) {
++              if (qla2x00_get_new_ioctl_dma_mem(ha,
++                  QLA_INITIAL_IOCTLMEM_SIZE) != QL_STATUS_SUCCESS) {
++
++                      DEBUG9_10(printk("%s: ERROR cannot alloc DMA "
++                          "buffer size=%lx.\n",
++                          __func__, QLA_INITIAL_IOCTLMEM_SIZE);)
++
++                      pext->Status = EXT_STATUS_NO_MEMORY;
++                      return (ret);
++              }
++      }
++
++      if (pext->ResponseLen > ha->ioctl_mem_size) {
++              if (qla2x00_get_new_ioctl_dma_mem(ha, pext->ResponseLen) !=
++                  QL_STATUS_SUCCESS) {
++
++                      DEBUG9_10(printk("%s: ERROR cannot alloc requested"
++                          "DMA buffer size %x.\n",
++                          __func__, pext->ResponseLen);)
++
++                      pext->Status = EXT_STATUS_NO_MEMORY;
++                      return (ret);
++              }
++
++              DEBUG9(printk("%s(%ld): inst=%ld rsp buf length larger than "
++                  "existing size. Additional mem alloc successful.\n",
++                  __func__, ha->host_no, ha->instance);)
++      }
++
++      usr_req_len = pext->RequestLen - sizeof(EXT_ELS_PT_REQ);
++      if (usr_req_len > ha->ioctl_mem_size) {
++              pext->Status = EXT_STATUS_INVALID_PARAM;
++
++              DEBUG9_10(printk("%s(%ld): inst=%ld ERROR ReqLen too big=%x.\n",
++                  __func__, ha->host_no, ha->instance, pext->RequestLen);)
++
++              return (ret);
++      }
++
++      /* Verify entire EXT IOCTL request buffer */
++      
++      ret = verify_area(VERIFY_READ, (void *)pext->RequestAdr,
++          pext->RequestLen);
++      if (ret) {
++              pext->Status = EXT_STATUS_COPY_ERR;
++              DEBUG9_10(printk(
++                  "%s(%ld): inst=%ld ERROR verify read req buf\n",
++                  __func__, ha->host_no, ha->instance);)
++
++              return (ret);
++      }
++
++      DEBUG9(printk("%s(%ld): inst=%ld req buf verified.\n",
++          __func__, ha->host_no, ha->instance);)
++
++      if (qla2x00_get_ioctl_scrap_mem(ha, (void **)&pscsi_cmd,
++          sizeof(Scsi_Cmnd))) {
++              /* not enough memory */
++              pext->Status = EXT_STATUS_NO_MEMORY;
++              DEBUG9_10(printk("%s(%ld): inst=%ld scrap not big enough. "
++                  "size requested=%d.\n",
++                  __func__, ha->host_no, ha->instance,
++                  sizeof(Scsi_Cmnd));)
++              return (ret);
++      }
++      if (qla2x00_get_ioctl_scrap_mem(ha, (void **)&pels_pt_req,
++          sizeof(EXT_ELS_PT_REQ))) {
++              /* not enough memory */
++              pext->Status = EXT_STATUS_NO_MEMORY;
++              DEBUG9_10(printk("%s(%ld): inst=%ld scrap not big enough. "
++                  "els_pt_req size requested=%d.\n",
++                  __func__, ha->host_no, ha->instance,
++                  sizeof(EXT_ELS_PT_REQ));)
++              goto els_passthru_done;
++      }
++      if (qla2x00_get_ioctl_scrap_mem(ha, (void **)&ptemp_fclun,
++          sizeof(fc_lun_t))) {
++              /* not enough memory */
++              pext->Status = EXT_STATUS_NO_MEMORY;
++              DEBUG9_10(printk("%s(%ld): inst=%ld scrap not big enough. "
++                  "fclun size requested=%d.\n",
++                  __func__, ha->host_no, ha->instance,
++                  sizeof(fc_lun_t));)
++              goto els_passthru_done;
++      }
++      if (qla2x00_get_ioctl_scrap_mem(ha, (void **)&ptemp_fcport,
++          sizeof(fc_port_t))) {
++              /* not enough memory */
++              pext->Status = EXT_STATUS_NO_MEMORY;
++              DEBUG9_10(printk("%s(%ld): inst=%ld scrap not big enough. "
++                  "fcport size requested=%d.\n",
++                  __func__, ha->host_no, ha->instance,
++                  sizeof(fc_port_t));)
++              goto els_passthru_done;
++      }
++
++      /* initialize */
++
++      memset(ha->ioctl_mem, 0, ha->ioctl_mem_size);
++
++      /* copy request buffer */
++      
++      ret = copy_from_user(pels_pt_req, pext->RequestAdr,
++          sizeof(EXT_ELS_PT_REQ));
++      if (ret) {
++              pext->Status = EXT_STATUS_COPY_ERR;
++
++              DEBUG9_10(printk("%s(%ld): inst=%ld ERROR"
++                  "copy_from_user() of struct failed (%d).\n",
++                  __func__, ha->host_no, ha->instance, ret);)
++
++              goto els_passthru_done;
++      }
++
++      pusr_req_buf = (uint8_t *)pext->RequestAdr + sizeof(EXT_ELS_PT_REQ);
++      
++      ret = copy_from_user(ha->ioctl_mem, pusr_req_buf, usr_req_len);
++      if (ret) {
++              pext->Status = EXT_STATUS_COPY_ERR;
++
++              DEBUG9_10(printk("%s(%ld): inst=%ld ERROR"
++                  "copy_from_user() of request buf failed (%d).\n",
++                  __func__, ha->host_no, ha->instance, ret);)
++
++              goto els_passthru_done;
++      }
++
++      DEBUG9(printk("%s(%ld): inst=%ld after copy request.\n",
++          __func__, ha->host_no, ha->instance);)
++      
++      /* check on loop down (1) */
++      if (ha->loop_state != LOOP_READY || 
++          test_bit(CFG_ACTIVE, &ha->cfg_flags) ||
++          (test_bit(ABORT_ISP_ACTIVE, &ha->dpc_flags)) || ABORTS_ACTIVE) {
++
++              DEBUG9_10(printk(
++                  "%s(%ld): inst=%ld before dest port validation- loop not "
++                  "ready; cannot proceed.\n",
++                  __func__, ha->host_no, ha->instance);)
++
++              pext->Status = EXT_STATUS_BUSY;
++
++              goto els_passthru_done;
++      }
++
++      /*********************************/
++      /* Validate the destination port */
++      /*********************************/
++
++      /* first: WWN cannot be zero if no PID is specified */
++      invalid_wwn = qla2x00_is_wwn_zero(pels_pt_req->WWPN);
++      if (invalid_wwn && !(pels_pt_req->ValidMask & EXT_DEF_PID_VALID)) {
++              /* error: both are not set. */
++              pext->Status = EXT_STATUS_INVALID_PARAM;
++
++              DEBUG9_10(printk("%s(%ld): inst=%ld ERROR no valid WWPN/PID\n",
++                  __func__, ha->host_no, ha->instance);)
++
++              goto els_passthru_done;
++      }
++
++      /* second: it cannot be the local/current HBA itself */
++      if (!invalid_wwn) {
++              if (memcmp(ha->init_cb->port_name, pels_pt_req->WWPN,
++                  EXT_DEF_WWN_NAME_SIZE) == 0) {
++
++                      /* local HBA specified. */
++
++                      pext->Status = EXT_STATUS_INVALID_PARAM;
++                      DEBUG9_10(printk("%s(%ld): inst=%ld ERROR local HBA's "
++                          "WWPN found.\n",
++                          __func__, ha->host_no, ha->instance);)
++
++                      goto els_passthru_done;
++              }
++      } else { /* using PID */
++              if (pels_pt_req->Id[1] == ha->d_id.r.d_id[2]
++                  && pels_pt_req->Id[2] == ha->d_id.r.d_id[1]
++                  && pels_pt_req->Id[3] == ha->d_id.r.d_id[0]) {
++
++                      /* local HBA specified. */
++
++                      pext->Status = EXT_STATUS_INVALID_PARAM;
++                      DEBUG9_10(printk("%s(%ld): inst=%ld ERROR local HBA's "
++                          "PID found.\n",
++                          __func__, ha->host_no, ha->instance);)
++
++                      goto els_passthru_done;
++              }
++      }
++
++      /************************/
++      /* Now find the loop ID */
++      /************************/
++
++      /* 1st: scan thru our HBA database */
++      index = 0;
++      port_found = FALSE;
++      fcinitiator = NULL;
++      if (!invalid_wwn) {
++              /* search with WWPN */
++              list_for_each(fcil, &ha->fcinitiators) {
++                      fcinitiator = list_entry(fcil, fc_initiator_t, list);
++
++                      if (memcmp(pels_pt_req->WWPN, fcinitiator->port_name,
++                               EXT_DEF_WWN_NAME_SIZE) == 0) {
++
++                              port_found = TRUE;
++                              pels_pt_req->Lid = fcinitiator->loop_id;
++
++                              DEBUG9(printk("%s(%ld): inst=%ld found host "
++                                  "w/ WWN. loop_id = %02x.\n",
++                                  __func__, ha->host_no, ha->instance,
++                                  pels_pt_req->Lid);)
++
++                              break;
++                      }
++              }
++      } else {
++              /* search with PID */
++              list_for_each(fcil, &ha->fcinitiators) {
++                      fcinitiator = list_entry(fcil, fc_initiator_t, list);
++
++                      if (pels_pt_req->Id[1] == fcinitiator->d_id.r.d_id[2]
++                          && pels_pt_req->Id[2] == fcinitiator->d_id.r.d_id[1]
++                          && pels_pt_req->Id[3] ==
++                                  fcinitiator->d_id.r.d_id[0]) {
++
++                              port_found = TRUE;
++                              pels_pt_req->Lid = fcinitiator->loop_id;
++
++                              DEBUG9(printk("%s(%ld): inst=%ld found host "
++                                  "w/ WWN. loop_id = %02x.\n",
++                                  __func__, ha->host_no, ha->instance,
++                                  pels_pt_req->Lid);)
++
++                              break;
++                      }
++              }
++      }
++
++      /* If this is for a host device, check if we need to perform login */
++      if (port_found && (fcinitiator->loop_id >= LAST_SNS_LOOP_ID)) {
++
++              DEBUG9_10(printk("%s(%ld): inst=%ld need to relogin to "
++                  "dest host.\n",
++                  __func__, ha->host_no, ha->instance);)
++
++              if (fcinitiator->d_id.b24 == 0) {
++                      /* Either RSCN hasn't been processed yet or
++                       * this host is no longer connected to us.
++                       */
++                      pext->Status = EXT_STATUS_DEV_NOT_FOUND;
++                      DEBUG9_10(printk("%s(%ld): inst=%ld ERROR dest host "
++                          "port lost.\n",
++                          __func__, ha->host_no, ha->instance);)
++
++                      goto els_passthru_done;
++              }
++
++              /* login and update database */
++              tmpdev.d_id.b24 = fcinitiator->d_id.b24;
++              tmpdev.loop_id = fcinitiator->loop_id;
++
++              if (qla2x00_host_relogin(ha, &tmpdev) != 0) {
++                      /* login failed. */
++                      pext->Status = EXT_STATUS_DEV_NOT_FOUND;
++
++                      DEBUG9_10(printk("%s(%ld): inst=%ld ERROR login to "
++                          "host port failed. loop_id=%02x pid=%02x%02x%02x "
++                          "ret=%d.\n",
++                          __func__, ha->host_no, ha->instance, tmpdev.loop_id,
++                          tmpdev.d_id.b.domain,
++                          tmpdev.d_id.b.area,
++                          tmpdev.d_id.b.al_pa,
++                          ret);)
++
++                      goto els_passthru_done;
++              } else {
++                      fcinitiator->loop_id = tmpdev.loop_id;
++                      pels_pt_req->Lid = tmpdev.loop_id;
++
++                      DEBUG9(printk("%s(%ld): inst=%ld success login to "
++                          "remote host; Lid=%02x.\n",
++                          __func__, ha->host_no, ha->instance,
++                          fcinitiator->loop_id);)
++              }
++      }
++      
++      /* 2nd: scan thru our fcport database */
++      if (!invalid_wwn && !port_found) {
++              /* search with WWPN */
++              list_for_each(fcpl, &ha->fcports) {
++                      fcport = list_entry(fcpl, fc_port_t, list);
++       
++                      if (memcmp(fcport->port_name, pels_pt_req->WWPN,
++                          EXT_DEF_WWN_NAME_SIZE) == 0) {
++
++                              port_found = TRUE;
++                              pels_pt_req->Lid = fcport->loop_id;
++
++                              DEBUG9(printk("%s(%ld): inst=%ld found fcport "
++                                  "w/ WWN. loop_id = %02x.\n",
++                                  __func__, ha->host_no, ha->instance,
++                                  pels_pt_req->Lid);)
++                              break;
++                      }
++              }
++      } else  if (!port_found) {
++              /* search with PID */
++              list_for_each(fcpl, &ha->fcports) {
++                      fcport = list_entry(fcpl, fc_port_t, list);
++       
++                      if (pels_pt_req->Id[1] == fcport->d_id.r.d_id[2]
++                          && pels_pt_req->Id[2] == fcport->d_id.r.d_id[1]
++                          && pels_pt_req->Id[3] == fcport->d_id.r.d_id[0]) {
++
++                              port_found = TRUE;
++                              pels_pt_req->Lid = fcport->loop_id;
++
++                              DEBUG9(printk("%s(%ld): inst=%ld found fcport "
++                                  "w/ PID. loop_id = %02x.\n",
++                                  __func__, ha->host_no, ha->instance,
++                                  pels_pt_req->Lid);)
++
++                              break;
++                      }
++              }
++      }
++      
++      if (!port_found) {
++              /* invalid WWN or PID specified */
++              pext->Status = EXT_STATUS_INVALID_PARAM;
++              DEBUG9_10(printk("%s(%ld): inst=%ld ERROR WWPN/PID invalid.\n",
++                  __func__, ha->host_no, ha->instance);)
++
++              goto els_passthru_done;
++      }
++
++      /* alloc sp */
++      if ((sp = qla2x00_get_new_sp(ha)) == NULL) {
++
++              pext->Status = EXT_STATUS_NO_MEMORY;
++              DEBUG9_10(printk("%s: ERROR cannot alloc sp %p.\n",
++                  __func__, sp);)
++
++              goto els_passthru_done;
++      }
++
++      DEBUG9(printk("%s(%ld): inst=%ld after alloc sp.\n",
++          __func__, ha->host_no, ha->instance);)
++
++      /* setup sp for this command */
++      ptq = ha->ioctl->ioctl_tq;
++      plq = ha->ioctl->ioctl_lq;
++      sp->cmd = pscsi_cmd;
++      sp->flags = SRB_IOCTL;
++      sp->lun_queue = plq;
++      sp->tgt_queue = ptq;
++      ptemp_fclun->fcport = ptemp_fcport;
++      ptemp_fclun->lun = 0;
++      ptemp_fclun->flags = 0;
++      plq->fclun = ptemp_fclun;
++      plq->fclun->fcport->ha = ha;
++
++      /* init scsi_cmd */
++      pscsi_cmd->device->host = ha->host;
++      pscsi_cmd->scsi_done = qla2x00_msiocb_done;
++
++      /* check on loop down (2)- check again just before sending cmd out. */
++      if (ha->loop_state != LOOP_READY || 
++          test_bit(CFG_ACTIVE, &ha->cfg_flags) ||
++          (test_bit(ABORT_ISP_ACTIVE, &ha->dpc_flags)) ||
++          ABORTS_ACTIVE) {
++
++              DEBUG9_10(printk("%s(%ld): inst=%ld before issue cmd- loop "
++                  "not ready.\n",
++                  __func__, ha->host_no, ha->instance);)
++
++              pext->Status = EXT_STATUS_BUSY;
++
++              atomic_set(&sp->ref_count, 0);
++              add_to_free_queue (ha, sp);
++
++              goto els_passthru_done;
++      }
++
++      DEBUG9(printk("%s(%ld): inst=%ld going to issue command.\n",
++          __func__, ha->host_no, ha->instance);)
++
++      tmp_rval = qla2x00_start_ms_cmd(ha, pext, sp, pels_pt_req);
++
++      DEBUG9(printk("%s(%ld): inst=%ld after issue command.\n",
++          __func__, ha->host_no, ha->instance);)
++
++      if (tmp_rval != 0) {
++              /* We waited and post function did not get called */
++              DEBUG9_10(printk("%s(%ld): inst=%ld command timed out.\n",
++                  __func__, ha->host_no, ha->instance);)
++
++              pext->Status = EXT_STATUS_MS_NO_RESPONSE;
++
++              atomic_set(&sp->ref_count, 0);
++              add_to_free_queue (ha, sp);
++
++              goto els_passthru_done;
++      }
++
++      /* check on data returned */
++      ptmp_stat = (uint8_t *)ha->ioctl_mem + FC_HEADER_LEN;
++
++      if (*ptmp_stat == ELS_STAT_LS_RJT) {
++              payload_len = FC_HEADER_LEN + ELS_RJT_LENGTH;
++
++      } else if (*ptmp_stat == ELS_STAT_LS_ACC) {
++              payload_len = pext->ResponseLen - sizeof(EXT_ELS_PT_REQ);
++
++      } else {
++              /* invalid. just copy the status word. */
++              DEBUG9_10(printk("%s(%ld): inst=%ld invalid stat "
++                  "returned =0x%x.\n",
++                  __func__, ha->host_no, ha->instance, *ptmp_stat);)
++
++              payload_len = FC_HEADER_LEN + 4;
++      }
++
++      DEBUG9(printk("%s(%ld): inst=%ld data dump-\n",
++          __func__, ha->host_no, ha->instance);)
++      DEBUG9(qla2x00_dump_buffer((uint8_t *)ptmp_stat,
++          pext->ResponseLen - sizeof(EXT_ELS_PT_REQ) - FC_HEADER_LEN);)
++      
++      /* Verify response buffer to be written */
++      /* The data returned include FC frame header */
++      presp_payload = (uint8_t *)pext->ResponseAdr + sizeof(EXT_ELS_PT_REQ);
++
++      ret = verify_area(VERIFY_WRITE, (void *)presp_payload, payload_len);
++      if (ret) {
++              pext->Status = EXT_STATUS_COPY_ERR;
++
++              DEBUG9_10(printk("%s(%ld): inst=%ld ERROR verify wrt rsp "
++                  "buffer. ha=%p.\n",
++                  __func__, ha->host_no, ha->instance, ha);)
++
++              goto els_passthru_done;
++      }
++
++      /* copy back data returned to response buffer */
++      ret = copy_to_user(presp_payload, (uint8_t *)ha->ioctl_mem,
++          payload_len);
++      if (ret) {
++              pext->Status = EXT_STATUS_COPY_ERR;
++              DEBUG9_10(printk("%s(%ld): inst=%ld ERROR copy rsp buffer.\n",
++                  __func__, ha->host_no, ha->instance);)
++              goto els_passthru_done;
++      }
++
++      DEBUG9(printk("%s(%ld): inst=%ld exiting normally.\n",
++          __func__, ha->host_no, ha->instance);)
++
++els_passthru_done:
++
++      qla2x00_free_ioctl_scrap_mem(ha);
++      return (ret);
++}
++#endif
++
++/*
++ * qla2x00_send_fcct
++ *    Passes the FC CT command down to firmware as MSIOCB and
++ *    copies the response back when it completes.
++ *
++ * Input:
++ *    ha = adapter state pointer.
++ *    pext = EXT_IOCTL structure pointer.
++ *    mode = not used.
++ *
++ * Returns:
++ *    0 = success
++ *    others = errno value
++ *
++ * Context:
++ *    Kernel context.
++ */
++static int
++qla2x00_send_fcct(scsi_qla_host_t *ha, EXT_IOCTL *pext, int mode)
++{
++      int             ret = 0;
++      int             tmp_rval = 0;
++      uint16_t        mb[MAILBOX_REGISTER_COUNT];
++
++      fc_lun_t        *ptemp_fclun;
++      fc_port_t       *ptemp_fcport;
++
++      os_lun_t        *lq;
++      os_tgt_t        *tq;
++
++      Scsi_Cmnd       *pscsi_cmd;
++      srb_t           *sp = NULL;
++
++      DEBUG9(printk("%s(%ld): inst=%ld entered.\n",
++          __func__, ha->host_no, ha->instance);)
++
++      /* check on current topology */
++      if ((ha->current_topology != ISP_CFG_F) &&
++          (ha->current_topology != ISP_CFG_FL)) {
++              pext->Status = EXT_STATUS_DEV_NOT_FOUND;
++              DEBUG9_10(printk("%s(%ld): inst=%ld ERROR not in F or FL mode\n",
++                  __func__, ha->host_no, ha->instance);)
++              return (ret);
++      }
++
++      if (ha->ioctl_mem_size <= 0) {
++              if (qla2x00_get_new_ioctl_dma_mem(ha,
++                  QLA_INITIAL_IOCTLMEM_SIZE) != QL_STATUS_SUCCESS) {
++
++                      DEBUG9_10(printk("%s(%ld): inst=%ld ERROR cannot alloc "
++                          "DMA buffer size=%lx.\n",
++                          __func__, ha->host_no, ha->instance,
++                          QLA_INITIAL_IOCTLMEM_SIZE);)
++
++                      pext->Status = EXT_STATUS_NO_MEMORY;
++                      return (ret);
++              }
++      }
++
++      if (pext->ResponseLen > ha->ioctl_mem_size) {
++              if (qla2x00_get_new_ioctl_dma_mem(ha, pext->ResponseLen) !=
++                  QL_STATUS_SUCCESS) {
++                      DEBUG9_10(printk("%s(%ld): inst=%ld ERROR cannot alloc "
++                          "requested DMA buffer size %x.\n",
++                          __func__, ha->host_no, ha->instance,
++                          pext->ResponseLen);)
++                      pext->Status = EXT_STATUS_NO_MEMORY;
++                      return (ret);
++              }
++
++              DEBUG9(printk("%s(%ld): inst=%ld rsp buf len larger than "
++                  "existing size. Additional mem alloc successful.\n",
++                  __func__, ha->host_no, ha->instance);)
++      }
++
++      if (pext->RequestLen > ha->ioctl_mem_size) {
++              pext->Status = EXT_STATUS_INVALID_PARAM;
++              DEBUG9_10(printk("%s(%ld): inst=%ld ERROR ReqLen too big=%x.\n",
++                  __func__, ha->host_no, ha->instance, pext->RequestLen);)
++
++              return (ret);
++      }
++
++      ret = verify_area(VERIFY_READ, (void *)pext->RequestAdr,
++          pext->RequestLen);
++      if (ret) {
++              pext->Status = EXT_STATUS_COPY_ERR;
++              DEBUG9_10(printk(
++                  "%s(%ld): inst=%ld ERROR verify read req buf\n",
++                  __func__, ha->host_no, ha->instance);)
++
++              return (ret);
++      }
++
++      DEBUG9(printk("%s(%ld): inst=%ld req buf verified.\n",
++          __func__, ha->host_no, ha->instance);)
++
++      if (qla2x00_get_ioctl_scrap_mem(ha, (void **)&pscsi_cmd,
++          sizeof(Scsi_Cmnd))) {
++              /* not enough memory */
++              pext->Status = EXT_STATUS_NO_MEMORY;
++              DEBUG9_10(printk("%s(%ld): inst=%ld scrap not big enough. "
++                  "size requested=%d.\n",
++                  __func__, ha->host_no, ha->instance,
++                  sizeof(Scsi_Cmnd));)
++              return (ret);
++      }
++      if (qla2x00_get_ioctl_scrap_mem(ha, (void **)&ptemp_fclun,
++          sizeof(fc_lun_t))) {
++              /* not enough memory */
++              pext->Status = EXT_STATUS_NO_MEMORY;
++              DEBUG9_10(printk("%s(%ld): inst=%ld scrap not big enough. "
++                  "fclun size requested=%d.\n",
++                  __func__, ha->host_no, ha->instance,
++                  sizeof(fc_lun_t));)
++              goto fcct_passthru_done;
++      }
++      if (qla2x00_get_ioctl_scrap_mem(ha, (void **)&ptemp_fcport,
++          sizeof(fc_port_t))) {
++              /* not enough memory */
++              pext->Status = EXT_STATUS_NO_MEMORY;
++              DEBUG9_10(printk("%s(%ld): inst=%ld scrap not big enough. "
++                  "fcport size requested=%d.\n",
++                  __func__, ha->host_no, ha->instance,
++                  sizeof(fc_port_t));)
++              goto fcct_passthru_done;
++      }
++
++      /* initialize */
++      memset(ha->ioctl_mem, 0, ha->ioctl_mem_size);
++
++      /* copy request buffer */
++      ret = copy_from_user(ha->ioctl_mem, pext->RequestAdr, pext->RequestLen);
++      if (ret) {
++              pext->Status = EXT_STATUS_COPY_ERR;
++              DEBUG9_10(printk(
++                  "%s(%ld): inst=%ld ERROR copy req buf. ret=%d\n",
++                  __func__, ha->host_no, ha->instance, ret);)
++
++
++              goto fcct_passthru_done;
++      }
++
++      DEBUG9(printk("%s(%ld): inst=%ld after copy request.\n",
++          __func__, ha->host_no, ha->instance);)
++
++      /* alloc sp */
++      if ((sp = qla2x00_get_new_sp(ha)) == NULL) {
++
++              DEBUG9_10(printk("%s(%ld): inst=%ld ERROR cannot alloc "
++                  "sp %p.\n",
++                  __func__, ha->host_no, ha->instance, sp);)
++
++              pext->Status = EXT_STATUS_NO_MEMORY;
++              goto fcct_passthru_done;
++      }
++
++      DEBUG9(printk("%s(%ld): inst=%ld after alloc sp.\n",
++          __func__, ha->host_no, ha->instance);)
++
++      /* setup sp for this command */
++      tq = ha->ioctl->ioctl_tq;
++      lq = ha->ioctl->ioctl_lq;
++      sp->cmd = pscsi_cmd;
++      sp->flags = SRB_IOCTL;
++      sp->lun_queue = lq;
++      sp->tgt_queue = tq;
++      ptemp_fclun->fcport = ptemp_fcport;
++      ptemp_fclun->lun = 0;
++      ptemp_fclun->flags = 0;
++      lq->fclun = ptemp_fclun;
++      lq->fclun->fcport->ha = ha;
++
++      /* init scsi_cmd */
++      pscsi_cmd->device->host = ha->host;
++      pscsi_cmd->scsi_done = qla2x00_msiocb_done;
++
++      /* check on management server login status */
++      if (ha->flags.management_server_logged_in == 0) {
++              /* login to management server device */
++
++              tmp_rval = qla2x00_login_fabric(ha, MANAGEMENT_SERVER,
++                  0xff, 0xff, 0xfa, &mb[0], BIT_1);
++
++              if (tmp_rval != 0 || mb[0] != 0x4000) {
++                      pext->Status = EXT_STATUS_DEV_NOT_FOUND;
++
++                      DEBUG10(printk("%s(%ld): inst=%ld ERROR login to MS.\n",
++                          __func__, ha->host_no, ha->instance);)
++
++                      atomic_set(&sp->ref_count, 0);
++                      add_to_free_queue (ha, sp);
++
++                      goto fcct_passthru_done;
++              }
++
++              ha->flags.management_server_logged_in = 1;
++      }
++
++      DEBUG9(printk("%s(%ld): success login to MS.\n",
++          __func__, ha->host_no);)
++
++      /* check on loop down */
++      if (ha->loop_state != LOOP_READY || 
++          test_bit(CFG_ACTIVE, &ha->cfg_flags) ||
++          (test_bit(ABORT_ISP_ACTIVE, &ha->dpc_flags)) ||
++          ABORTS_ACTIVE) {
++
++              DEBUG10(printk("%s(%ld): inst=%ld loop not ready.\n",
++                  __func__, ha->host_no, ha->instance);)
++
++              pext->Status = EXT_STATUS_BUSY;
++
++              atomic_set(&sp->ref_count, 0);
++              add_to_free_queue (ha, sp);
++
++              goto fcct_passthru_done;
++      }
++
++      DEBUG9(printk("%s(%ld): inst=%ld going to issue command.\n",
++          __func__, ha->host_no, ha->instance);)
++
++      tmp_rval = qla2x00_start_ms_cmd(ha, pext, sp, NULL);
++
++      DEBUG9(printk("%s(%ld): inst=%ld after issue command.\n",
++          __func__, ha->host_no, ha->instance);)
++
++      if (tmp_rval != 0) {
++              /* We waited and post function did not get called */
++              DEBUG9_10(printk("%s(%ld): inst=%ld command timed out.\n",
++                  __func__, ha->host_no, ha->instance);)
++              pext->Status = EXT_STATUS_MS_NO_RESPONSE;
++              atomic_set(&sp->ref_count, 0);
++              add_to_free_queue (ha, sp);
++
++              goto fcct_passthru_done;
++      }
++
++      if (CMD_COMPL_STATUS(pscsi_cmd) != 0 ||
++          CMD_ENTRY_STATUS(pscsi_cmd) != 0) {
++              DEBUG9_10(printk("%s(%ld): inst=%ld cmd returned error=%x.\n",
++                  __func__, ha->host_no, ha->instance,
++                  CMD_COMPL_STATUS(pscsi_cmd));)
++              pext->Status = EXT_STATUS_ERR;
++              goto fcct_passthru_done;
++      }
++
++      /* getting device data and putting in pext->ResponseAdr */
++      ret = verify_area(VERIFY_WRITE, (void *)pext->ResponseAdr ,
++          pext->ResponseLen);
++      if (ret) {
++              pext->Status = EXT_STATUS_COPY_ERR;
++              DEBUG9_10(printk("%s(%ld): inst=%ld ERROR verify wrt rsp "
++                  "buffer. ha=%p.\n",
++                  __func__, ha->host_no, ha->instance, ha);)
++              goto fcct_passthru_done;
++      }
++
++      /* sending back data returned from Management Server */
++      ret = copy_to_user((uint8_t *)pext->ResponseAdr,
++          (uint8_t *)ha->ioctl_mem, pext->ResponseLen);
++      if (ret) {
++              pext->Status = EXT_STATUS_COPY_ERR;
++              DEBUG9_10(printk("%s(%ld): inst=%ld ERROR copy rsp buffer.\n",
++                  __func__, ha->host_no, ha->instance);)
++              goto fcct_passthru_done;
++      }
++
++      DEBUG9(printk("%s(%ld): inst=%ld exiting.\n",
++          __func__, ha->host_no, ha->instance);)
++
++fcct_passthru_done:
++
++      qla2x00_free_ioctl_scrap_mem(ha);
++      return (ret);
++}
++
++/*
++ * qla2x00_start_ms_cmd
++ *    Allocates an MSIOCB request pkt and sends out the passthru cmd.
++ *
++ * Input:
++ *    ha = adapter state pointer.
++ *
++ * Returns:
++ *    qla2x00 local function return status code.
++ *
++ * Context:
++ *    Kernel context.
++ */
++static int
++qla2x00_start_ms_cmd(scsi_qla_host_t *ha, EXT_IOCTL *pext, srb_t *sp,
++    EXT_ELS_PT_REQ *pels_pt_req)
++{
++#define       ELS_REQUEST_RCTL        0x22
++#define ELS_REPLY_RCTL                0x23
++
++      uint32_t        usr_req_len;
++      uint32_t        usr_resp_len;
++      uint64_t        usr_reqbuf_addr;
++
++      ms_iocb_entry_t         *pkt;
++      unsigned long           cpu_flags = 0;
++
++
++      /* get spin lock for this operation */
++      spin_lock_irqsave(&ha->hardware_lock, cpu_flags);
++
++      /* Get MS request packet. */
++      pkt = (ms_iocb_entry_t *)qla2x00_ms_req_pkt(ha, sp);
++      if (pkt == NULL) {
++              /* release spin lock and return error. */
++              spin_unlock_irqrestore(&ha->hardware_lock, cpu_flags);
++
++              pext->Status = EXT_STATUS_NO_MEMORY;
++              DEBUG10(printk("%s(%ld): inst=%ld MSIOCB PT - could not get "
++                  "Request Packet.\n", __func__, ha->host_no, ha->instance);)
++              return (QL_STATUS_RESOURCE_ERROR);
++      }
++
++      pkt->entry_type  = MS_IOCB_TYPE;
++      pkt->entry_count = 1;
++      
++      if (pels_pt_req != NULL) {
++              /* process ELS passthru command */
++              usr_reqbuf_addr = (uint64_t)ha->ioctl_mem_phys +
++                  sizeof(EXT_ELS_PT_REQ);
++              usr_req_len = pext->RequestLen - sizeof(EXT_ELS_PT_REQ);
++              usr_resp_len = pext->ResponseLen - sizeof(EXT_ELS_PT_REQ);
++      
++              pkt->control_flags = BIT_15; /* ELS passthru enabled */
++              pkt->loop_id = pels_pt_req->Lid;
++              pkt->type    = 1; /* ELS frame */
++              
++              if (pext->ResponseLen != 0) {
++                      pkt->r_ctl    = ELS_REQUEST_RCTL;
++                      pkt->rx_id    = 0;
++              } else {
++                      pkt->r_ctl    = ELS_REPLY_RCTL;
++                      pkt->rx_id    = pels_pt_req->Rxid;
++              }
++      } else {
++              usr_reqbuf_addr = (uint64_t)ha->ioctl_mem_phys;
++              usr_req_len = pext->RequestLen;
++              usr_resp_len = pext->ResponseLen;
++              pkt->loop_id     = MANAGEMENT_SERVER;
++      }
++
++      DEBUG9_10(printk("%s(%ld): inst=%ld using loop_id=%02x req_len=%d, "
++          "resp_len=%d.\n", __func__, ha->host_no, ha->instance,
++          pkt->loop_id, usr_req_len, usr_resp_len);)
++
++      pkt->timeout = QLA_PT_CMD_TOV;
++      pkt->cmd_dsd_count = 1;
++      pkt->total_dsd_count = 2; /* no continuation */
++      pkt->rsp_bytecount = usr_resp_len;
++      pkt->req_bytecount = usr_req_len;
++
++      /* loading command payload address */
++      pkt->dseg_req_address[0] = LSD(usr_reqbuf_addr);
++      pkt->dseg_req_address[1] = MSD(usr_reqbuf_addr);
++      pkt->dseg_req_length = usr_req_len;
++
++      /* loading response payload address */
++      pkt->dseg_rsp_address[0] = LSD(ha->ioctl_mem_phys);
++      pkt->dseg_rsp_address[1] = MSD(ha->ioctl_mem_phys);
++      pkt->dseg_rsp_length = usr_resp_len;
++
++      /* set flag to indicate IOCTL MSIOCB cmd in progress */
++      ha->ioctl->MSIOCB_InProgress = 1;
++      ha->ioctl->ioctl_tov = pkt->timeout + 1; /* 1 second more */
++
++      /* prepare for receiving completion. */
++      qla2x00_ioctl_sem_init(ha);
++
++      /* Issue command to ISP */
++      qla2x00_isp_cmd(ha);
++
++      ha->ioctl->cmpl_timer.expires = jiffies + ha->ioctl->ioctl_tov * HZ;
++      add_timer(&ha->ioctl->cmpl_timer);
++
++      DEBUG9(printk("%s(%ld): inst=%ld releasing hardware_lock.\n",
++          __func__, ha->host_no, ha->instance);)
++      spin_unlock_irqrestore(&ha->hardware_lock, cpu_flags);
++
++      DEBUG9(printk("%s(%ld): inst=%ld sleep for completion.\n",
++          __func__, ha->host_no, ha->instance);)
++
++      down(&ha->ioctl->cmpl_sem);
++
++      del_timer(&ha->ioctl->cmpl_timer);
++
++      if (ha->ioctl->MSIOCB_InProgress == 1) {
++              DEBUG9_10(printk("%s(%ld): inst=%ld timed out. exiting.\n",
++                  __func__, ha->host_no, ha->instance);)
++              return QL_STATUS_ERROR;
++      }
++
++      DEBUG9(printk("%s(%ld): inst=%ld exiting.\n",
++          __func__, ha->host_no, ha->instance);)
++
++      return QL_STATUS_SUCCESS;
++}
++
++/*
++ * qla2x00_wwpn_to_scsiaddr
++ *    Handles the EXT_CC_WWPN_TO_SCSIADDR command.
++ *
++ * Input:
++ *    ha = adapter state pointer.
++ *    pext = EXT_IOCTL structure pointer.
++ *    mode = not used.
++ *
++ * Returns:
++ *    0 = success
++ *    others = errno value
++ *
++ * Context:
++ *    Kernel context.
++ */
++static int
++qla2x00_wwpn_to_scsiaddr(scsi_qla_host_t *ha, EXT_IOCTL *pext, int mode)
++{
++      int             ret = 0;
++      fc_port_t       *tgt_fcport;
++      os_tgt_t        *tq;
++      uint8_t         tmp_wwpn[EXT_DEF_WWN_NAME_SIZE];
++      uint32_t        b, tgt, l;
++      EXT_SCSI_ADDR   tmp_addr;
++
++
++      DEBUG9(printk("%s(%ld): inst=%ld entered.\n",
++          __func__, ha->host_no, ha->instance);)
++
++      if (pext->RequestLen != EXT_DEF_WWN_NAME_SIZE ||
++          pext->ResponseLen < sizeof(EXT_SCSI_ADDR)) {
++              /* error */
++              DEBUG9_10(printk("%s(%ld): inst=%ld invalid WWN buffer size %d "
++                  "received.\n",
++                  __func__, ha->host_no, ha->instance, pext->ResponseLen);)
++              pext->Status = EXT_STATUS_INVALID_PARAM;
++
++              return (ret);
++      }
++
++      ret = verify_area(VERIFY_READ, (void *)pext->RequestAdr,
++          pext->RequestLen);
++      if (ret) {
++              DEBUG9_10(printk(
++                  "%s(%ld): inst=%ld ERROR VERIFY_READ req buf\n",
++                  __func__, ha->host_no, ha->instance);)
++              pext->Status = EXT_STATUS_COPY_ERR;
++              return (ret);
++      }
++
++      ret = copy_from_user(tmp_wwpn, pext->RequestAdr, pext->RequestLen);
++      if (ret) {
++              DEBUG9_10(printk("%s(%ld): inst=%ld ERROR copy_from_user "
++                  "failed(%d) on request buf.\n",
++                  __func__, ha->host_no, ha->instance, ret);)
++              pext->Status = EXT_STATUS_COPY_ERR;
++              return (ret);
++      }
++
++      tq = NULL;
++      for (tgt = 0; tgt < MAX_TARGETS; tgt++) {
++              if (ha->otgt[tgt] == NULL) {
++                      continue;
++              }
++
++              tq = ha->otgt[tgt];
++              if (tq->vis_port == NULL) {
++                      break;
++              }
++
++              tgt_fcport = tq->vis_port;
++              if (memcmp(tmp_wwpn, tgt_fcport->port_name,
++                  EXT_DEF_WWN_NAME_SIZE) == 0) {
++                      break;
++              }
++      }
++
++      if (tq == NULL || tgt >= MAX_TARGETS) {
++              pext->Status = EXT_STATUS_DEV_NOT_FOUND;
++              DEBUG9_10(printk("%s(%ld): inst=%ld target dev not found. "
++                  "tq=%p, tgt=%x.\n", __func__, ha->host_no, ha->instance,
++                  tq, tgt);)
++              return (ret);
++      }
++
++      if (tq->vis_port == NULL) {     /* dg 08/14/01 */
++              pext->Status = EXT_STATUS_BUSY;
++              DEBUG9_10(printk("%s(%ld): inst=%ld target port not found. "
++                  "tq=%p, tgt=%x.\n",
++                  __func__, ha->host_no, ha->instance, tq, tgt);)
++              return (ret);
++      }       
++
++      /* Currently we only have bus 0 and no translation on LUN */
++      b = 0;
++      l = 0;
++
++      /*
++       * Return SCSI address. Currently no translation is done for
++       * LUN.
++       */
++      tmp_addr.Bus = b;
++      tmp_addr.Target = tgt;
++      tmp_addr.Lun = l;
++      if (pext->ResponseLen > sizeof(EXT_SCSI_ADDR))
++              pext->ResponseLen = sizeof(EXT_SCSI_ADDR);
++
++      ret = verify_area(VERIFY_WRITE, (void *)pext->ResponseAdr,
++          pext->ResponseLen);
++      if (ret) {
++              pext->Status = EXT_STATUS_COPY_ERR;
++              DEBUG9_10(printk("%s(%ld): inst=%ld ERROR VERIFY wrt rsp buf\n",
++                  __func__, ha->host_no, ha->instance);)
++              return (ret);
++      }
++
++      ret = copy_to_user((uint8_t *)pext->ResponseAdr, &tmp_addr,
++          pext->ResponseLen);
++      if (ret) {
++              pext->Status = EXT_STATUS_COPY_ERR;
++              DEBUG9_10(printk("%s(%ld): inst=%ld ERROR copy rsp buffer.\n",
++                  __func__, ha->host_no, ha->instance);)
++              return (ret);
++      }
++
++      DEBUG9(printk(KERN_INFO
++          "%s(%ld): Found t%d l%d for %02x%02x%02x%02x%02x%02x%02x%02x.\n",
++          __func__, ha->host_no,
++          tmp_addr.Target, tmp_addr.Lun,
++          tmp_wwpn[0], tmp_wwpn[1], tmp_wwpn[2], tmp_wwpn[3],
++          tmp_wwpn[4], tmp_wwpn[5], tmp_wwpn[6], tmp_wwpn[7]);)
++
++      pext->Status = EXT_STATUS_OK;
++
++      DEBUG9(printk("%s(%ld): inst=%ld exiting.\n",
++          __func__, ha->host_no, ha->instance);)
++
++      return (ret);
++}
++
++/*
++ * qla2x00_scsi_passthru
++ *    Handles all subcommands of the EXT_CC_SEND_SCSI_PASSTHRU command.
++ *
++ * Input:
++ *    ha = adapter state pointer.
++ *    pext = EXT_IOCTL structure pointer.
++ *    mode = not used.
++ *
++ * Returns:
++ *    0 = success
++ *    others = errno value
++ *
++ * Context:
++ *    Kernel context.
++ */
++static int
++qla2x00_scsi_passthru(scsi_qla_host_t *ha, EXT_IOCTL *pext, int mode)
++{
++      int tmp_rval = 0;
++
++      switch(pext->SubCode) {
++      case EXT_SC_SEND_SCSI_PASSTHRU:
++              tmp_rval = qla2x00_sc_scsi_passthru(ha, pext, mode);
++              break;
++      case EXT_SC_SEND_FC_SCSI_PASSTHRU:
++              tmp_rval = qla2x00_sc_fc_scsi_passthru(ha, pext, mode);
++              break;
++      case EXT_SC_SCSI3_PASSTHRU:
++              tmp_rval = qla2x00_sc_scsi3_passthru(ha, pext, mode);
++              break;
++      default:
++              break;
++      }
++
++      return tmp_rval;
++}
++
++/*
++ * qla2x00_sc_scsi_passthru
++ *    Handles EXT_SC_SEND_SCSI_PASSTHRU subcommand.
++ *
++ * Input:
++ *    ha = adapter state pointer.
++ *    pext = EXT_IOCTL structure pointer.
++ *    mode = not used.
++ *
++ * Returns:
++ *    0 = success
++ *    others = errno value
++ *
++ * Context:
++ *    Kernel context.
++ */
++static int
++qla2x00_sc_scsi_passthru(scsi_qla_host_t *ha, EXT_IOCTL *pext, int mode)
++{
++      int             ret = 0;
++      uint8_t         *usr_temp, *kernel_tmp;
++      uint8_t         scsi_direction;
++      uint32_t        i;
++
++#if defined(QL_DEBUG_LEVEL_9)
++      uint32_t        b, t, l;
++#endif
++      uint32_t        transfer_len;
++
++      EXT_SCSI_PASSTHRU       *pscsi_pass;
++
++      Scsi_Cmnd               *pscsi_cmd;
++      Scsi_Device             *pscsi_device;
++
++      DEBUG9(printk("%s(%ld): inst=%ld entered.\n",
++          __func__, ha->host_no, ha->instance);)
++
++      ret = verify_area(VERIFY_READ, (void *)pext->RequestAdr,
++          sizeof(EXT_SCSI_PASSTHRU));
++      if (ret) {
++              pext->Status = EXT_STATUS_COPY_ERR;
++              DEBUG9_10(printk("%s(%ld): inst=%ld ERROR verify READ "
++                  "req buf.\n",
++                  __func__, ha->host_no, ha->instance);)
++              return (ret);
++      }
++
++      if (pext->ResponseLen > ha->ioctl_mem_size) {
++              if (qla2x00_get_new_ioctl_dma_mem(ha, pext->ResponseLen) !=
++                  QL_STATUS_SUCCESS) {
++                      DEBUG9_10(printk("%s(%ld): inst=%ld ERROR cannot alloc "
++                          "requested DMA buffer size %x.\n",
++                          __func__, ha->host_no, ha->instance,
++                          pext->ResponseLen);)
++                      pext->Status = EXT_STATUS_NO_MEMORY;
++                      return (ret);
++              }
++      }
++
++      if (qla2x00_get_ioctl_scrap_mem(ha, (void **)&pscsi_pass,
++          sizeof(EXT_SCSI_PASSTHRU))) {
++              /* not enough memory */
++              pext->Status = EXT_STATUS_NO_MEMORY;
++              DEBUG9_10(printk("%s(%ld): inst=%ld scrap not big enough. "
++                  "size requested=%d.\n",
++                  __func__, ha->host_no, ha->instance,
++                  sizeof(EXT_SCSI_PASSTHRU));)
++              return (ret);
++      }
++
++      if (qla2x00_get_ioctl_scrap_mem(ha, (void **)&pscsi_cmd,
++          sizeof(Scsi_Cmnd))) {
++              /* not enough memory */
++              pext->Status = EXT_STATUS_NO_MEMORY;
++              DEBUG9_10(printk("%s(%ld): inst=%ld scrap not big enough. "
++                  "pscsi_cmd requested=%d.\n",
++                  __func__, ha->host_no, ha->instance,
++                  sizeof(Scsi_Cmnd));)
++              goto scsi_passthru_done;
++      }
++
++      if (qla2x00_get_ioctl_scrap_mem(ha, (void **)&pscsi_device,
++          sizeof(Scsi_Device))) {
++              /* not enough memory */
++              pext->Status = EXT_STATUS_NO_MEMORY;
++              DEBUG9_10(printk("%s(%ld): inst=%ld scrap not big enough. "
++                  "pscsi_device requested=%d.\n",
++                  __func__, ha->host_no, ha->instance,
++                  sizeof(Scsi_Device));)
++              goto scsi_passthru_done;
++      }
++
++      /* clear ioctl_mem to be used */
++      memset(ha->ioctl_mem, 0, ha->ioctl_mem_size);
++
++      /* Copy request buffer */
++      usr_temp = (uint8_t *)pext->RequestAdr;
++      kernel_tmp = (uint8_t *)pscsi_pass;
++      ret = copy_from_user(kernel_tmp, usr_temp, sizeof(EXT_SCSI_PASSTHRU));
++      if (ret) {
++              pext->Status = EXT_STATUS_COPY_ERR;
++              DEBUG9_10(printk(
++                  "%s(%ld): inst=%ld ERROR copy req buf ret=%d\n",
++                  __func__, ha->host_no, ha->instance, ret);)
++              goto scsi_passthru_done;
++      }
++
++      /* set target coordinates */
++      pscsi_cmd->device->id = pscsi_pass->TargetAddr.Target;
++      pscsi_cmd->device->lun = pscsi_pass->TargetAddr.Lun;
++
++      /* Verify target exists */
++      if (TGT_Q(ha, pscsi_cmd->device->id) == NULL) {
++              pext->Status = EXT_STATUS_DEV_NOT_FOUND;
++              DEBUG9_10(printk("%s(%ld): inst=%ld ERROR tgt %d not found.\n",
++                  __func__,
++                  ha->host_no, ha->instance, pscsi_cmd->device->id));
++              goto scsi_passthru_done;
++      }
++
++      /* Copy over cdb */
++
++      if (pscsi_pass->CdbLength == 6) {
++              pscsi_cmd->cmd_len = 6;
++
++      } else if (pscsi_pass->CdbLength == 10) {
++              pscsi_cmd->cmd_len = 0x0A;
++
++      } else if (pscsi_pass->CdbLength == 12) {
++              pscsi_cmd->cmd_len = 0x0C;
++
++      } else {
++              printk(KERN_WARNING
++                  "%s: Unsupported Cdb Length=%x.\n",
++                  __func__, pscsi_pass->CdbLength);
++
++              pext->Status = EXT_STATUS_INVALID_PARAM;
++              goto scsi_passthru_done;
++      }
++
++      memcpy(pscsi_cmd->data_cmnd, pscsi_pass->Cdb, pscsi_cmd->cmd_len);
++      memcpy(pscsi_cmd->cmnd, pscsi_pass->Cdb, pscsi_cmd->cmd_len);
++
++      DEBUG9(printk("%s Dump of cdb buffer:\n", __func__);)
++      DEBUG9(qla2x00_dump_buffer((uint8_t *)&pscsi_cmd->data_cmnd[0],
++          pscsi_cmd->cmd_len);)
++
++      pscsi_cmd->device->host = ha->host;
++
++      /* mark this as a special delivery and collection command */
++      pscsi_cmd->flags     = 0;
++      pscsi_cmd->scsi_done = qla2x00_scsi_pt_done;
++
++      pscsi_cmd->device               = pscsi_device;
++      pscsi_cmd->device->tagged_queue = 0;
++      pscsi_cmd->use_sg               = 0; /* no ScatterGather */
++      pscsi_cmd->request_bufflen      = pext->ResponseLen;
++      pscsi_cmd->request_buffer       = ha->ioctl_mem;
++      pscsi_cmd->timeout_per_command  = QLA_PT_CMD_TOV * HZ;
++      CMD_RESID_LEN(pscsi_cmd) = SRB_IOCTL; /* Used to set sp->flags later */
++
++      if (pscsi_pass->Direction == EXT_DEF_SCSI_PASSTHRU_DATA_OUT) {
++              /* sending user data from pext->ResponseAdr to device */
++              ret = verify_area(VERIFY_READ, (void *)pext->ResponseAdr,
++                  pext->ResponseLen);
++              if (ret) {
++                      pext->Status = EXT_STATUS_COPY_ERR;
++                      DEBUG9_10(printk("%s(%ld): inst=%ld ERROR verify READ "
++                          "rsp buf.\n", __func__, ha->host_no, ha->instance);)
++                      goto scsi_passthru_done;
++              }
++
++              pscsi_cmd->sc_data_direction = SCSI_DATA_WRITE;
++              usr_temp   = (uint8_t *)pext->ResponseAdr;
++              kernel_tmp = (uint8_t *)ha->ioctl_mem;
++              ret = copy_from_user(kernel_tmp, usr_temp, pext->ResponseLen);
++              if (ret) {
++                      pext->Status = EXT_STATUS_COPY_ERR;
++                      DEBUG9_10(printk("%s(%ld): inst=%ld ERROR copy rsp buf "
++                          "failed(%d).\n",
++                          __func__, ha->host_no, ha->instance, ret);)
++                      goto scsi_passthru_done;
++              }
++      } else {
++              pscsi_cmd->sc_data_direction = SCSI_DATA_READ;
++      }
++
++      DEBUG9({
++              b = SCSI_BUS_32(pscsi_cmd);
++              t = SCSI_TCN_32(pscsi_cmd);
++              l = SCSI_LUN_32(pscsi_cmd);
++      })
++      DEBUG9(printk("%s(%ld): CDB=%02x %02x %02x %02x; b=%x t=%x l=%x.\n",
++          __func__, ha->host_no, pscsi_cmd->cmnd[0], pscsi_cmd->cmnd[1],
++          pscsi_cmd->cmnd[2], pscsi_cmd->cmnd[3], b, t, l);)
++
++      /*
++       * Check the status of the port
++       */
++      if (qla2x00_check_tgt_status(ha, pscsi_cmd) != QL_STATUS_SUCCESS) {
++              pext->Status = EXT_STATUS_DEV_NOT_FOUND;
++              DEBUG9_10(printk("%s(%ld): inst=%ld check_tgt_status "
++                  "failed.\n",
++                  __func__, ha->host_no, ha->instance);)
++              goto scsi_passthru_done;
++      }
++
++      /* set flag to indicate IOCTL SCSI PassThru in progress */
++      ha->ioctl->SCSIPT_InProgress = 1;
++      ha->ioctl->ioctl_tov = (int)QLA_PT_CMD_DRV_TOV;
++
++      /* prepare for receiving completion. */
++      qla2x00_ioctl_sem_init(ha);
++      CMD_COMPL_STATUS(pscsi_cmd) = (int) IOCTL_INVALID_STATUS;
++
++      /* send command to adapter */
++      DEBUG9(printk("%s(%ld): inst=%ld sending command.\n",
++          __func__, ha->host_no, ha->instance);)
++
++      /* get spin lock for this operation */
++      spin_lock_irqsave(ha->host->host_lock, ha->cpu_flags);
++
++      qla2x00_queuecommand(pscsi_cmd, (void *) qla2x00_scsi_pt_done);
++
++      ha->ioctl->cmpl_timer.expires = jiffies + ha->ioctl->ioctl_tov * HZ;
++      add_timer(&ha->ioctl->cmpl_timer);
++
++      spin_unlock_irqrestore(ha->host->host_lock, ha->cpu_flags);
++
++      DEBUG9(printk("%s(%ld): inst=%ld waiting for completion.\n",
++          __func__, ha->host_no, ha->instance);)
++
++      down(&ha->ioctl->cmpl_sem);
++
++      del_timer(&ha->ioctl->cmpl_timer);
++
++      DEBUG9(printk("%s(%ld): inst=%ld completed.\n",
++          __func__, ha->host_no, ha->instance);)
++
++      if (ha->ioctl->SCSIPT_InProgress == 1) {
++
++              printk(KERN_WARNING
++                  "qla2x00: scsi%ld ERROR passthru command timeout.\n",
++                  ha->host_no);
++
++              pext->Status = EXT_STATUS_DEV_NOT_FOUND;
++              goto scsi_passthru_done;
++      }
++
++      if (CMD_COMPL_STATUS(pscsi_cmd) == (int)IOCTL_INVALID_STATUS) {
++
++              DEBUG9(printk("%s(%ld): inst=%ld ERROR - cmd not completed.\n",
++                  __func__, ha->host_no, ha->instance);)
++
++              pext->Status = EXT_STATUS_ERR;
++              goto scsi_passthru_done;
++      }
++
++      switch (CMD_COMPL_STATUS(pscsi_cmd)) {
++      case CS_INCOMPLETE:
++      case CS_ABORTED:
++      case CS_PORT_UNAVAILABLE:
++      case CS_PORT_LOGGED_OUT:
++      case CS_PORT_CONFIG_CHG:
++      case CS_PORT_BUSY:
++              DEBUG9_10(printk("%s(%ld): inst=%ld cs err = %x.\n",
++                  __func__, ha->host_no, ha->instance,
++                  CMD_COMPL_STATUS(pscsi_cmd));)
++              pext->Status = EXT_STATUS_BUSY;
++
++              goto scsi_passthru_done;
++      }
++
++      if ((CMD_COMPL_STATUS(pscsi_cmd) == CS_DATA_UNDERRUN) ||
++          (CMD_SCSI_STATUS(pscsi_cmd) != 0)) {
++
++              /* have done the post function */
++              pext->Status       = EXT_STATUS_SCSI_STATUS;
++              pext->DetailStatus = CMD_SCSI_STATUS(pscsi_cmd) & 0xff;
++              DEBUG9_10(printk("%s(%ld): inst=%ld data underrun or scsi err. "
++                  "host status =0x%x, scsi status = 0x%x.\n",
++                  __func__, ha->host_no, ha->instance,
++                  CMD_COMPL_STATUS(pscsi_cmd), CMD_SCSI_STATUS(pscsi_cmd));)
++
++      } else if (CMD_COMPL_STATUS(pscsi_cmd) != 0) {
++              DEBUG9_10(printk("%s(%ld): inst=%ld cs err=%x.\n",
++                  __func__, ha->host_no, ha->instance,
++                  CMD_COMPL_STATUS(pscsi_cmd));)
++              pext->Status = EXT_STATUS_ERR;
++              goto scsi_passthru_done;
++      }
++
++      /* copy up structure to make sense data available to user */
++      pscsi_pass->SenseLength = CMD_ACTUAL_SNSLEN(pscsi_cmd);
++      if (CMD_ACTUAL_SNSLEN(pscsi_cmd)) {
++              for (i = 0; i < CMD_ACTUAL_SNSLEN(pscsi_cmd); i++)
++                      pscsi_pass->SenseData[i] = pscsi_cmd->sense_buffer[i];
++
++              DEBUG10(printk("%s Dump of sense buffer:\n", __func__);)
++              DEBUG10(qla2x00_dump_buffer(
++                  (uint8_t *)&pscsi_pass->SenseData[0],
++                  CMD_ACTUAL_SNSLEN(pscsi_cmd));)
++
++              ret = verify_area(VERIFY_WRITE, (void *)pext->RequestAdr,
++                  sizeof(EXT_SCSI_PASSTHRU));
++              if (ret) {
++                      pext->Status = EXT_STATUS_COPY_ERR;
++                      DEBUG9_10(printk("%s(%ld): inst=%ld ERROR verify WRITE "
++                          "req buf.\n", __func__, ha->host_no, ha->instance);)
++                      goto scsi_passthru_done;
++              }
++
++              usr_temp   = (uint8_t *)pext->RequestAdr;
++              kernel_tmp = (uint8_t *)pscsi_pass;
++              ret = copy_to_user(usr_temp, kernel_tmp,
++                  sizeof(EXT_SCSI_PASSTHRU));
++              if (ret) {
++                      pext->Status = EXT_STATUS_COPY_ERR;
++                      DEBUG9_10(printk("%s(%ld): inst=%ld ERROR copy sense "
++                          "buffer.\n",
++                          __func__, ha->host_no, ha->instance);)
++                      goto scsi_passthru_done;
++              }
++      }
++
++      scsi_direction = pscsi_pass->Direction;
++
++      if (scsi_direction == EXT_DEF_SCSI_PASSTHRU_DATA_IN) {
++              DEBUG9(printk("%s(%ld): inst=%ld copying data.\n",
++                  __func__, ha->host_no, ha->instance);)
++
++              /* getting device data and putting in pext->ResponseAdr */
++              ret = verify_area(VERIFY_WRITE, (void *)pext->ResponseAdr ,
++                  pext->ResponseLen);
++              if (ret) {
++                      pext->Status = EXT_STATUS_COPY_ERR;
++                      DEBUG9_10(printk("%s(%ld): inst=%ld ERROR verify write "
++                          "ResponseAdr.\n",
++                          __func__, ha->host_no, ha->instance);)
++                      goto scsi_passthru_done;
++              }
++
++              /* now copy up the READ data to user */
++              if ((CMD_COMPL_STATUS(pscsi_cmd) == CS_DATA_UNDERRUN) &&
++                  (CMD_RESID_LEN(pscsi_cmd))) {
++
++                      transfer_len = pext->ResponseLen -
++                          CMD_RESID_LEN(pscsi_cmd);
++
++                      pext->ResponseLen = transfer_len;
++              } else {
++                      transfer_len = pext->ResponseLen;
++              }
++
++              usr_temp   = (uint8_t *)pext->ResponseAdr;
++              kernel_tmp = (uint8_t *)ha->ioctl_mem;
++              ret = copy_to_user(usr_temp, kernel_tmp, transfer_len);
++              if (ret) {
++                      pext->Status = EXT_STATUS_COPY_ERR;
++                      DEBUG9_10(printk(
++                          "%s(%ld): inst=%ld ERROR copy rsp buf\n",
++                          __func__, ha->host_no, ha->instance);)
++                      goto scsi_passthru_done;
++              }
++      }
++
++      DEBUG9(printk("%s(%ld): inst=%ld exiting.\n",
++          __func__, ha->host_no, ha->instance);)
++
++scsi_passthru_done:
++
++      qla2x00_free_ioctl_scrap_mem(ha);
++      return (ret);
++}
++
++/*
++ * qla2x00_sc_fc_scsi_passthru
++ *    Handles EXT_SC_SEND_FC_SCSI_PASSTHRU subcommand.
++ *
++ * Input:
++ *    ha = adapter state pointer.
++ *    pext = EXT_IOCTL structure pointer.
++ *    mode = not used.
++ *
++ * Returns:
++ *    0 = success
++ *    others = errno value
++ *
++ * Context:
++ *    Kernel context.
++ */
++static int
++qla2x00_sc_fc_scsi_passthru(scsi_qla_host_t *ha, EXT_IOCTL *pext, int mode)
++{
++      int                     ret = 0;
++      int                     port_found, lun_found;
++      fc_lun_t                temp_fclun;
++      struct list_head        *fcpl;
++      fc_port_t               *fcport;
++      struct list_head        *fcll;
++      fc_lun_t                *fclun = NULL;
++      os_lun_t                *lq;
++      os_tgt_t                *tq;
++      srb_t                   *sp = NULL;
++      uint8_t                 *usr_temp, *kernel_tmp;
++      uint32_t                i;
++
++#if defined(QL_DEBUG_LEVEL_9)
++      uint32_t                b, t, l;
++#endif
++      uint32_t                transfer_len;
++      uint8_t                 scsi_direction;
++
++      EXT_FC_SCSI_PASSTHRU    *pfc_scsi_pass;
++
++      Scsi_Cmnd               *pfc_scsi_cmd;
++      Scsi_Device             *pfc_scsi_device;
++
++      DEBUG9(printk("%s(%ld): inst=%ld entered.\n",
++          __func__, ha->host_no, ha->instance);)
++
++      if ((sp = qla2x00_get_new_sp(ha)) == NULL) {
++
++              DEBUG9_10(printk("%s(%ld): inst=%ld ERROR cannot alloc sp.\n",
++                  __func__, ha->host_no, ha->instance);)
++
++              pext->Status = EXT_STATUS_NO_MEMORY;
++              return (ret);
++      }
++
++      if (qla2x00_get_ioctl_scrap_mem(ha, (void **)&pfc_scsi_pass,
++          sizeof(EXT_FC_SCSI_PASSTHRU))) {
++              /* not enough memory */
++              pext->Status = EXT_STATUS_NO_MEMORY;
++              DEBUG9_10(printk("%s(%ld): inst=%ld scrap not big enough. "
++                  "size requested=%d.\n",
++                  __func__, ha->host_no, ha->instance,
++                  sizeof(EXT_FC_SCSI_PASSTHRU));)
++              return (ret);
++      }
++
++      if (qla2x00_get_ioctl_scrap_mem(ha, (void **)&pfc_scsi_cmd,
++          sizeof(Scsi_Cmnd))) {
++              /* not enough memory */
++              pext->Status = EXT_STATUS_NO_MEMORY;
++              DEBUG9_10(printk("%s(%ld): inst=%ld scrap not big enough. "
++                  "size requested=%d.\n",
++                  __func__, ha->host_no, ha->instance,
++                  sizeof(Scsi_Cmnd));)
++              goto fc_scsi_passthru_done;
++      }
++
++      if (qla2x00_get_ioctl_scrap_mem(ha, (void **)&pfc_scsi_device,
++          sizeof(Scsi_Device))) {
++              /* not enough memory */
++              pext->Status = EXT_STATUS_NO_MEMORY;
++              DEBUG9_10(printk("%s(%ld): inst=%ld scrap not big enough. "
++                  "size requested=%d.\n",
++                  __func__, ha->host_no, ha->instance,
++                  sizeof(Scsi_Device));)
++              goto fc_scsi_passthru_done;
++      }
++
++      /* clear ioctl_mem to be used */
++      memset(ha->ioctl_mem, 0, ha->ioctl_mem_size);
++
++      ret = verify_area(VERIFY_READ, (void *)pext->RequestAdr,
++          sizeof(EXT_FC_SCSI_PASSTHRU));
++      if (ret) {
++              pext->Status = EXT_STATUS_COPY_ERR;
++              DEBUG9_10(printk(
++                  "%s(%ld): inst=%ld ERROR verify READ req buf.\n",
++                  __func__, ha->host_no, ha->instance);)
++              atomic_set(&sp->ref_count, 0);
++              add_to_free_queue (ha, sp);
++
++              goto fc_scsi_passthru_done;
++      }
++
++      if (pext->ResponseLen > ha->ioctl_mem_size) {
++              if (qla2x00_get_new_ioctl_dma_mem(ha, pext->ResponseLen) !=
++                  QL_STATUS_SUCCESS) {
++
++                      DEBUG9_10(printk("%s(%ld): inst=%ld ERROR cannot alloc "
++                          "requested DMA buffer size %x.\n",
++                          __func__, ha->host_no, ha->instance,
++                          pext->ResponseLen);)
++
++                      pext->Status = EXT_STATUS_NO_MEMORY;
++                      atomic_set(&sp->ref_count, 0);
++                      add_to_free_queue (ha, sp);
++                      goto fc_scsi_passthru_done;
++              }
++      }
++
++      /* Copy request buffer */
++      usr_temp   = (uint8_t *)pext->RequestAdr;
++      kernel_tmp = (uint8_t *)pfc_scsi_pass;
++      ret = copy_from_user(kernel_tmp, usr_temp,
++          sizeof(EXT_FC_SCSI_PASSTHRU));
++      if (ret) {
++              pext->Status = EXT_STATUS_COPY_ERR;
++              DEBUG9_10(printk(
++                  "%s(%ld): inst=%ld ERROR copy req buf ret=%d\n",
++                  __func__, ha->host_no, ha->instance, ret);)
++              atomic_set(&sp->ref_count, 0);
++              add_to_free_queue (ha, sp);
++
++              goto fc_scsi_passthru_done;
++      }
++
++      if (pfc_scsi_pass->FCScsiAddr.DestType != EXT_DEF_DESTTYPE_WWPN) {
++              pext->Status = EXT_STATUS_DEV_NOT_FOUND;
++              DEBUG9_10(printk("%s(%ld): inst=%ld ERROR -wrong Dest type. \n",
++                  __func__, ha->host_no, ha->instance);)
++              ret = EXT_STATUS_ERR;
++              atomic_set(&sp->ref_count, 0);
++              add_to_free_queue (ha, sp);
++              goto fc_scsi_passthru_done;
++      }
++
++      fcport = NULL;
++      fclun = NULL;
++      port_found = lun_found = 0;
++      list_for_each(fcpl, &ha->fcports) {
++              fcport = list_entry(fcpl, fc_port_t, list);
++ 
++              if (memcmp(fcport->port_name,
++                  pfc_scsi_pass->FCScsiAddr.DestAddr.WWPN, 8) != 0) {
++                      continue;
++
++              }
++              port_found++;
++ 
++              list_for_each(fcll, &fcport->fcluns) {
++                      fclun = list_entry(fcll, fc_lun_t, list);
++
++                      if (fclun->lun == pfc_scsi_pass->FCScsiAddr.Lun) {
++                              /* Found the right LUN */
++                              lun_found++;
++                              break;
++                      }
++              }
++              break;
++      }
++
++      if (!port_found) {
++              pext->Status = EXT_STATUS_DEV_NOT_FOUND;
++              DEBUG9_10(printk("%s(%ld): inst=%ld FC AddrFormat - DID NOT "
++                  "FIND Port matching WWPN.\n",
++                  __func__, ha->host_no, ha->instance);)
++              atomic_set(&sp->ref_count, 0);
++              add_to_free_queue (ha, sp);
++              goto fc_scsi_passthru_done;
++      }
++
++      /* v5.21b9 - use a temporary fclun */
++      if (!lun_found) {
++              fclun = &temp_fclun;
++              fclun->fcport = fcport;
++              fclun->lun = pfc_scsi_pass->FCScsiAddr.Lun;
++              fclun->flags = 0;
++      }
++
++      /* set target coordinates */
++      pfc_scsi_cmd->device->id = 0xff; /* not used. just put something there. */
++      pfc_scsi_cmd->device->lun = pfc_scsi_pass->FCScsiAddr.Lun;
++
++      DEBUG9(printk("%s(%ld): inst=%ld cmd for loopid=%04x L=%04x "
++          "WWPN=%02x%02x%02x%02x%02x%02x%02x%02x.\n",
++          __func__, ha->host_no, ha->instance, fclun->fcport->loop_id,
++          pfc_scsi_cmd->device->lun,
++          pfc_scsi_pass->FCScsiAddr.DestAddr.WWPN[0],
++          pfc_scsi_pass->FCScsiAddr.DestAddr.WWPN[1],
++          pfc_scsi_pass->FCScsiAddr.DestAddr.WWPN[2],
++          pfc_scsi_pass->FCScsiAddr.DestAddr.WWPN[3],
++          pfc_scsi_pass->FCScsiAddr.DestAddr.WWPN[4],
++          pfc_scsi_pass->FCScsiAddr.DestAddr.WWPN[5],
++          pfc_scsi_pass->FCScsiAddr.DestAddr.WWPN[6],
++          pfc_scsi_pass->FCScsiAddr.DestAddr.WWPN[7]);)
++
++      if (pfc_scsi_pass->CdbLength == 6) {
++              sp->cmd_length = 6;
++              pfc_scsi_cmd->cmd_len = 6;
++
++      } else if (pfc_scsi_pass->CdbLength == 0x0A) {
++              sp->cmd_length = 0x0A;
++              pfc_scsi_cmd->cmd_len = 0x0A;
++
++      } else if (pfc_scsi_pass->CdbLength == 0x0C) {
++              sp->cmd_length = 0x0C;
++              pfc_scsi_cmd->cmd_len = 0x0C;
++
++      } else if (pfc_scsi_pass->CdbLength == 0x10) {
++              sp->cmd_length = 0x10;
++              pfc_scsi_cmd->cmd_len = 0x10;
++      } else {
++              printk(KERN_WARNING
++                  "qla2x00_ioctl: FC_SCSI_PASSTHRU Unknown Cdb Length=%x.\n",
++                  pfc_scsi_pass->CdbLength);
++              pext->Status = EXT_STATUS_INVALID_PARAM;
++              atomic_set(&sp->ref_count, 0);
++              add_to_free_queue (ha, sp);
++
++              goto fc_scsi_passthru_done;
++      }
++
++      memcpy(pfc_scsi_cmd->data_cmnd, pfc_scsi_pass->Cdb,
++          pfc_scsi_cmd->cmd_len);
++      memcpy(pfc_scsi_cmd->cmnd, pfc_scsi_pass->Cdb,
++          pfc_scsi_cmd->cmd_len);
++
++      DEBUG9(printk("%s Dump of cdb buffer:\n", __func__);)
++      DEBUG9(qla2x00_dump_buffer((uint8_t *)&pfc_scsi_cmd->data_cmnd[0], 16);)
++
++      pfc_scsi_cmd->device->host = ha->host;
++      sp->ha                = ha;
++      sp->cmd               = pfc_scsi_cmd;
++      sp->flags             = SRB_IOCTL;
++
++      /* set local fc_scsi_cmd's sp pointer to sp */
++      CMD_SP(pfc_scsi_cmd)  = (void *) sp;
++
++      /* mark this as a special delivery and collection command */
++      pfc_scsi_cmd->flags     = 0;
++      pfc_scsi_cmd->scsi_done = qla2x00_scsi_pt_done;
++
++      pfc_scsi_cmd->device               = pfc_scsi_device;
++      pfc_scsi_cmd->device->tagged_queue = 0;
++      pfc_scsi_cmd->use_sg               = 0; /* no ScatterGather */
++      pfc_scsi_cmd->request_bufflen      = pext->ResponseLen;
++      pfc_scsi_cmd->request_buffer       = ha->ioctl_mem;
++      pfc_scsi_cmd->timeout_per_command  = QLA_PT_CMD_TOV * HZ;
++
++      if (pfc_scsi_pass->Direction == EXT_DEF_SCSI_PASSTHRU_DATA_OUT) {
++              /* sending user data from pext->ResponseAdr to device */
++              ret = verify_area(VERIFY_READ, (void *)pext->ResponseAdr,
++                  pext->ResponseLen);
++              if (ret) {
++                      pext->Status = EXT_STATUS_COPY_ERR;
++                      DEBUG9_10(printk("%s(%ld): inst=%ld ERROR verify read "
++                          "ResponseAdr.\n",
++                          __func__, ha->host_no, ha->instance);)
++                      atomic_set(&sp->ref_count, 0);
++                      add_to_free_queue (ha, sp);
++
++                      goto fc_scsi_passthru_done;
++              }
++
++              pfc_scsi_cmd->sc_data_direction = SCSI_DATA_WRITE;
++              usr_temp   = (uint8_t *)pext->ResponseAdr;
++              kernel_tmp = (uint8_t *)ha->ioctl_mem;
++              ret = copy_from_user(kernel_tmp, usr_temp, pext->ResponseLen);
++              if (ret) {
++                      pext->Status = EXT_STATUS_COPY_ERR;
++                      DEBUG9_10(printk("%s(%ld): inst=%ld ERROR copy "
++                          "failed(%d) on rsp buf.\n",
++                          __func__, ha->host_no, ha->instance, ret);)
++                      atomic_set(&sp->ref_count, 0);
++                      add_to_free_queue (ha, sp);
++
++                      goto fc_scsi_passthru_done;
++              }
++      } else {
++              pfc_scsi_cmd->sc_data_direction = SCSI_DATA_READ;
++      }
++
++      tq = ha->ioctl->ioctl_tq;
++      lq = ha->ioctl->ioctl_lq;
++
++      if (fclun && tq && lq ) {
++              tq->olun[fclun->lun] = lq;
++              tq->ha = ha;
++
++              lq->fclun = fclun;
++              fcport = fclun->fcport;
++
++              sp->lun_queue = lq;
++              sp->tgt_queue = tq;
++              sp->fclun = fclun;
++      }
++
++      DEBUG9({
++              b = SCSI_BUS_32(pfc_scsi_cmd);
++              t = SCSI_TCN_32(pfc_scsi_cmd);
++              l = SCSI_LUN_32(pfc_scsi_cmd);
++      })
++      DEBUG9(printk("%s(%ld): ha instance=%ld tq=%p lq=%p "
++          "fclun=%p.\n",
++          __func__, ha->host_no, ha->instance, tq, lq, fclun);)
++      DEBUG9(printk("\tCDB=%02x %02x %02x %02x; b=%x t=%x l=%x.\n",
++          pfc_scsi_cmd->cmnd[0], pfc_scsi_cmd->cmnd[1], pfc_scsi_cmd->cmnd[2],
++          pfc_scsi_cmd->cmnd[3], b, t, l);)
++
++      /*
++       * Check the status of the port
++       */
++      if (qla2x00_check_port_status(ha, fcport) != QL_STATUS_SUCCESS) {
++              pext->Status = EXT_STATUS_DEV_NOT_FOUND;
++              atomic_set(&sp->ref_count, 0);
++              add_to_free_queue (ha, sp);
++              goto fc_scsi_passthru_done;
++      }
++
++      /* set flag to indicate IOCTL SCSI PassThru in progress */
++      ha->ioctl->SCSIPT_InProgress = 1;
++      ha->ioctl->ioctl_tov = (int)QLA_PT_CMD_DRV_TOV;
++
++      /* prepare for receiving completion. */
++      qla2x00_ioctl_sem_init(ha);
++      CMD_COMPL_STATUS(pfc_scsi_cmd) = (int) IOCTL_INVALID_STATUS;
++
++      /* send command to adapter */
++      DEBUG9(printk("%s(%ld): inst=%ld sending command.\n",
++          __func__, ha->host_no, ha->instance);)
++
++      add_to_pending_queue(ha, sp);
++
++      qla2x00_next(ha);
++
++      ha->ioctl->cmpl_timer.expires = jiffies + ha->ioctl->ioctl_tov * HZ;
++      add_timer(&ha->ioctl->cmpl_timer);
++
++      down(&ha->ioctl->cmpl_sem);
++
++      del_timer(&ha->ioctl->cmpl_timer);
++
++      if (ha->ioctl->SCSIPT_InProgress == 1) {
++
++              printk(KERN_WARNING
++                  "qla2x00: scsi%ld ERROR passthru command timeout.\n",
++                  ha->host_no);
++
++              pext->Status = EXT_STATUS_DEV_NOT_FOUND;
++              atomic_set(&sp->ref_count, 0);
++              add_to_free_queue (ha, sp);
++              goto fc_scsi_passthru_done;
++      }
++
++      if (CMD_COMPL_STATUS(pfc_scsi_cmd) == (int)IOCTL_INVALID_STATUS) {
++
++              DEBUG9(printk("%s(%ld): inst=%ld ERROR. cmd not completed.\n",
++                  __func__, ha->host_no, ha->instance);)
++
++              pext->Status = EXT_STATUS_ERR;
++              atomic_set(&sp->ref_count, 0);
++              add_to_free_queue (ha, sp);
++              goto fc_scsi_passthru_done;
++      }
++
++      switch (CMD_COMPL_STATUS(pfc_scsi_cmd)) {
++      case CS_INCOMPLETE:
++      case CS_ABORTED:
++      case CS_PORT_UNAVAILABLE:
++      case CS_PORT_LOGGED_OUT:
++      case CS_PORT_CONFIG_CHG:
++      case CS_PORT_BUSY:
++              DEBUG10(printk("%s(%ld): inst=%ld cs err = %x.\n",
++                  __func__, ha->host_no, ha->instance,
++                  CMD_COMPL_STATUS(pfc_scsi_cmd));)
++              pext->Status = EXT_STATUS_BUSY;
++              break;
++      }
++
++      if ((CMD_COMPL_STATUS(pfc_scsi_cmd) == CS_DATA_UNDERRUN) ||
++          (CMD_SCSI_STATUS(pfc_scsi_cmd) != 0))  {
++
++              /* have done the post function */
++              pext->Status       = EXT_STATUS_SCSI_STATUS;
++              /* The SDMAPI is only concerned with the low-order byte */
++              pext->DetailStatus = CMD_SCSI_STATUS(pfc_scsi_cmd) & 0xff;
++
++              DEBUG9_10(printk("%s(%ld): inst=%ld data underrun or scsi err. "
++                  "host status =0x%x, scsi status = 0x%x.\n",
++                  __func__, ha->host_no, ha->instance,
++                  CMD_COMPL_STATUS(pfc_scsi_cmd),
++                  CMD_SCSI_STATUS(pfc_scsi_cmd));)
++
++      } else if (CMD_COMPL_STATUS(pfc_scsi_cmd) != 0) {
++              DEBUG9_10(printk("%s(%ld): inst=%ld cs err=%x.\n",
++                  __func__, ha->host_no, ha->instance,
++                  CMD_COMPL_STATUS(pfc_scsi_cmd));)
++              pext->Status = EXT_STATUS_ERR;
++
++              goto fc_scsi_passthru_done;
++      }
++
++      /* Process completed command */
++      DEBUG9(printk("%s(%ld): inst=%ld done. host status=0x%x, "
++          "scsi status=0x%x.\n",
++          __func__, ha->host_no, ha->instance, CMD_COMPL_STATUS(pfc_scsi_cmd),
++          CMD_SCSI_STATUS(pfc_scsi_cmd));)
++
++      /* copy up structure to make sense data available to user */
++      pfc_scsi_pass->SenseLength = CMD_ACTUAL_SNSLEN(pfc_scsi_cmd);
++      if (CMD_ACTUAL_SNSLEN(pfc_scsi_cmd)) {
++              DEBUG9_10(printk("%s(%ld): inst=%ld sense[0]=%x sense[2]=%x.\n",
++                  __func__, ha->host_no, ha->instance,
++                  pfc_scsi_cmd->sense_buffer[0],
++                  pfc_scsi_cmd->sense_buffer[2]);)
++
++              for (i = 0; i < CMD_ACTUAL_SNSLEN(pfc_scsi_cmd); i++) {
++                      pfc_scsi_pass->SenseData[i] =
++                      pfc_scsi_cmd->sense_buffer[i];
++              }
++
++              ret = verify_area(VERIFY_WRITE, (void *)pext->RequestAdr,
++                  sizeof(EXT_FC_SCSI_PASSTHRU));
++              if (ret) {
++                      pext->Status = EXT_STATUS_COPY_ERR;
++                      DEBUG9_10(printk("%s(%ld): inst=%ld ERROR verify WRITE "
++                          "RequestAdr.\n",
++                          __func__, ha->host_no, ha->instance);)
++                      goto fc_scsi_passthru_done;
++              }
++
++              usr_temp = (uint8_t *)pext->RequestAdr;
++              kernel_tmp = (uint8_t *)pfc_scsi_pass;
++              ret = copy_to_user(usr_temp, kernel_tmp,
++                  sizeof(EXT_FC_SCSI_PASSTHRU));
++              if (ret) {
++                      pext->Status = EXT_STATUS_COPY_ERR;
++                      DEBUG9_10(printk("%s(%ld): inst=%ld ERROR copy sense "
++                          "buffer.\n",
++                          __func__, ha->host_no, ha->instance);)
++                      goto fc_scsi_passthru_done;
++              }
++      }
++
++      scsi_direction = pfc_scsi_pass->Direction;
++
++      if (scsi_direction == EXT_DEF_SCSI_PASSTHRU_DATA_IN) {
++
++              DEBUG9(printk("%s(%ld): inst=%ld copying data.\n",
++                  __func__, ha->host_no, ha->instance);)
++
++              /* getting device data and putting in pext->ResponseAdr */
++              ret = verify_area(VERIFY_WRITE, (void *)pext->ResponseAdr,
++                  pext->ResponseLen);
++              if (ret) {
++                      pext->Status = EXT_STATUS_COPY_ERR;
++
++                      DEBUG9_10(printk("%s(%ld): inst=%ld ERROR verify write "
++                          "ResponseAdr.\n",
++                          __func__, ha->host_no, ha->instance);)
++
++                      goto fc_scsi_passthru_done;
++              }
++
++              /* now copy up the READ data to user */
++              if ((CMD_COMPL_STATUS(pfc_scsi_cmd) == CS_DATA_UNDERRUN) &&
++                  (CMD_RESID_LEN(pfc_scsi_cmd))) {
++
++                      transfer_len = pext->ResponseLen -
++                          CMD_RESID_LEN(pfc_scsi_cmd);
++
++                      pext->ResponseLen = transfer_len;
++              } else {
++                      transfer_len = pext->ResponseLen;
++              }
++
++              usr_temp = (uint8_t *)pext->ResponseAdr;
++              kernel_tmp = (uint8_t *)ha->ioctl_mem;
++              ret = copy_to_user(usr_temp, kernel_tmp, transfer_len);
++              if (ret) {
++                      pext->Status = EXT_STATUS_COPY_ERR;
++                      DEBUG9_10(printk(
++                          "%s(%ld): inst=%ld ERROR copy rsp buf\n",
++                          __func__, ha->host_no, ha->instance);)
++                      goto fc_scsi_passthru_done;
++              }
++      }
++
++      DEBUG9(printk("%s(%ld): inst=%ld exiting.\n",
++          __func__, ha->host_no, ha->instance);)
++
++fc_scsi_passthru_done:
++
++      qla2x00_free_ioctl_scrap_mem(ha);
++      return (ret);
++}
++
++/*
++ * qla2x00_sc_scsi3_passthru
++ *    Handles EXT_SC_SCSI3_PASSTHRU subcommand.
++ *
++ * Input:
++ *    ha = adapter state pointer.
++ *    pext = EXT_IOCTL structure pointer.
++ *    mode = not used.
++ *
++ * Returns:
++ *    0 = success
++ *    others = errno value
++ *
++ * Context:
++ *    Kernel context.
++ */
++static int
++qla2x00_sc_scsi3_passthru(scsi_qla_host_t *ha, EXT_IOCTL *pext, int mode)
++{
++#define MAX_SCSI3_CDB_LEN     16
++
++      int                     ret = 0;
++      int                     found;
++      fc_lun_t                temp_fclun;
++      fc_lun_t                *fclun = NULL;
++      struct list_head        *fcpl;
++      fc_port_t               *fcport;
++      os_lun_t                *lq;
++      os_tgt_t                *tq;
++      srb_t                   *sp = NULL;
++      uint8_t                 *usr_temp, *kernel_tmp;
++      uint32_t                transfer_len;
++      uint32_t                i, b, t;
++      uint32_t                scsi_direction;
++
++      EXT_FC_SCSI_PASSTHRU    *pfc_scsi3_pass;
++
++      Scsi_Cmnd               *pscsi3_cmd;
++      Scsi_Device             *pscsi3_device;
++
++
++      DEBUG9(printk("%s(%ld): inst=%ld entered.\n",
++          __func__, ha->host_no, ha->instance);)
++
++      if ((sp = qla2x00_get_new_sp(ha)) == NULL) {
++
++              DEBUG9_10(printk("%s(%ld): inst=%ld ERROR cannot alloc sp.\n",
++                  __func__, ha->host_no, ha->instance);)
++
++              pext->Status = EXT_STATUS_NO_MEMORY;
++              return (ret);
++      }
++
++      if (qla2x00_get_ioctl_scrap_mem(ha, (void **)&pfc_scsi3_pass,
++          sizeof(EXT_FC_SCSI_PASSTHRU))) {
++              /* not enough memory */
++              pext->Status = EXT_STATUS_NO_MEMORY;
++              DEBUG9_10(printk("%s(%ld): inst=%ld scrap not big enough. "
++                  "size requested=%d.\n",
++                  __func__, ha->host_no, ha->instance,
++                  sizeof(EXT_FC_SCSI_PASSTHRU));)
++              return (ret);
++      }
++
++      if (qla2x00_get_ioctl_scrap_mem(ha, (void **)&pscsi3_cmd,
++          sizeof(Scsi_Cmnd))) {
++              /* not enough memory */
++              pext->Status = EXT_STATUS_NO_MEMORY;
++              DEBUG9_10(printk("%s(%ld): inst=%ld scrap not big enough. "
++                  "size requested=%d.\n",
++                  __func__, ha->host_no, ha->instance,
++                  sizeof(Scsi_Cmnd));)
++              goto scsi3_passthru_done;
++      }
++
++      if (qla2x00_get_ioctl_scrap_mem(ha, (void **)&pscsi3_device,
++          sizeof(Scsi_Device))) {
++              /* not enough memory */
++              pext->Status = EXT_STATUS_NO_MEMORY;
++              DEBUG9_10(printk("%s(%ld): inst=%ld scrap not big enough. "
++                  "size requested=%d.\n",
++                  __func__, ha->host_no, ha->instance,
++                  sizeof(Scsi_Device));)
++              goto scsi3_passthru_done;
++      }
++
++      /* clear ioctl_mem to be used */
++      memset(ha->ioctl_mem, 0, ha->ioctl_mem_size);
++
++      ret = verify_area(VERIFY_READ, (void *)pext->RequestAdr,
++          sizeof(EXT_FC_SCSI_PASSTHRU));
++      if (ret) {
++              pext->Status = EXT_STATUS_COPY_ERR;
++              DEBUG9_10(printk("%s(%ld): inst=%ld ERROR verify READ "
++                  "req buf.\n", __func__, ha->host_no, ha->instance);)
++              atomic_set(&sp->ref_count, 0);
++              add_to_free_queue (ha, sp);
++              goto scsi3_passthru_done;
++      }
++
++      if (pext->ResponseLen > ha->ioctl_mem_size) {
++              if (qla2x00_get_new_ioctl_dma_mem(ha, pext->ResponseLen) !=
++                  QL_STATUS_SUCCESS) {
++
++                      DEBUG9_10(printk("%s(%ld): inst=%ld ERROR cannot "
++                          "alloc requested DMA buffer size=%x.\n",
++                          __func__, ha->host_no, ha->instance,
++                          pext->ResponseLen);)
++
++                      pext->Status = EXT_STATUS_NO_MEMORY;
++                      atomic_set(&sp->ref_count, 0);
++                      add_to_free_queue (ha, sp);
++                      goto scsi3_passthru_done;
++              }
++      }
++
++      /* Copy request buffer */
++      usr_temp   = (uint8_t *)pext->RequestAdr;
++      kernel_tmp = (uint8_t *)pfc_scsi3_pass;
++      ret = copy_from_user(kernel_tmp, usr_temp,
++          sizeof(EXT_FC_SCSI_PASSTHRU));
++      if (ret) {
++              pext->Status = EXT_STATUS_COPY_ERR;
++              DEBUG9_10(printk(
++                  "%s(%ld): inst=%ld ERROR copy req buf ret=%d\n",
++                  __func__, ha->host_no, ha->instance, ret);)
++              atomic_set(&sp->ref_count, 0);
++              add_to_free_queue (ha, sp);
++              goto scsi3_passthru_done;
++      }
++
++      if (pfc_scsi3_pass->FCScsiAddr.DestType != EXT_DEF_DESTTYPE_WWPN) {
++              pext->Status = EXT_STATUS_DEV_NOT_FOUND;
++              DEBUG9_10(printk("%s(%ld): inst=%ld ERROR - wrong Dest type.\n",
++                  __func__, ha->host_no, ha->instance);)
++              ret = EXT_STATUS_ERR;
++              atomic_set(&sp->ref_count, 0);
++              add_to_free_queue (ha, sp);
++
++              goto scsi3_passthru_done;
++      }
++
++      /*
++       * For this ioctl command we always assume all 16 bytes are
++       * initialized.
++       */
++      if (pfc_scsi3_pass->CdbLength != MAX_SCSI3_CDB_LEN) {
++              pext->Status = EXT_STATUS_INVALID_PARAM;
++              DEBUG9_10(printk("%s(%ld): inst=%ld ERROR -wrong Cdb Len %d.\n",
++                  __func__, ha->host_no, ha->instance,
++                  pfc_scsi3_pass->CdbLength);)
++              atomic_set(&sp->ref_count, 0);
++              add_to_free_queue (ha, sp);
++              goto scsi3_passthru_done;
++      }
++
++      fcport = NULL;
++      found = 0;
++      list_for_each(fcpl, &ha->fcports) {
++              fcport = list_entry(fcpl, fc_port_t, list);
++
++              if (memcmp(fcport->port_name,
++                  pfc_scsi3_pass->FCScsiAddr.DestAddr.WWPN, 8) == 0) {
++                      found++;
++                      break;
++              }
++      }
++      if (!found) {
++              pext->Status = EXT_STATUS_DEV_NOT_FOUND;
++
++              DEBUG9_10(printk("%s(%ld): inst=%ld DID NOT FIND Port for WWPN "
++                  "%02x%02x%02x%02x%02x%02x%02x%02x.\n",
++                  __func__, ha->host_no, ha->instance,
++                  pfc_scsi3_pass->FCScsiAddr.DestAddr.WWPN[0],
++                  pfc_scsi3_pass->FCScsiAddr.DestAddr.WWPN[1],
++                  pfc_scsi3_pass->FCScsiAddr.DestAddr.WWPN[2],
++                  pfc_scsi3_pass->FCScsiAddr.DestAddr.WWPN[3],
++                  pfc_scsi3_pass->FCScsiAddr.DestAddr.WWPN[4],
++                  pfc_scsi3_pass->FCScsiAddr.DestAddr.WWPN[5],
++                  pfc_scsi3_pass->FCScsiAddr.DestAddr.WWPN[6],
++                  pfc_scsi3_pass->FCScsiAddr.DestAddr.WWPN[7]);)
++
++              atomic_set(&sp->ref_count, 0);
++              add_to_free_queue (ha, sp);
++
++              goto scsi3_passthru_done;
++      }
++
++      /* Use a temporary fclun to send out the command. */
++      fclun = &temp_fclun;
++      fclun->fcport = fcport;
++      fclun->lun = pfc_scsi3_pass->FCScsiAddr.Lun;
++      fclun->flags = 0;
++
++      /* set target coordinates */
++      pscsi3_cmd->device->id = 0xff;  /* not used. just put something there. */
++      pscsi3_cmd->device->lun = pfc_scsi3_pass->FCScsiAddr.Lun;
++
++      DEBUG9(printk("%s(%ld): inst=%ld cmd for loopid=%04x L=%04x "
++          "WWPN=%02x%02x%02x%02x%02x%02x%02x%02x.\n",
++          __func__, ha->host_no, ha->instance,
++          fclun->fcport->loop_id, pscsi3_cmd->device->lun,
++          pfc_scsi3_pass->FCScsiAddr.DestAddr.WWPN[0],
++          pfc_scsi3_pass->FCScsiAddr.DestAddr.WWPN[1],
++          pfc_scsi3_pass->FCScsiAddr.DestAddr.WWPN[2],
++          pfc_scsi3_pass->FCScsiAddr.DestAddr.WWPN[3],
++          pfc_scsi3_pass->FCScsiAddr.DestAddr.WWPN[4],
++          pfc_scsi3_pass->FCScsiAddr.DestAddr.WWPN[5],
++          pfc_scsi3_pass->FCScsiAddr.DestAddr.WWPN[6],
++          pfc_scsi3_pass->FCScsiAddr.DestAddr.WWPN[7]);)
++
++      sp->cmd_length = MAX_SCSI3_CDB_LEN;
++      pscsi3_cmd->cmd_len = MAX_SCSI3_CDB_LEN;
++
++      memcpy(pscsi3_cmd->data_cmnd, pfc_scsi3_pass->Cdb, pscsi3_cmd->cmd_len);
++      memcpy(pscsi3_cmd->cmnd, pfc_scsi3_pass->Cdb, pscsi3_cmd->cmd_len);
++
++      DEBUG9(printk("%s(%ld): inst=%ld cdb buffer dump:\n",
++          __func__, ha->host_no, ha->instance);)
++      DEBUG9(qla2x00_dump_buffer((uint8_t *)&pscsi3_cmd->data_cmnd[0], 16);)
++
++      pscsi3_cmd->device->host = ha->host;
++      sp->ha                = ha;
++      sp->cmd               = pscsi3_cmd;
++      sp->flags             = SRB_IOCTL;
++
++      /* set local scsi3_cmd's sp pointer to sp */
++      CMD_SP(pscsi3_cmd)    = (void *) sp;
++
++      /* mark this as a special delivery and collection command */
++      pscsi3_cmd->flags     = 0;
++      pscsi3_cmd->scsi_done = qla2x00_scsi_pt_done;
++
++      pscsi3_cmd->device               = pscsi3_device;
++      pscsi3_cmd->device->tagged_queue = 0;
++      pscsi3_cmd->use_sg               = 0; /* no ScatterGather */
++      pscsi3_cmd->request_bufflen      = pext->ResponseLen;
++      pscsi3_cmd->request_buffer       = ha->ioctl_mem;
++      pscsi3_cmd->timeout_per_command  = QLA_PT_CMD_TOV * HZ;
++
++      if (pfc_scsi3_pass->Direction == EXT_DEF_SCSI_PASSTHRU_DATA_OUT) {
++              /* sending user data from pext->ResponseAdr to device */
++              ret = verify_area(VERIFY_READ, (void *)pext->ResponseAdr,
++                  pext->ResponseLen);
++              if (ret) {
++                      pext->Status = EXT_STATUS_COPY_ERR;
++                      DEBUG9_10(printk("%s(%ld): inst=%ld ERROR verify read "
++                          "ResponseAdr.\n",
++                          __func__, ha->host_no, ha->instance);)
++                      atomic_set(&sp->ref_count, 0);
++                      add_to_free_queue (ha, sp);
++                      goto scsi3_passthru_done;
++              }
++
++              pscsi3_cmd->sc_data_direction = SCSI_DATA_WRITE;
++              usr_temp   = (uint8_t *)pext->ResponseAdr;
++              kernel_tmp = (uint8_t *)ha->ioctl_mem;
++              ret = copy_from_user(kernel_tmp, usr_temp, pext->ResponseLen);
++              if (ret) {
++                      pext->Status = EXT_STATUS_COPY_ERR;
++                      DEBUG9_10(printk("%s(%ld): inst=%ld ERROR copy rsp buf "
++                          "ret=%d.\n",
++                          __func__, ha->host_no, ha->instance, ret);)
++                      atomic_set(&sp->ref_count, 0);
++                      add_to_free_queue (ha, sp);
++                      goto scsi3_passthru_done;
++              }
++
++      } else {
++              pscsi3_cmd->sc_data_direction = SCSI_DATA_READ;
++      }
++
++      /* Use temporary LU and TGT queue */
++      tq = ha->ioctl->ioctl_tq;
++      lq = ha->ioctl->ioctl_lq;
++
++      b = SCSI_BUS_32(pscsi3_cmd);
++      t = SCSI_TCN_32(pscsi3_cmd);
++
++      DEBUG9(printk("%s(%ld): ha instance=%ld tq=%p lq=%p fclun=%p.\n",
++          __func__, ha->host_no, ha->instance,tq,lq,fclun); )
++      DEBUG9(printk("%s(%ld): CDB=%02x %02x %02x %02x; b=%x t=%x fclun=%x\n",
++          __func__, ha->host_no, pscsi3_cmd->cmnd[0], pscsi3_cmd->cmnd[1],
++          pscsi3_cmd->cmnd[2], pscsi3_cmd->cmnd[3], b, t,
++          SCSI_LUN_32(pscsi3_cmd));)
++
++      if (tq && lq) {
++              /*
++               * For now just save lq using the lower LUN byte value,
++               * even though this may not be the actual LUN number.
++               * Since we're only sending out passthru cmd one at a time,
++               * and only passthru is using FCP LUN format now, no need
++               * to change rest of driver just to decode the LUN.
++               */
++              tq->olun[fclun->lun & 0xff] = lq;
++
++              tq->ha = ha;
++              lq->fclun = fclun;
++              fcport = fclun->fcport;
++
++              sp->lun_queue = lq;
++              sp->tgt_queue = tq;
++              sp->fclun = fclun;
++      } else {
++              lq = NULL;
++              fcport = NULL;
++      }
++
++      /*
++       * Check the status of the port
++       */
++      if (qla2x00_check_port_status(ha, fcport) != QL_STATUS_SUCCESS) {
++
++              DEBUG9_10(printk("%s(%ld): inst=%ld port missing or loop down. "
++                  "fcport=%p timer=%d state=%d dpc=%lx.\n",
++                  __func__, ha->host_no, ha->instance, fcport,
++                  atomic_read(&ha->loop_down_timer), ha->loop_state,
++                  ha->dpc_flags);)
++
++              pext->Status = EXT_STATUS_DEV_NOT_FOUND;
++              atomic_set(&sp->ref_count, 0);
++              add_to_free_queue (ha, sp);
++              goto scsi3_passthru_done;
++      }
++
++      /* set flag to indicate IOCTL SCSI PassThru in progress */
++      ha->ioctl->SCSIPT_InProgress = 1;
++      ha->ioctl->ioctl_tov = (int)QLA_PT_CMD_DRV_TOV;
++
++      /* prepare for receiving completion. */
++      qla2x00_ioctl_sem_init(ha);
++      CMD_COMPL_STATUS(pscsi3_cmd) = (int) IOCTL_INVALID_STATUS;
++
++      /* send command to adapter */
++
++      /*add_to_cmd_queue(ha, lq, sp);*/
++      add_to_pending_queue(ha, sp);
++
++      /*qla2x00_next(ha, tq, lq);*/
++      qla2x00_next(ha);
++
++      ha->ioctl->cmpl_timer.expires = jiffies + ha->ioctl->ioctl_tov * HZ;
++      add_timer(&ha->ioctl->cmpl_timer);
++
++      down(&ha->ioctl->cmpl_sem);
++
++      del_timer(&ha->ioctl->cmpl_timer);
++
++      if (ha->ioctl->SCSIPT_InProgress == 1) {
++
++              printk(KERN_WARNING
++                  "qla2x00: inst=%ld scsi%ld ERROR PT command timeout.\n",
++                  ha->host_no, ha->instance);
++
++              pext->Status = EXT_STATUS_DEV_NOT_FOUND;
++              atomic_set(&sp->ref_count, 0);
++              add_to_free_queue (ha, sp);
++              goto scsi3_passthru_done;
++
++      }
++      if (CMD_COMPL_STATUS(pscsi3_cmd) == (int)IOCTL_INVALID_STATUS) {
++
++              DEBUG9(printk("%s(%ld): inst=%ld ERROR - cmd not completed.\n",
++                  __func__, ha->host_no, ha->instance);)
++
++              pext->Status = EXT_STATUS_ERR;
++              atomic_set(&sp->ref_count, 0);
++              add_to_free_queue (ha, sp);
++              goto scsi3_passthru_done;
++      }
++
++      switch (CMD_COMPL_STATUS(pscsi3_cmd)) {
++      case CS_INCOMPLETE:
++      case CS_ABORTED:
++      case CS_PORT_UNAVAILABLE:
++      case CS_PORT_LOGGED_OUT:
++      case CS_PORT_CONFIG_CHG:
++      case CS_PORT_BUSY:
++              DEBUG10(printk("%s(%ld): inst=%ld cs err = %x.\n",
++                  __func__, ha->host_no, ha->instance,
++                  CMD_COMPL_STATUS(pscsi3_cmd));)
++              pext->Status = EXT_STATUS_BUSY;
++              break;
++      }
++
++      if ((CMD_COMPL_STATUS(pscsi3_cmd) == CS_DATA_UNDERRUN) ||
++          (CMD_SCSI_STATUS(pscsi3_cmd) != 0)) {
++
++              /* have done the post function */
++              pext->Status       = EXT_STATUS_SCSI_STATUS;
++              pext->DetailStatus = CMD_SCSI_STATUS(pscsi3_cmd) & 0xff;
++
++              DEBUG9_10(printk("%s(%ld): inst=%ld data underrun or scsi err. "
++                  "host status =0x%x, scsi status = 0x%x.\n",
++                  __func__, ha->host_no, ha->instance,
++                  CMD_COMPL_STATUS(pscsi3_cmd), CMD_SCSI_STATUS(pscsi3_cmd));)
++
++      } else if (CMD_COMPL_STATUS(pscsi3_cmd) != 0) {
++              DEBUG9_10(printk("%s(%ld): inst=%ld cs err = %x.\n",
++                  __func__, ha->host_no, ha->instance,
++                  CMD_COMPL_STATUS(pscsi3_cmd));)
++              pext->Status = EXT_STATUS_ERR;
++              goto scsi3_passthru_done;
++      }
++
++      /* Process completed command */
++      DEBUG9(printk("%s(%ld): inst=%ld done. host status=0x%x, "
++          "scsi status=0x%x.\n",
++          __func__, ha->host_no, ha->instance, CMD_COMPL_STATUS(pscsi3_cmd),
++          CMD_SCSI_STATUS(pscsi3_cmd));)
++
++      /* copy up structure to make sense data available to user */
++      pfc_scsi3_pass->SenseLength = CMD_ACTUAL_SNSLEN(pscsi3_cmd);
++      if (CMD_ACTUAL_SNSLEN(pscsi3_cmd)) {
++              DEBUG9_10(printk("%s(%ld): inst=%ld sense[0]=%x sense[2]=%x.\n",
++                  __func__, ha->host_no, ha->instance,
++                  pscsi3_cmd->sense_buffer[0],
++                  pscsi3_cmd->sense_buffer[2]);)
++
++              for (i = 0; i < CMD_ACTUAL_SNSLEN(pscsi3_cmd); i++) {
++                      pfc_scsi3_pass->SenseData[i] =
++                          pscsi3_cmd->sense_buffer[i];
++              }
++
++              ret = verify_area(VERIFY_WRITE, (void *)pext->RequestAdr,
++                  sizeof(EXT_FC_SCSI_PASSTHRU));
++              if (ret) {
++                      pext->Status = EXT_STATUS_COPY_ERR;
++                      DEBUG9_10(printk("%s(%ld): inst=%ld ERROR verify WRITE "
++                          "RequestAdr.\n",
++                          __func__, ha->host_no, ha->instance);)
++                      goto scsi3_passthru_done;
++              }
++
++              usr_temp = (uint8_t *)pext->RequestAdr;
++              kernel_tmp = (uint8_t *)pfc_scsi3_pass;
++              ret = copy_to_user(usr_temp, kernel_tmp,
++                  sizeof(EXT_FC_SCSI_PASSTHRU));
++              if (ret) {
++                      pext->Status = EXT_STATUS_COPY_ERR;
++                      DEBUG9_10(printk("%s(%ld): inst=%ld ERROR copy sense "
++                          "buffer.\n",
++                          __func__, ha->host_no, ha->instance);)
++                      goto scsi3_passthru_done;
++              }
++      }
++
++      scsi_direction = pfc_scsi3_pass->Direction;
++
++      if (scsi_direction == EXT_DEF_SCSI_PASSTHRU_DATA_IN) {
++
++              DEBUG9(printk("%s(%ld): inst=%ld copying data.\n",
++                  __func__, ha->host_no, ha->instance);)
++
++              /* getting device data and putting in pext->ResponseAdr */
++              ret = verify_area(VERIFY_WRITE, (void *)pext->ResponseAdr,
++                  pext->ResponseLen);
++              if (ret) {
++                      pext->Status = EXT_STATUS_COPY_ERR;
++
++                      DEBUG9_10(printk("%s(%ld): inst=%ld ERROR verify write "
++                          "ResponseAdr.\n",
++                          __func__, ha->host_no, ha->instance);)
++
++                      goto scsi3_passthru_done;
++              }
++
++              /* now copy up the READ data to user */
++              if ((CMD_COMPL_STATUS(pscsi3_cmd) == CS_DATA_UNDERRUN) &&
++                  (CMD_RESID_LEN(pscsi3_cmd))) {
++
++                      transfer_len = pext->ResponseLen -
++                          CMD_RESID_LEN(pscsi3_cmd);
++
++                      pext->ResponseLen = transfer_len;
++              } else {
++                      transfer_len = pext->ResponseLen;
++              }
++
++              usr_temp = (uint8_t *)pext->ResponseAdr;
++              kernel_tmp = (uint8_t *)ha->ioctl_mem;
++              ret = copy_to_user(usr_temp, kernel_tmp, transfer_len);
++              if (ret) {
++                      pext->Status = EXT_STATUS_COPY_ERR;
++                      DEBUG9_10(printk(
++                          "%s(%ld): inst=%ld ERROR copy rsp buf\n",
++                          __func__, ha->host_no, ha->instance);)
++                      goto scsi3_passthru_done;
++              }
++      }
++
++      DEBUG9(printk("%s(%ld): inst=%ld exiting.\n",
++          __func__, ha->host_no, ha->instance);)
++
++scsi3_passthru_done:
++
++      qla2x00_free_ioctl_scrap_mem(ha);
++      return (ret);
++}
++
++/*
++ * qla2x00_send_els_rnid
++ *    IOCTL to send extended link service RNID command to a target.
++ *
++ * Input:
++ *    ha = adapter state pointer.
++ *    pext = User space CT arguments pointer.
++ *    mode = flags.
++ *
++ * Returns:
++ *    0 = success
++ *    others = errno value
++ *
++ * Context:
++ *    Kernel context.
++ */
++static int
++qla2x00_send_els_rnid(scsi_qla_host_t *ha, EXT_IOCTL *pext, int mode)
++{
++#define TGT_DEV        1
++#define HOST_DEV       2
++
++      EXT_RNID_REQ    *tmp_rnid;
++      int             ret = 0;
++      uint8_t         dev_found = 0;
++      uint16_t        dev_loop_id = 0;
++      uint16_t        mb[MAILBOX_REGISTER_COUNT];
++      uint32_t        copy_len;
++      struct list_head        *fcpl;
++      fc_port_t       *fcport;
++      int             found;
++      struct list_head *fcil;
++      fc_initiator_t  *fcinitiator;
++
++      DEBUG9(printk("%s(%ld): inst=%ld entered.\n",
++          __func__, ha->host_no, ha->instance);)
++
++      if (ha->ioctl_mem_size < SEND_RNID_RSP_SIZE) {
++              if (qla2x00_get_new_ioctl_dma_mem(ha,
++                  SEND_RNID_RSP_SIZE) != QL_STATUS_SUCCESS) {
++
++                      DEBUG9_10(printk("%s(%ld): inst=%ld ERROR cannot alloc "
++                          "DMA buffer. size=%x.\n",
++                          __func__, ha->host_no, ha->instance,
++                          SEND_RNID_RSP_SIZE);)
++
++                      pext->Status = EXT_STATUS_NO_MEMORY;
++                      return (ret);
++              }
++      }
++
++      if (pext->RequestLen != sizeof(EXT_RNID_REQ)) {
++              /* parameter error */
++              DEBUG9_10(printk("%s(%ld): inst=%ld invalid req length %d.\n",
++                  __func__, ha->host_no, ha->instance, pext->RequestLen);)
++              pext->Status = EXT_STATUS_INVALID_PARAM;
++              return (ret);
++      }
++
++      ret = verify_area(VERIFY_READ, (void *)pext->RequestAdr,
++          pext->RequestLen);
++
++      if (ret != 0) {
++              pext->Status = EXT_STATUS_COPY_ERR;
++              DEBUG9_10(printk(
++                  "%s(%ld): inst=%ld req buf verify READ FAILED\n",
++                  __func__, ha->host_no, ha->instance);)
++              return (ret);
++      }
++
++      DEBUG9(printk("%s(%ld): inst=%ld req buf verified. Copying req data.\n",
++          __func__, ha->host_no, ha->instance);)
++
++      if (qla2x00_get_ioctl_scrap_mem(ha, (void **)&tmp_rnid,
++          sizeof(EXT_RNID_REQ))) {
++              /* not enough memory */
++              pext->Status = EXT_STATUS_NO_MEMORY;
++              DEBUG9_10(printk("%s(%ld): inst=%ld scrap not big enough. "
++                  "size requested=%d.\n",
++                  __func__, ha->host_no, ha->instance,
++                  sizeof(EXT_RNID_REQ));)
++              return (ret);
++      }
++
++      ret = copy_from_user(tmp_rnid, pext->RequestAdr, pext->RequestLen);
++      if (ret) {
++              pext->Status = EXT_STATUS_COPY_ERR;
++              DEBUG9_10(printk(
++                  "%s(%ld): inst=%ld ERROR copy req buf ret=%d\n",
++                  __func__, ha->host_no, ha->instance, ret);)
++              qla2x00_free_ioctl_scrap_mem(ha);
++              return (ret);
++      }
++
++      /* Find loop ID of the device */
++      fcinitiator = NULL;
++      switch (tmp_rnid->Addr.Type) {
++      case EXT_DEF_TYPE_WWNN:
++
++              DEBUG9(printk("%s(%ld): inst=%ld got node name.\n",
++                  __func__, ha->host_no, ha->instance);)
++
++              fcport = NULL;
++              list_for_each(fcpl, &ha->fcports) {
++                      fcport = list_entry(fcpl, fc_port_t, list);
++
++                      /* if removed or missing */
++                      if (atomic_read(&fcport->state) == FC_ONLINE &&
++                          memcmp((void *)tmp_rnid->Addr.FcAddr.WWNN,
++                          (void *)fcport->node_name,
++                          EXT_DEF_WWN_NAME_SIZE) == 0) {
++                              break;
++                      }
++              }
++              if (fcport != NULL) {
++                      DEBUG9(printk("%s(%ld): inst=%ld found tgt dev; "
++                          "loop_id=%x.\n",
++                          __func__, ha->host_no, ha->instance,
++                          fcport->loop_id);)
++
++                      dev_found = TGT_DEV;
++                      dev_loop_id = fcport->loop_id;
++                      break;
++              }
++
++              found = 0;
++              fcinitiator = NULL;
++              list_for_each(fcil, &ha->fcinitiators) {
++                      fcinitiator = list_entry(fcil, fc_initiator_t, list);
++
++                      if (memcmp(tmp_rnid->Addr.FcAddr.WWNN,
++                               fcinitiator->node_name,
++                               EXT_DEF_WWN_NAME_SIZE) == 0 &&
++                              fcinitiator->d_id.b24 != 0) {
++
++                              found++;
++                              break;
++                      }
++              }
++              if (found) {
++                      DEBUG9(printk("%s(%ld): inst=%ld found host device; "
++                          "loop_id=%x.\n",
++                          __func__, ha->host_no, ha->instance,
++                          fcinitiator->loop_id);)
++
++                      dev_found = HOST_DEV;
++                      dev_loop_id = fcinitiator->loop_id;
++                      break;
++              }
++
++              break;
++
++      case EXT_DEF_TYPE_WWPN:
++              DEBUG9(printk("%s(%ld): inst=%ld got port name.\n",
++                  __func__, ha->host_no, ha->instance);)
++
++              fcport = NULL;
++              list_for_each(fcpl, &ha->fcports) {
++                      fcport = list_entry(fcpl, fc_port_t, list);
++
++                      /* if removed or missing */
++                      if (atomic_read(&fcport->state) == FC_ONLINE &&
++                          memcmp((void *)tmp_rnid->Addr.FcAddr.WWPN,
++                          (void *)fcport->port_name,
++                          EXT_DEF_WWN_NAME_SIZE) == 0) {
++                              break;
++                      }
++              }
++              if (fcport != NULL) {
++                      DEBUG9(printk("%s(%ld): inst=%ld found tgt dev; "
++                          "loop_id=%x.\n",
++                          __func__, ha->host_no, ha->instance,
++                          fcport->loop_id);)
++
++                      dev_found = TGT_DEV; /* target device */
++                      dev_loop_id = fcport->loop_id;
++                      break;
++              }
++
++              found = 0;
++              fcinitiator = NULL;
++              list_for_each(fcil, &ha->fcinitiators) {
++                      fcinitiator = list_entry(fcil, fc_initiator_t, list);
++
++                      if (memcmp(tmp_rnid->Addr.FcAddr.WWPN,
++                               fcinitiator->port_name,
++                               EXT_DEF_WWN_NAME_SIZE) == 0 &&
++                              fcinitiator->d_id.b24 != 0) {
++
++                              found++;
++                              break;
++                      }
++              }
++              if (found) {
++                      DEBUG9(printk("%s(%ld): inst=%ld found host device; "
++                          "loop_id=%x.\n",
++                          __func__, ha->host_no, ha->instance,
++                          fcinitiator->loop_id);)
++
++                      dev_found = HOST_DEV;
++                      dev_loop_id = fcinitiator->loop_id;
++                      break;
++              }
++
++              break;
++
++      case EXT_DEF_TYPE_PORTID:
++              DEBUG9(printk("%s(%ld): inst=%ld got port ID.\n",
++                  __func__, ha->host_no, ha->instance);)
++
++              /* PORTID bytes entered must already be big endian */
++              fcport = NULL;
++              list_for_each(fcpl, &ha->fcports) {
++                      fcport = list_entry(fcpl, fc_port_t, list);
++
++                      /* if removed or missing */
++                      if (atomic_read(&fcport->state) == FC_ONLINE &&
++                          memcmp((void *)&tmp_rnid->Addr.FcAddr.Id[1],
++                          (void *)(fcport->d_id.r.d_id),
++                          EXT_DEF_PORTID_SIZE_ACTUAL) == 0) {
++                              break;
++                      }
++              }
++              if (fcport != NULL) {
++                      DEBUG9(printk("%s(%ld): inst=%ld found tgt dev; "
++                          "loop_id=%x.\n",
++                          __func__, ha->host_no, ha->instance,
++                          fcport->loop_id);)
++
++                      dev_found = TGT_DEV; /* target device */
++                      dev_loop_id = fcport->loop_id;
++                      break;
++              }
++
++              found = 0;
++              fcinitiator = NULL;
++              list_for_each(fcil, &ha->fcinitiators) {
++                      fcinitiator = list_entry(fcil, fc_initiator_t, list);
++
++                      if (memcmp(&tmp_rnid->Addr.FcAddr.Id[1],
++                              &fcinitiator->d_id,
++                              EXT_DEF_PORTID_SIZE_ACTUAL) == 0) {
++
++                              found++;
++                              break;
++                      }
++              }
++              if (found) {
++                      DEBUG9(printk("%s(%ld): inst=%ld found host device; "
++                          "loop_id=%x.\n",
++                          __func__, ha->host_no, ha->instance,
++                          fcinitiator->loop_id);)
++
++                      dev_found = HOST_DEV;
++                      dev_loop_id = fcinitiator->loop_id;
++                      break;
++              }
++
++              break;
++      default:
++              /* parameter error */
++              pext->Status = EXT_STATUS_INVALID_PARAM;
++              DEBUG9_10(printk("%s(%ld): inst=%ld invalid addressing type.\n",
++                  __func__, ha->host_no, ha->instance);)
++              qla2x00_free_ioctl_scrap_mem(ha);
++              return (ret);
++      }
++
++      if (!dev_found ||
++          (dev_found == TGT_DEV && dev_loop_id > LAST_SNS_LOOP_ID)) {
++              /* No matching device or the target device is not
++               * configured; just return error.
++               */
++              pext->Status = EXT_STATUS_DEV_NOT_FOUND;
++              DEBUG9_10(printk(
++                  "%s(%ld): inst=%ld device not found. dev_found=%d "
++                  "dev_loop_id=%x.\n",
++                  __func__, ha->host_no, ha->instance, dev_found,
++                  dev_loop_id);)
++              qla2x00_free_ioctl_scrap_mem(ha);
++              return (ret);
++      }
++
++      /* check on loop down */
++      if (ha->loop_state != LOOP_READY || 
++          test_bit(CFG_ACTIVE, &ha->cfg_flags) ||
++          (test_bit(ABORT_ISP_ACTIVE, &ha->dpc_flags)) ||
++          ABORTS_ACTIVE || ha->dpc_active) {
++
++              pext->Status = EXT_STATUS_BUSY;
++              DEBUG9_10(printk("%s(%ld): inst=%ld loop not ready.\n",
++                  __func__, ha->host_no, ha->instance);)
++
++              qla2x00_free_ioctl_scrap_mem(ha);
++              return (ret);
++      }
++
++      /* Check whether we need to login first. */
++      if (dev_found == HOST_DEV && dev_loop_id > LAST_SNS_LOOP_ID) {
++              /*
++               * Search for a usable loop ID before try to login to it.
++               */
++              if ((dev_loop_id &= ~PORT_LOST_ID) > LAST_SNS_LOOP_ID) {
++                      /* Just start searching from first possible ID. */
++                      dev_loop_id = ha->min_external_loopid;
++              }
++              for (;;) {
++                      if (ha->fabricid[dev_loop_id].in_use == TRUE) {
++                              dev_loop_id++;
++                      } else {
++                              ha->fabricid[dev_loop_id].in_use = TRUE;
++                              break;
++                      }
++              }
++
++              DEBUG9(printk("%s(%ld): inst=%ld try relogin to host dev; "
++                  "dev_loop_id=%x.\n",
++                  __func__, ha->host_no, ha->instance, dev_loop_id);)
++
++              for (;;) {
++                      if (dev_loop_id > LAST_SNS_LOOP_ID) {
++                              /* error */
++                              DEBUG10(printk("%s(%ld): inst=%ld "
++                                  "no valid loop_id for login.\n",
++                                  __func__, ha->host_no, ha->instance);)
++
++                              break;
++                      }
++
++                      qla2x00_login_fabric(ha, 
++                          dev_loop_id,
++                          fcinitiator->d_id.b.domain,
++                          fcinitiator->d_id.b.area,
++                          fcinitiator->d_id.b.al_pa,
++                          &mb[0], 0);
++
++                      if (mb[0] != MBS_CMD_CMP &&
++                          mb[0] != MBS_PORT_ID_IN_USE &&
++                          mb[0] != MBS_LOOP_ID_IN_USE) {
++
++                              DEBUG10(printk("%s(%ld): inst=%ld "
++                                  "ERROR login mb[0]=%x mb[1]=%x.\n",
++                                  __func__, ha->host_no, ha->instance,
++                                  mb[0], mb[1]);)
++                              break;
++                      }
++
++                      if (mb[0] == MBS_CMD_CMP) {
++                              DEBUG9(printk("%s(%ld): inst=%ld host login "
++                                  "success; loop_id=%x.\n",
++                                  __func__, ha->host_no, ha->instance,
++                                  dev_loop_id);)
++
++                              fcinitiator->loop_id = dev_loop_id;
++                              break;
++                      } else if (mb[0] == MBS_PORT_ID_IN_USE) {
++                              ha->fabricid[dev_loop_id].in_use = FALSE;
++                              dev_loop_id = mb[1];
++
++                              DEBUG9(printk("%s(%ld): inst=%ld "
++                                  "port %02x%02x%02x using loop id=0x%04x.\n",
++                                  __func__, ha->host_no, ha->instance,
++                                  fcinitiator->d_id.b.domain,
++                                  fcinitiator->d_id.b.area,
++                                  fcinitiator->d_id.b.al_pa,
++                                  dev_loop_id);)
++
++                              if (dev_loop_id <= LAST_SNS_LOOP_ID)
++                                      ha->fabricid[dev_loop_id].in_use = TRUE;
++                              else
++                                      /* Error */
++                                      break;
++
++                      } else if (mb[0] == MBS_LOOP_ID_IN_USE) {
++                              /* Search for another usable loop_id */
++                              dev_loop_id++;
++                              while (ha->fabricid[dev_loop_id].in_use) {
++                                      if (dev_loop_id++ > LAST_SNS_LOOP_ID) {
++                                              /* Error */
++                                              break;
++                                      }
++                              }
++
++                              if (dev_loop_id <= LAST_SNS_LOOP_ID) {
++                                      DEBUG9(printk(
++                                          "%s(%ld): inst=%ld previous loop "
++                                          "id in use. Retry with 0x%04x.\n",
++                                          __func__, ha->host_no, ha->instance,
++                                          dev_loop_id);)
++
++                                      ha->fabricid[dev_loop_id].in_use = TRUE;
++                              } else {
++                                      /* Error */
++                                      break;
++                              }
++                      }
++              }
++
++              if (mb[0] != MBS_CMD_CMP) {
++                      pext->Status = EXT_STATUS_ERR;
++                      DEBUG9_10(printk( "%s(%ld): inst=%ld login failed.\n",
++                          __func__, ha->host_no, ha->instance);)
++
++                      qla2x00_free_ioctl_scrap_mem(ha);
++                      return (ret);
++              }
++      }
++
++      /* Send command */
++      DEBUG9(printk("%s(%ld): inst=%ld sending rnid cmd.\n",
++          __func__, ha->host_no, ha->instance);)
++
++      ret = qla2x00_send_rnid_mbx(ha, dev_loop_id,
++          (uint8_t)tmp_rnid->DataFormat, ha->ioctl_mem_phys,
++          SEND_RNID_RSP_SIZE, &mb[0]);
++
++      if (ret != QLA2X00_SUCCESS) {
++              /* error */
++              pext->Status = EXT_STATUS_ERR;
++
++                DEBUG9_10(printk("%s(%ld): inst=%ld FAILED. rval = %x.\n",
++                    __func__, ha->host_no, ha->instance, mb[0]);)
++              qla2x00_free_ioctl_scrap_mem(ha);
++              return (ret);
++      }
++
++      DEBUG9(printk("%s(%ld): inst=%ld rnid cmd sent ok.\n",
++          __func__, ha->host_no, ha->instance);)
++
++      /* Copy the response */
++      copy_len = (pext->ResponseLen > SEND_RNID_RSP_SIZE) ?
++          SEND_RNID_RSP_SIZE : pext->ResponseLen;
++
++      ret = verify_area(VERIFY_WRITE, (void  *)pext->ResponseAdr,
++          copy_len);
++
++      if (ret != 0) {
++              pext->Status = EXT_STATUS_COPY_ERR;
++              DEBUG9_10(printk(
++                  "%s(%ld): inst=%ld rsp buf verify WRITE error\n",
++                  __func__, ha->host_no, ha->instance);)
++      } else {
++              ret = copy_to_user((uint8_t *)pext->ResponseAdr,
++                  (uint8_t *)ha->ioctl_mem, copy_len);
++              if (ret) {
++                      pext->Status = EXT_STATUS_COPY_ERR;
++                      DEBUG9_10(printk(
++                          "%s(%ld): inst=%ld ERROR copy rsp buf\n",
++                          __func__, ha->host_no, ha->instance);)
++                      qla2x00_free_ioctl_scrap_mem(ha);
++                      return (ret);
++              }
++
++              if (SEND_RNID_RSP_SIZE > pext->ResponseLen) {
++                      pext->Status = EXT_STATUS_DATA_OVERRUN;
++                      DEBUG9(printk("%s(%ld): inst=%ld data overrun. "
++                          "exiting normally.\n",
++                          __func__, ha->host_no, ha->instance);)
++              } else {
++                      pext->Status = EXT_STATUS_OK;
++                      DEBUG9(printk("%s(%ld): inst=%ld exiting normally.\n",
++                          __func__, ha->host_no, ha->instance);)
++              }
++              pext->ResponseLen = copy_len;
++      }
++
++      qla2x00_free_ioctl_scrap_mem(ha);
++      return (ret);
++}
++
++/*
++ * qla2x00_get_rnid_params
++ *    IOCTL to get RNID parameters of the adapter.
++ *
++ * Input:
++ *    ha = adapter state pointer.
++ *    pext = User space CT arguments pointer.
++ *    mode = flags.
++ *
++ * Returns:
++ *    0 = success
++ *    others = errno value
++ *
++ * Context:
++ *    Kernel context.
++ */
++static int
++qla2x00_get_rnid_params(scsi_qla_host_t *ha, EXT_IOCTL *pext, int mode)
++{
++      int             ret = 0;
++      int             tmp_rval = 0;
++      uint32_t        copy_len;
++      uint16_t        mb[MAILBOX_REGISTER_COUNT];
++
++      DEBUG9(printk("%s(%ld): inst=%ld entered.\n",
++          __func__, ha->host_no, ha->instance);)
++
++      /* check on loop down */
++      if (ha->loop_state != LOOP_READY || 
++          test_bit(CFG_ACTIVE, &ha->cfg_flags) ||
++          (test_bit(ABORT_ISP_ACTIVE, &ha->dpc_flags)) ||
++          ABORTS_ACTIVE || ha->dpc_active) {
++
++              pext->Status = EXT_STATUS_BUSY;
++              DEBUG9_10(printk("%s(%ld): inst=%ld loop not ready.\n",
++                  __func__, ha->host_no, ha->instance);)
++
++              return (ret);
++      }
++
++      /* Send command */
++      tmp_rval = qla2x00_get_rnid_params_mbx(ha, ha->ioctl_mem_phys,
++          sizeof(EXT_RNID_DATA), &mb[0]);
++
++      if (tmp_rval != QLA2X00_SUCCESS) {
++              /* error */
++              pext->Status = EXT_STATUS_ERR;
++
++              DEBUG9_10(printk("%s(%ld): inst=%ld cmd FAILED=%x.\n",
++                  __func__, ha->host_no, ha->instance, mb[0]);)
++              return (ret);
++      }
++
++      /* Copy the response */
++      copy_len = (pext->ResponseLen > sizeof(EXT_RNID_DATA)) ?
++          (uint32_t)sizeof(EXT_RNID_DATA) : pext->ResponseLen;
++      ret = verify_area(VERIFY_WRITE, (void  *)pext->ResponseAdr,
++          copy_len);
++
++      if (ret != 0) {
++              pext->Status = EXT_STATUS_COPY_ERR;
++              DEBUG9_10(printk("%s(%ld): inst=%ld verify WRITE rsp buf error\n",
++                  __func__, ha->host_no, ha->instance);)
++      } else {
++              ret = copy_to_user((void *)pext->ResponseAdr,
++                  (void *)ha->ioctl_mem, copy_len);
++              if (ret) {
++                      pext->Status = EXT_STATUS_COPY_ERR;
++                      DEBUG9_10(printk("%s(%ld): inst=%ld ERROR copy rsp buf\n",
++                          __func__, ha->host_no, ha->instance);)
++                      return (ret);
++              }
++
++              pext->ResponseLen = copy_len;
++              if (copy_len < sizeof(EXT_RNID_DATA)) {
++                      pext->Status = EXT_STATUS_DATA_OVERRUN;
++                      DEBUG9_10(printk("%s(%ld): inst=%ld data overrun. "
++                          "exiting normally.\n",
++                          __func__, ha->host_no, ha->instance);)
++              } else if (pext->ResponseLen > sizeof(EXT_RNID_DATA)) {
++                      pext->Status = EXT_STATUS_DATA_UNDERRUN;
++                      DEBUG9_10(printk("%s(%ld): inst=%ld data underrun. "
++                          "exiting normally.\n",
++                          __func__, ha->host_no, ha->instance);)
++              } else {
++                      pext->Status = EXT_STATUS_OK;
++                      DEBUG9(printk("%s(%ld): inst=%ld exiting normally.\n",
++                          __func__, ha->host_no, ha->instance);)
++              }
++      }
++
++      return (ret);
++}
++
++/*
++ * qla2x00_set_host_data
++ *    IOCTL command to set host/adapter related data.
++ *
++ * Input:
++ *    ha = adapter state pointer.
++ *    pext = User space CT arguments pointer.
++ *    mode = flags.
++ *
++ * Returns:
++ *    0 = success
++ *    others = errno value
++ *
++ * Context:
++ *    Kernel context.
++ */
++static int
++qla2x00_set_host_data(scsi_qla_host_t *ha, EXT_IOCTL *pext, int mode)
++{
++      int     ret = 0;
++
++      DEBUG9(printk("%s(%ld): inst=%ld entered.\n",
++          __func__, ha->host_no, ha->instance);)
++
++      /* check on loop down */
++      if (ha->loop_state != LOOP_READY || 
++          test_bit(CFG_ACTIVE, &ha->cfg_flags) ||
++          (test_bit(ABORT_ISP_ACTIVE, &ha->dpc_flags)) ||
++          ABORTS_ACTIVE || ha->dpc_active) {
++
++              pext->Status = EXT_STATUS_BUSY;
++              DEBUG9_10(printk("%s(%ld): inst=%ld loop not ready.\n",
++                  __func__, ha->host_no, ha->instance);)
++
++              return (ret);
++      }
++
++      /* switch on command subcode */
++      switch (pext->SubCode) {
++      case EXT_SC_SET_RNID:
++              ret = qla2x00_set_rnid_params(ha, pext, mode);
++              break;
++      default:
++              /* function not supported. */
++              pext->Status = EXT_STATUS_UNSUPPORTED_SUBCODE;
++              break;
++      }
++
++      DEBUG9(printk("%s(%ld): inst=%ld exiting.\n",
++          __func__, ha->host_no, ha->instance);)
++
++      return (ret);
++}
++
++/*
++ * qla2x00_set_rnid_params
++ *    IOCTL to set RNID parameters of the adapter.
++ *
++ * Input:
++ *    ha = adapter state pointer.
++ *    pext = User space CT arguments pointer.
++ *    mode = flags.
++ *
++ * Returns:
++ *    0 = success
++ *    others = errno value
++ *
++ * Context:
++ *    Kernel context.
++ */
++static int
++qla2x00_set_rnid_params(scsi_qla_host_t *ha, EXT_IOCTL *pext, int mode)
++{
++      EXT_SET_RNID_REQ        *tmp_set;
++      EXT_RNID_DATA   *tmp_buf;
++      int             ret = 0;
++      int             tmp_rval = 0;
++      uint16_t        mb[MAILBOX_REGISTER_COUNT];
++
++      DEBUG9(printk("%s(%ld): inst=%ld entered.\n",
++          __func__, ha->host_no, ha->instance);)
++
++      if (pext->RequestLen != sizeof(EXT_SET_RNID_REQ)) {
++              /* parameter error */
++              pext->Status = EXT_STATUS_INVALID_PARAM;
++              DEBUG9_10(printk("%s(%ld): inst=%ld invalid request length.\n",
++                  __func__, ha->host_no, ha->instance);)
++              return(ret);
++      }
++
++      ret = verify_area(VERIFY_READ, (void *)pext->RequestAdr,
++          pext->RequestLen);
++
++      if (ret != 0) {
++              pext->Status = EXT_STATUS_COPY_ERR;
++              DEBUG9_10(printk("%s(%ld): inst=%ld verify READ request buf.\n",
++                  __func__, ha->host_no, ha->instance);)
++              return(ret);
++      }
++
++      if (qla2x00_get_ioctl_scrap_mem(ha, (void **)&tmp_set,
++          sizeof(EXT_SET_RNID_REQ))) {
++              /* not enough memory */
++              pext->Status = EXT_STATUS_NO_MEMORY;
++              DEBUG9_10(printk("%s(%ld): inst=%ld scrap not big enough. "
++                  "size requested=%d.\n",
++                  __func__, ha->host_no, ha->instance,
++                  sizeof(EXT_SET_RNID_REQ));)
++              return (ret);
++      }
++
++      ret = copy_from_user(tmp_set, pext->RequestAdr, pext->RequestLen);
++      if (ret) {
++              pext->Status = EXT_STATUS_COPY_ERR;
++              DEBUG9_10(printk(
++                  "%s(%ld): inst=%ld ERROR copy req buf ret=%d\n", 
++                  __func__, ha->host_no, ha->instance, ret);)
++              qla2x00_free_ioctl_scrap_mem(ha);
++              return(ret);
++      }
++
++      tmp_rval = qla2x00_get_rnid_params_mbx(ha, ha->ioctl_mem_phys,
++          sizeof(EXT_RNID_DATA), &mb[0]);
++      if (tmp_rval != QLA2X00_SUCCESS) {
++              /* error */
++              pext->Status = EXT_STATUS_ERR;
++
++                DEBUG9_10(printk("%s(%ld): inst=%ld read cmd FAILED=%x.\n",
++                    __func__, ha->host_no, ha->instance, mb[0]);)
++              qla2x00_free_ioctl_scrap_mem(ha);
++              return (ret);
++      }
++
++      tmp_buf = (EXT_RNID_DATA *)ha->ioctl_mem;
++      /* Now set the params. */
++      memcpy(tmp_buf->IPVersion, tmp_set->IPVersion, 2);
++      memcpy(tmp_buf->UDPPortNumber, tmp_set->UDPPortNumber, 2);
++      memcpy(tmp_buf->IPAddress, tmp_set->IPAddress, 16);
++      tmp_rval = qla2x00_set_rnid_params_mbx(ha, ha->ioctl_mem_phys,
++          sizeof(EXT_RNID_DATA), &mb[0]);
++
++      if (tmp_rval != QLA2X00_SUCCESS) {
++              /* error */
++              pext->Status = EXT_STATUS_ERR;
++
++              DEBUG9_10(printk("%s(%ld): inst=%ld set cmd FAILED=%x.\n",
++                  __func__, ha->host_no, ha->instance, mb[0]);)
++      } else {
++              pext->Status = EXT_STATUS_OK;
++              DEBUG9(printk("%s(%ld): inst=%ld exiting normally.\n",
++                  __func__, ha->host_no, ha->instance);)
++      }
++
++      qla2x00_free_ioctl_scrap_mem(ha);
++      return (ret);
++}
++
++/*
++ * qla2x00_waitq_sem_timeout
++ *    Timeout function to be called when a thread on the wait_q
++ *    queue timed out.
++ *
++ * Input:
++ *    data = data pointer for timeout function.
++ *
++ * Returns:
++ *    qla2x00 local function return status code.
++ *
++ * Context:
++ *    Kernel context.
++ */
++static void
++qla2x00_waitq_sem_timeout(unsigned long data)
++{
++      wait_q_t *tmp_ptr = (wait_q_t *)data;
++
++      DEBUG9(printk("%s: entered.\n", __func__);)
++
++      if (tmp_ptr != NULL) {
++              DEBUG9(printk("%s: wait_q thread=%p.\n", __func__, tmp_ptr);)
++              up(&tmp_ptr->wait_q_sem);
++      }
++
++      DEBUG9(printk("%s: exiting.\n", __func__);)
++
++}
++
++/*
++ * qla2x00_get_ioctl_access
++ *    Serialization routine for the ioctl commands.
++ *    When succeeded the exiting thread gains "access" and
++ *    proceeds, otherwise it gives up and returns error.
++ *    Each thread would wait tov seconds before giving up.
++ *
++ * Input:
++ *    ha = adapter state pointer.
++ *    tov = timeout value in seconds
++ *
++ * Returns:
++ *    qla2x00 local function return status code.
++ *
++ * Context:
++ *    Kernel context.
++ */
++static uint8_t
++qla2x00_get_ioctl_access(scsi_qla_host_t *ha, uint32_t tov)
++{
++      int             prev_val = 1;
++      uint8_t         rval = QL_STATUS_SUCCESS;
++      unsigned long   cpu_flags;
++      struct timer_list       tmp_access_timer;
++      wait_q_t        *ptmp_wq = NULL;
++
++
++      DEBUG9(printk("%s(%ld): inst=%ld entered.\n",
++          __func__, ha->host_no, ha->instance);)
++
++      while (1) {
++              if (test_bit(IOCTL_WANT, (void *)&(ha->ioctl->access_bits)) ==
++                  0) {
++
++                      DEBUG9(printk("%s(%ld): going to test access_bits.\n",
++                          __func__, ha->host_no);)
++
++                      /* No one else is waiting. Go ahead and try to
++                       * get access.
++                       */
++                      if ((prev_val = test_and_set_bit(IOCTL_ACTIVE,
++                          (void *)&ha->ioctl->access_bits)) == 0) {
++                              break;
++                      }
++              }
++
++              /* wait for previous command to finish */
++              DEBUG9(printk("%s(%ld): inst=%ld access_bits=%x. busy. "
++                  "Waiting for access. curr time=0x%lx.\n",
++                  __func__, ha->host_no, ha->instance,
++                  ha->ioctl->access_bits, jiffies);)
++
++              /*
++               * Init timer and get semaphore from wait_q. if we got valid
++               * semaphore pointer the IOCTL_WANT flag would also had
++               * been set.
++               */
++              qla2x00_wait_q_add(ha, &ptmp_wq);
++
++              if (ptmp_wq == NULL) {
++                      /* queue full? problem? can't proceed. */
++                      DEBUG9_10(printk("%s(%ld): ERROR no more wait_q "
++                          "allowed. exiting.\n", __func__, ha->host_no);)
++
++                      break;
++              }
++
++              init_timer(&tmp_access_timer);
++
++              tmp_access_timer.data = (unsigned long)ptmp_wq;
++              tmp_access_timer.function =
++                  (void (*)(unsigned long))qla2x00_waitq_sem_timeout;
++              tmp_access_timer.expires = jiffies + tov * HZ;
++
++              DEBUG9(printk("%s(%ld): adding timer. "
++                  "curr time=0x%lx timeoutval=0x%lx.\n",
++                  __func__, ha->host_no, jiffies, tmp_access_timer.expires);)
++
++              /* wait. */
++              add_timer(&tmp_access_timer);
++
++              DEBUG9(printk("%s(%ld): inst=%ld wait_q %p going to sleep. "
++                  "current time=0x%lx.\n",
++                  __func__, ha->host_no, ha->instance, ptmp_wq, jiffies);)
++
++              down_interruptible(&ptmp_wq->wait_q_sem);
++
++              DEBUG9(printk("%s(%ld): inst=%ld wait_q %p woke up. current "
++                  "time=0x%lx.\n",
++                  __func__, ha->host_no, ha->instance, ptmp_wq, jiffies);)
++
++              del_timer(&tmp_access_timer);
++
++              /* try to get lock again. we'll test later to see
++               * if we actually got the lock.
++               */
++              prev_val = test_and_set_bit(IOCTL_ACTIVE,
++                  (void *)&(ha->ioctl->access_bits));
++
++              /*
++               * After we tried to get access then we check to see
++               * if we need to clear the IOCTL_WANT flag. Don't clear
++               * this flag before trying to get access or another
++               * new thread might grab it before we did.
++               */
++              spin_lock_irqsave(&ha->ioctl->wait_q_lock, cpu_flags);
++              if (prev_val != 0) {
++                      /* We'll return with error.
++                       * Make sure we remove ourselves from wait_q.
++                       */
++                      qla2x00_wait_q_remove(ha, ptmp_wq);
++              }
++              if (ha->ioctl->wait_q_head == NULL) {
++                      /* We're the last thread in wait_q queue. */
++                      clear_bit(IOCTL_WANT, (void *)&ha->ioctl->access_bits);
++              }
++              qla2x00_wait_q_memb_free(ha, ptmp_wq);
++              spin_unlock_irqrestore(&ha->ioctl->wait_q_lock, cpu_flags);
++
++              break;
++      }
++
++      if (prev_val == 0) {
++              /* We got the lock */
++
++              DEBUG9(printk("%s(%ld): inst=%ld got access.\n",
++                  __func__, ha->host_no, ha->instance);)
++
++      } else {
++              /* Timeout or resource error. */
++              DEBUG9_10(printk("%s(%ld): inst=%ld timed out "
++                  "or wait_q error.\n", __func__, ha->host_no, ha->instance);)
++
++              rval = QL_STATUS_TIMEOUT;
++      }
++
++      return (rval);
++}
++
++/*
++ * qla2x00_release_ioctl_access
++ *    Serialization routine for the ioctl commands.
++ *    This releases "access" and checks on wai_q queue. If there's
++ *    another thread waiting then wakes it up.
++ *
++ * Input:
++ *    ha = adapter state pointer.
++ *    tov = timeout value in seconds
++ *
++ * Returns:
++ *    qla2x00 local function return status code.
++ *
++ * Context:
++ *    Kernel context.
++ */
++static uint8_t
++qla2x00_release_ioctl_access(scsi_qla_host_t *ha)
++{
++      wait_q_t        *next_thread = NULL;
++
++      DEBUG9(printk("%s(%ld): inst=%ld entered.\n",
++          __func__, ha->host_no, ha->instance);)
++
++      clear_bit(IOCTL_ACTIVE, (void *)&(ha->ioctl->access_bits));
++
++      /* Wake up one pending ioctl thread in wait_q */
++      qla2x00_wait_q_get_next(ha, &next_thread);
++      if (next_thread) {
++              DEBUG9(printk(
++                  "%s(%ld): inst=%ld found wait_q. Wake up waitq %p\n",
++                  __func__, ha->host_no, ha->instance, &next_thread);)
++              up(&next_thread->wait_q_sem);
++      }
++
++      DEBUG9(printk("%s(%ld): inst=%ld exiting.\n",
++          __func__, ha->host_no, ha->instance);)
++
++      return QL_STATUS_SUCCESS;
++}
++
++/*
++ * qla2x00_wait_q_memb_alloc
++ *    Finds a free wait_q member from the array. Must already got the
++ *    wait_q_lock spinlock.
++ *
++ * Input:
++ *    ha = adapter state pointer.
++ *
++ * Returns:
++ *    qla2x00 local function return status code.
++ *
++ * Context:
++ *    Kernel context.
++ */
++static void
++qla2x00_wait_q_memb_alloc(scsi_qla_host_t *ha, wait_q_t **ret_wait_q_memb)
++{
++      uint8_t         i;
++      wait_q_t        *ptmp = NULL;
++
++      DEBUG9(printk("%s(%ld): inst=%ld entered.\n",
++          __func__, ha->host_no, ha->instance);)
++
++      for (i = 0; i < MAX_IOCTL_WAIT_THREADS; i++) {
++              if (!(ha->ioctl->wait_q_arr[i].flags & WQ_IN_USE)) {
++                      ha->ioctl->wait_q_arr[i].flags |= WQ_IN_USE;
++                      ptmp = &ha->ioctl->wait_q_arr[i];
++                      break;
++              }
++      }
++
++      *ret_wait_q_memb = ptmp;
++
++      DEBUG9(printk("%s(%ld): inst=%ld return waitq_memb=%p.\n",
++          __func__, ha->host_no, ha->instance, *ret_wait_q_memb);)
++}
++
++/*
++ * qla2x00_wait_q_memb_free
++ *    Frees the specified wait_q member. Must already got the wait_q_lock
++ *    spinlock.
++ *
++ * Input:
++ *    ha = adapter state pointer.
++ *
++ * Returns:
++ *    qla2x00 local function return status code.
++ *
++ * Context:
++ *    Kernel context.
++ */
++static void
++qla2x00_wait_q_memb_free(scsi_qla_host_t *ha, wait_q_t *pfree_wait_q_memb)
++{
++      DEBUG9(printk("%s(%ld): inst=%ld entered.\n",
++          __func__, ha->host_no, ha->instance);)
++
++      if (pfree_wait_q_memb != NULL) {
++              DEBUG9(printk("%s(%ld): freeing %p.\n",
++                  __func__, ha->host_no, pfree_wait_q_memb);)
++              pfree_wait_q_memb->flags &= ~WQ_IN_USE;
++      }
++
++      DEBUG9(printk("%s(%ld): inst=%ld exiting.\n",
++          __func__, ha->host_no, ha->instance);)
++}
++
++/*
++ * qla2x00_wait_q_add
++ *    Allocates a wait_q_t struct and add to the wait_q list.
++ *
++ * Input:
++ *    ha = adapter state pointer.
++ *
++ * Returns:
++ *    qla2x00 local function return status code.
++ *
++ * Context:
++ *    Kernel context.
++ */
++static uint8_t
++qla2x00_wait_q_add(scsi_qla_host_t *ha, wait_q_t **ret_wq)
++{
++      uint8_t         rval = QL_STATUS_SUCCESS;
++      unsigned long   cpu_flags;
++      wait_q_t        *ptmp = NULL;
++
++      spin_lock_irqsave(&ha->ioctl->wait_q_lock, cpu_flags);
++
++      DEBUG9(printk("%s(%ld): inst=%ld got wait_q spinlock.\n",
++          __func__, ha->host_no, ha->instance);)
++
++      qla2x00_wait_q_memb_alloc(ha, &ptmp);
++      if (ptmp == NULL) {
++              /* can't add any more threads */
++              DEBUG9_10(printk("%s(%ld): inst=%ld ERROR no more ioctl "
++                  "threads allowed.\n",
++                  __func__, ha->host_no, ha->instance);)
++
++              rval = QL_STATUS_RESOURCE_ERROR;
++      } else {
++              if (ha->ioctl->wait_q_tail == NULL) {
++                      /* First thread to queue. */
++                      set_bit(IOCTL_WANT, (void *)&ha->ioctl->access_bits);
++
++                      ha->ioctl->wait_q_head = ptmp;
++              } else {
++                      ha->ioctl->wait_q_tail->pnext = ptmp;
++              }
++              ha->ioctl->wait_q_tail = ptmp;
++
++              *ret_wq = ptmp;
++
++              /* Now init the semaphore */
++
++              init_MUTEX_LOCKED(&ptmp->wait_q_sem);
++
++              rval = QL_STATUS_SUCCESS;
++      }
++
++      DEBUG9(printk("%s(%ld): inst=%ld going to release spinlock. "
++          "ret_wq=%p, rval=%d.\n",
++          __func__, ha->host_no, ha->instance, *ret_wq, rval);)
++
++      spin_unlock_irqrestore(&ha->ioctl->wait_q_lock, cpu_flags);
++
++      return rval;
++}
++
++/*
++ * qla2x00_wait_q_get_next
++ *    This just removes one member from head of wait_q.
++ *
++ * Input:
++ *    ha = adapter state pointer.
++ *
++ * Returns:
++ *    qla2x00 local function return status code.
++ *
++ * Context:
++ *    Kernel context.
++ */
++static void
++qla2x00_wait_q_get_next(scsi_qla_host_t *ha, wait_q_t **ret_wq)
++{
++      unsigned long   cpu_flags;
++
++      if (test_bit(IOCTL_ACTIVE, (void *)&(ha->ioctl->access_bits)) != 0) {
++              /* Another thread just became active. Exit. */
++              *ret_wq = NULL;
++              return;
++      }
++
++      /* Find the next thread to wake up */
++      spin_lock_irqsave(&ha->ioctl->wait_q_lock, cpu_flags);
++
++      DEBUG9(printk("%s(%ld): inst=%ld got wait_q spinlock.\n",
++          __func__, ha->host_no, ha->instance);)
++
++      /* Remove from head */
++      *ret_wq = ha->ioctl->wait_q_head;
++      if (ha->ioctl->wait_q_head != NULL) {
++
++              ha->ioctl->wait_q_head = ha->ioctl->wait_q_head->pnext;
++
++              if (ha->ioctl->wait_q_head == NULL) {
++                      /* That's the last one in queue. */
++                      ha->ioctl->wait_q_tail = NULL;
++              }
++
++              (*ret_wq)->pnext = NULL;
++      }
++
++      DEBUG9(printk("%s(%ld): inst=%ld return ret_wq=%p. Going to release "
++          "spinlock.\n",
++          __func__, ha->host_no, ha->instance, *ret_wq);)
++      spin_unlock_irqrestore(&ha->ioctl->wait_q_lock, cpu_flags);
++}
++
++/*
++ * qla2x00_wait_q_remove
++ *    Removes the specified member from wait_q.
++ *    Must already got the wait_q_lock spin lock.
++ *
++ * Input:
++ *    ha = adapter state pointer.
++ *
++ * Returns:
++ *    qla2x00 local function return status code.
++ *
++ * Context:
++ *    Kernel context.
++ */
++static void
++qla2x00_wait_q_remove(scsi_qla_host_t *ha, wait_q_t *rem_wq)
++{
++      wait_q_t        *ptmp_wq;
++      wait_q_t        *ptmp_prev;
++
++      DEBUG9(printk("%s(%ld): inst=%ld rem_wq=%p.\n",
++          __func__, ha->host_no, ha->instance, rem_wq);)
++
++      /* Search then remove */
++      ptmp_prev = NULL;
++      for (ptmp_wq = ha->ioctl->wait_q_head; ptmp_wq != NULL;
++          ptmp_wq = ptmp_wq->pnext) {
++
++              if (ptmp_wq == rem_wq) {
++                      /* Found it in wait_q. Remove. */
++
++                      DEBUG9(printk("%s(%ld): inst=%ld removing.\n",
++                          __func__, ha->host_no, ha->instance);)
++
++                      if (ha->ioctl->wait_q_head == ptmp_wq) {
++                              ha->ioctl->wait_q_head = ptmp_wq->pnext;
++                      } else {
++                              ptmp_prev->pnext = ptmp_wq->pnext;
++                      }
++
++                      if (ha->ioctl->wait_q_tail == ptmp_wq) {
++                              ha->ioctl->wait_q_tail = ptmp_prev;
++                      }
++
++                      ptmp_wq->pnext = NULL;
++
++                      break;
++              }
++              ptmp_prev = ptmp_wq;
++      }
++
++      DEBUG9(printk("%s(%ld): inst=%ld exiting.\n",
++          __func__, ha->host_no, ha->instance);)
++}
++
++
+--- /dev/null  Thu Apr 11 07:25:15 2002
++++ linux-2.5.73-n9560/drivers/scsi/qla2xxx/qlfo.h     Thu Jul  3 15:34:42 2003
+@@ -0,0 +1,413 @@
++/******************************************************************************
++ *                  QLOGIC LINUX SOFTWARE
++ *
++ * QLogic ISP2x00 device driver for Linux 2.5.x
++ * Copyright (C) 2003 Qlogic Corporation
++ * (www.qlogic.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, 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.
++ *
++ ******************************************************************************/
++
++/*
++ * San/Device Management Failover Ioctl Header
++ * File is created to adhere to Solaris requirement using 8-space tabs.
++ *
++ * !!!!! PLEASE DO NOT REMOVE THE TABS !!!!!
++ * !!!!! PLEASE NO SINGLE LINE COMMENTS: // !!!!!
++ * !!!!! PLEASE NO MORE THAN 80 CHARS PER LINE !!!!!
++ *
++ * Revision History:
++ *
++ * Rev. 0.00  August 8, 2000
++ * WTR        - Created.
++ *
++ * Rev. 0.01  August 8, 2000
++ * WTR        - Made size of HbaInstance fields consistant as UINT8.
++ *        Made command codes as 300 upward to be consistant with definitions
++ *        in ExIoct.h.
++ * Rev. 0.01  October 3, 2000
++ * TLE  - Exclusion of ExIoct.h
++ *
++ * Rev. 0.01  October 6, 2000
++ * TLE  - Made size of HbaInstance fields UINT8
++ *
++ * Rev. 0.01  October 10, 2000
++ * TLE  - Add _FO_DRIVER_VERSION data structure
++ */
++
++
++
++#ifndef _FO_H
++#define _FO_H
++
++/*
++ * ***********************************************************************
++ * X OS type definitions
++ * ***********************************************************************
++ */
++#ifdef _MSC_VER                                               /* NT */
++
++#pragma pack(1)
++#include "qlfont.h"
++
++#elif defined(linux)                                  /* Linux */
++
++#include "qlfoln.h"
++
++#elif defined(sun) || defined(__sun)                  /* Solaris */
++
++#include "qlfoso.h"
++
++#endif
++
++#define SDM_DEF_MAX_DEVICES           16
++#define SDM_DEF_MAX_PATHS_PER_TARGET  4
++#define SDM_DEF_MAX_TARGETS_PER_DEVICE        4
++#define SDM_DEF_MAX_PATHS_PER_DEVICE (SDM_DEF_MAX_PATHS_PER_TARGET * SDM_DEF_MAX_TARGETS_PER_DEVICE)
++
++#define FO_MAX_LUNS_PER_DEVICE        MAX_LUNS_OS
++#define FO_MAX_PATHS (SDM_DEF_MAX_PATHS_PER_DEVICE * SDM_DEF_MAX_DEVICES)
++#define FO_MAX_ADAPTERS               32
++#define FO_ADAPTER_ALL                0xFF
++#define FO_DEF_WWN_SIZE             8
++#define FO_MAX_GEN_INFO_STRING_LEN  32
++
++
++#define FO_NOTIFY_TYPE_NONE                   0
++#define FO_NOTIFY_TYPE_LUN_RESET              1
++#define FO_NOTIFY_TYPE_CDB                    2
++#define FO_NOTIFY_TYPE_LOGOUT_OR_LUN_RESET    3
++#define FO_NOTIFY_TYPE_LOGOUT_OR_CDB          4
++
++#define FO_NOTIFY_TYPE_MIN                FO_NOTIFY_TYPE_NONE
++#define FO_NOTIFY_TYPE_MAX                FO_NOTIFY_TYPE_LOGOUT_OR_CDB
++#define FO_NOTIFY_TYPE_DEF                FO_NOTIFY_TYPE_NONE
++
++#define FO_NOTIFY_CDB_LENGTH_MIN              6
++#define FO_NOTIFY_CDB_LENGTH_MAX             16
++
++/*
++ * IOCTL Commands
++ */
++
++#define FO_CC_GET_PARAMS                      FO_CC_GET_PARAMS_OS
++#define FO_CC_SET_PARAMS                      FO_CC_SET_PARAMS_OS
++#define FO_CC_GET_PATHS                           FO_CC_GET_PATHS_OS
++#define FO_CC_SET_CURRENT_PATH                FO_CC_SET_CURRENT_PATH_OS
++#define FO_CC_GET_HBA_STAT                    FO_CC_GET_HBA_STAT_OS
++#define FO_CC_RESET_HBA_STAT          FO_CC_RESET_HBA_STAT_OS
++#define FO_CC_GET_LUN_DATA              FO_CC_GET_LUN_DATA_OS
++#define FO_CC_SET_LUN_DATA              FO_CC_SET_LUN_DATA_OS
++#define FO_CC_GET_TARGET_DATA           FO_CC_GET_TARGET_DATA_OS
++#define FO_CC_SET_TARGET_DATA           FO_CC_SET_TARGET_DATA_OS
++#define FO_CC_GET_FO_DRIVER_VERSION     FO_CC_GET_FO_DRIVER_VERSION_OS
++
++
++/* Systemwide failover parameters. */
++
++typedef struct _FO_PARAMS
++{
++        UINT32      InspectionInterval;     /* Timer interval to check for failover.*/
++        UINT8       MaxPathsPerDevice;            /* Max paths to any single device. */
++        UINT8       MaxRetriesPerPath;            /* Max retries on a path before */
++
++        /* Failover. */
++        UINT8       MaxRetriesPerIo;      /* Max retries per i/o request. */
++        UINT8       Reserved1;
++        UINT32      Flags;                            /* Control flags. */
++        UINT8       DeviceErrorThreshold;   /* Max device errors. */
++        UINT8       DeviceTimeoutThreshold; /* Max device timeouts.*/
++        UINT8       FrameErrorThreshold;    /* Max frame errors.*/
++        UINT8       LinkErrorThreshold;     /* Max link errors.*/
++        UINT32      Reserved2[4];           /* Spares.*/
++
++        /* Load balancing parameters.*/
++
++        UINT8       RollingAverageIntervals;/* Intervals to sum for rolling average.*/
++        UINT8       MaxDevicesToMigrate;    /* Max devices to migrate in any interval.*/
++        UINT8       BalanceMethod;          /* Method to use for load balancing.*/
++        UINT8       Reserved3;              /* Memory alignment.*/
++
++        UINT16      LoadShareMinPercentage; /* Load balancing parameter.*/
++        UINT16      LoadShareMaxPercentage; /* Load balancing parameter.*/
++
++        /* Failover notify parameters. */
++
++        UINT8       FailoverNotifyType;       /* Type of notification. */
++        UINT8       FailoverNotifyCdbLength;/* Length of notification CDB. */
++        UINT16      Reserved4;
++        UINT8       FailoverNotifyCdb[16];    /* CDB if notification by CDB. */
++        UINT32      Reserved5;
++
++}
++FO_PARAMS, *PFO_PARAMS, SysFoParams_t, *SysFoParams_p;
++
++extern SysFoParams_t qla_fo_params;
++
++typedef struct _FO_GET_PATHS
++{
++        UINT8       HbaInstance;
++        EXT_DEST_ADDR HbaAddr;       /* Lun field is ignored */
++        UINT32      Reserved[5];
++
++}
++FO_GET_PATHS, *PFO_GET_PATHS;
++
++
++typedef struct _FO_PATH_ENTRY
++{
++        UINT8   Reserved1;
++        UINT8   Visible;              /* Path is visible path. */
++        UINT8   Priority;
++        UINT8   Reserved2;
++        UINT8   HbaInstance;
++        UINT8   PortName[EXT_DEF_WWN_NAME_SIZE];
++        UINT16  Reserved3;
++        UINT32  Reserved[3];
++
++}
++FO_PATH_ENTRY, *PFO_PATH_ENTRY;
++
++
++typedef struct _FO_PATHS_INFO
++{
++        /* These first fields in the output buffer are specifically the
++         * same as the fields in the input buffer.  This is because the
++         * same system buffer holds both, and this allows us to reference
++         * the input buffer parameters while filling the output buffer. */
++
++        UINT8       HbaInstance;
++        EXT_DEST_ADDR HbaAddr;
++        UINT32      Reserved[5];
++        UINT8       PathCount;          /* Number of Paths in PathEntry array */
++        UINT8       Reserved3;
++        UINT8       VisiblePathIndex;   /* Which index has BOOLEAN "visible" flag set */
++        UINT8       Reserved4;
++
++        UINT8       CurrentPathIndex[FO_MAX_LUNS_PER_DEVICE];   /* Current Path Index for each Lun */
++
++        FO_PATH_ENTRY   PathEntry[FO_MAX_PATHS];
++
++        UINT32      Reserved5[4];
++
++}
++FO_PATHS_INFO, *PFO_PATHS_INFO;
++
++typedef struct _FO_SET_CURRENT_PATH
++{
++        UINT8       HbaInstance;
++        EXT_DEST_ADDR HbaAddr;
++        UINT8       NewCurrentPathIndex;    /* Path index to make current path. */
++        UINT8       FailoverType;           /* Reason for failover. */
++        UINT32      Reserved[3];
++
++}
++FO_SET_CURRENT_PATH, *PFO_SET_CURRENT_PATH;
++
++typedef union _FO_PATHS {
++        FO_GET_PATHS input;
++        FO_SET_CURRENT_PATH set
++                ;
++        FO_PATHS_INFO info;
++} FO_PATHS;
++
++
++typedef struct  _FO_HBA_STAT_INPUT
++{
++        /* The first field in the input buffer is specifically the
++         * same as the field in the output buffer.  This is because the
++         * same system buffer holds both, and this allows us to reference
++         * the input buffer parameters while filling the output buffer. */
++
++        UINT8       HbaInstance;              /* Port number or ADAPTER_ALL. */
++        UINT8       Reserved1[3];
++        UINT32      Reserved2[7];
++
++}
++FO_HBA_STAT_INPUT, *PFO_HBA_STAT_INPUT;
++
++
++typedef struct _FO_HBA_STAT_ENTRY
++{
++        UINT8       HbaInstance;
++        UINT8       Reserved1[3];
++        UINT32      Reserved2;
++        UINT64      IosRequested; /* IOs requested on this adapter. */
++        UINT64      BytesRequested;           /* Bytes requested on this adapter. */
++        UINT64      IosExecuted; /* IOs executed on this adapter. */
++        UINT64      BytesExecuted;            /* Bytes executed on this adapter. */
++        UINT32      Reserved3[22];
++
++}
++FO_HBA_STAT_ENTRY, *PFO_HBA_STAT_ENTRY;
++
++
++typedef struct _FO_HBA_STAT_INFO
++{
++        /* The first fields in the output buffer is specifically the
++         * same as the field in the input buffer.  This is because the
++         * same system buffer holds both, and this allows us to reference
++         * the input buffer parameters while filling the output buffer. */
++
++        UINT8       HbaInstance; /* Port number or ADAPTER_ALL. */
++        UINT8       HbaCount; /* Count of adapters returned. */
++        UINT8       Reserved1[2];
++        UINT32      Reserved2[7];
++
++        FO_HBA_STAT_ENTRY StatEntry[FO_MAX_ADAPTERS];
++
++}
++FO_HBA_STAT_INFO, *PFO_HBA_STAT_INFO;
++
++
++
++/*  The "external" LUN data refers to the LUNs as represented in our
++  configuration utility, where one physical target can support up to
++  2048 LUNs, which are mapped around internally.  This is in comparison
++  to an "internal" LUN data, which is 256 LUNs, after being mapped
++  inside the driver to multiple target slots. */
++
++#define EXTERNAL_LUN_COUNT          2048
++
++/* Structure as used in the IOCTL.*/
++
++typedef struct _FO_EXTERNAL_LUN_DATA_ENTRY
++{
++        UINT8       NodeName[EXT_DEF_WWN_NAME_SIZE];
++        UINT8       PortName[EXT_DEF_WWP_NAME_SIZE];  //sri
++
++        UINT16      LunCount;   /* Entries in Lun Data array. */
++        UINT8       TargetId;
++        UINT8       Dev_No;
++        UINT32      Reserved3;
++        UINT32      Reserved4;
++        UINT32      Reserved5;                     /* Pad to 32-byte header.*/
++
++        UINT8       Data[EXTERNAL_LUN_COUNT];
++}
++FO_EXTERNAL_LUN_DATA_ENTRY, *PFO_EXTERNAL_LUN_DATA_ENTRY;
++
++//  Structure as it is stored in the NT registry.
++
++typedef struct _FO_LUN_DATA_LIST
++{
++        UINT16      Version;                       /* Should be LUN_DATA_REGISTRY_VERSION.*/
++        UINT16      EntryCount;                    /* Count of variable entries following.*/
++        UINT32      Reserved1;
++        UINT32      Reserved2;
++        UINT32      Reserved3;
++        UINT32      Reserved4;
++        UINT32      Reserved5;
++        UINT32      Reserved6;
++        UINT32      Reserved7;                     /* Pad to 32-byte header.*/
++
++        FO_EXTERNAL_LUN_DATA_ENTRY DataEntry[1];   /* Variable-length data.*/
++
++}
++FO_LUN_DATA_LIST, *PFO_LUN_DATA_LIST;
++
++typedef struct  _FO_LUN_DATA_INPUT
++{
++        /* The first field in the input buffer is specifically the
++         * same as the field in the output buffer.  This is because the
++         * same system buffer holds both, and this allows us to reference
++         * the input buffer parameters while filling the output buffer. */
++
++        UINT8       HbaInstance;              /* Port number */
++        UINT8       Reserved1[3];
++        UINT32      Reserved2[7];
++
++}
++FO_LUN_DATA_INPUT, *PFO_LUN_DATA_INPUT;
++
++typedef struct _FO_REQUEST_ADDR
++{
++        UINT8           HbaInstance;
++        EXT_DEST_ADDR   TargetAddr;
++        UINT32          Reserved[5];
++
++}
++FO_REQUEST_ADDR, *PFO_REQUEST_ADDR;
++
++typedef struct  _FO_TARGET_DATA_INPUT
++{
++        UINT8       HbaInstance;              /* Port number */
++        UINT8       Reserved1[3];
++        UINT32      Reserved2[7];
++
++}
++FO_TARGET_DATA_INPUT, *PFO_TARGET_DATA_INPUT;
++
++#define FO_INTERNAL_LUN_COUNT          256
++#define FO_INTERNAL_LUN_BITMASK_BYTES  (FO_INTERNAL_LUN_COUNT / 8)
++
++typedef struct _FO_INTERNAL_LUN_BITMASK
++{
++        UINT8       Bitmask[FO_INTERNAL_LUN_BITMASK_BYTES];
++}
++FO_INTERNAL_LUN_BITMASK, *PFO_INTERNAL_LUN_BITMASK;
++
++typedef struct _FO_DEVICE_DATA
++{
++        UINT32      DeviceFlags;        /* Device flags */
++        UINT16      LoopId;             /* Current loop ID */
++        UINT16      BaseLunNumber;      /* Base LUN number */
++        UINT8       WorldWideName[8];   /* World Wide Name for device */
++        UINT8       PortId[3];          /* Port ID */
++        UINT8       MultipathControl;   /* Multipath control byte. */
++        UINT16      DeviceState;        /* Device state */
++        UINT16      LoginRetryCount;    /* Number of login retries */
++        UINT8       PortName[8];        /* Port name for device */
++        UINT16      TimeoutCount;       /* Command timeout count */
++        UINT8       TargetId;
++        UINT8       Dev_No;
++        FO_INTERNAL_LUN_BITMASK    LunBitmask; /* LUN bitmask */
++}
++FO_DEVICE_DATA, *PFO_DEVICE_DATA;
++
++typedef struct _FO_DEVICE_DATABASE
++{
++        FO_DEVICE_DATA  DeviceData[256];
++}
++FO_DEVICE_DATABASE, *PFO_DEVICE_DATABASE;
++
++typedef struct _FO_DRIVER_VERSION
++{
++        // Numeric version.
++        UINT8       Version;                       // Major version number.
++        UINT8       Revision;                      // Minor version number.
++        UINT8       Subrevision;                   // Subminor version number.
++        UINT8       Reserved1;                      // Memory alignment.
++
++        // String version.
++        UINT8       VersionStr[FO_MAX_GEN_INFO_STRING_LEN];
++
++        // Reserved fields.
++        UINT32      Reserved2[16];
++
++}
++FO_DRIVER_VERSION, *PFO_DRIVER_VERSION;
++
++
++#define FO_LUN_DATA_LIST_MIN_ENTRIES      1
++#define FO_LUN_DATA_LIST_MAX_ENTRIES    256
++#ifdef _WIN64
++#define FO_LUN_DATA_LIST_HEADER_SIZE 32
++#else
++#define FO_LUN_DATA_LIST_HEADER_SIZE offsetof(FO_LUN_DATA_LIST, DataEntry)
++#endif
++
++#define FO_LUN_DATA_LIST_MIN_SIZE (FO_LUN_DATA_LIST_HEADER_SIZE + (sizeof(FO_EXTERNAL_LUN_DATA_ENTRY) * FO_LUN_DATA_LIST_MIN_ENTRIES))
++#define FO_LUN_DATA_LIST_MAX_SIZE (FO_LUN_DATA_LIST_HEADER_SIZE + (sizeof(FO_EXTERNAL_LUN_DATA_ENTRY) * FO_LUN_DATA_LIST_MAX_ENTRIES))
++
++
++#endif        /* ifndef _FO_H */
+--- /dev/null  Thu Apr 11 07:25:15 2002
++++ linux-2.5.73-n9560/drivers/scsi/qla2xxx/qlfolimits.h       Thu Jul  3 15:34:42 2003
+@@ -0,0 +1,92 @@
++/******************************************************************************
++ *                  QLOGIC LINUX SOFTWARE
++ *
++ * QLogic ISP2x00 device driver for Linux 2.5.x
++ * Copyright (C) 2003 Qlogic Corporation
++ * (www.qlogic.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, 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.
++ *
++ ******************************************************************************/
++
++/*
++ *  Minimums, maximums, defaults, and other definitions for MC_PARAMS.
++ */
++
++#define FO_INSPECTION_INTERVAL_MIN                     0
++#define FO_INSPECTION_INTERVAL_MAX               1000000
++#define FO_INSPECTION_INTERVAL_DEF                   600
++
++#define FO_MAX_PATHS_PER_DEVICE_MIN                    1
++#define FO_MAX_PATHS_PER_DEVICE_MAX                    8
++#define FO_MAX_PATHS_PER_DEVICE_DEF                    8
++
++#define FO_MAX_RETRIES_PER_PATH_MIN                    1
++#define FO_MAX_RETRIES_PER_PATH_MAX                    8
++#define FO_MAX_RETRIES_PER_PATH_DEF                    3
++
++#define FO_MAX_RETRIES_PER_IO_MIN          ((FO_MAX_PATHS_PER_DEVICE_MIN * FO_MAX_RETRIES_PER_PATH_MIN) + 1)
++#define FO_MAX_RETRIES_PER_IO_MAX          ((FO_MAX_PATHS_PER_DEVICE_MAX * FO_MAX_RETRIES_PER_PATH_MAX) + 1)
++#define FO_MAX_RETRIES_PER_IO_DEF          ((FO_MAX_PATHS_PER_DEVICE_DEF * FO_MAX_RETRIES_PER_PATH_DEF) + 1)
++
++#define FO_DEVICE_ERROR_THRESHOLD_MIN                  1
++#define FO_DEVICE_ERROR_THRESHOLD_MAX                255
++#define FO_DEVICE_ERROR_THRESHOLD_DEF                  4
++
++#define FO_DEVICE_TIMEOUT_THRESHOLD_MIN                1
++#define FO_DEVICE_TIMEOUT_THRESHOLD_MAX              255
++#define FO_DEVICE_TIMEOUT_THRESHOLD_DEF                4
++
++#define FO_FRAME_ERROR_THRESHOLD_MIN                   1
++#define FO_FRAME_ERROR_THRESHOLD_MAX                 255
++#define FO_FRAME_ERROR_THRESHOLD_DEF                   4
++
++#define FO_LINK_ERROR_THRESHOLD_MIN                    1
++#define FO_LINK_ERROR_THRESHOLD_MAX                  255
++#define FO_LINK_ERROR_THRESHOLD_DEF                    4
++
++#define FO_ROLLING_AVERAGE_INTERVALS_MIN               1
++#define FO_ROLLING_AVERAGE_INTERVALS_MAX              10
++#define FO_ROLLING_AVERAGE_INTERVALS_DEF               1
++
++#define FO_MAX_DEVICES_TO_MIGRATE_MIN                  0
++#define FO_MAX_DEVICES_TO_MIGRATE_MAX                255
++#define FO_MAX_DEVICES_TO_MIGRATE_DEF                  4
++
++#define FO_BALANCE_METHOD_NONE                         0
++#define FO_BALANCE_METHOD_IOS                          1
++#define FO_BALANCE_METHOD_MBS                          2
++
++#define FO_BALANCE_METHOD_MIN                      FO_BALANCE_METHOD_NONE
++#define FO_BALANCE_METHOD_MAX                      FO_BALANCE_METHOD_MBS
++#define FO_BALANCE_METHOD_DEF                      FO_BALANCE_METHOD_IOS
++
++#define FO_LOAD_SHARE_MIN_PERCENTAGE_MIN              25
++#define FO_LOAD_SHARE_MIN_PERCENTAGE_MAX              99
++#define FO_LOAD_SHARE_MIN_PERCENTAGE_DEF              75
++
++#define FO_LOAD_SHARE_MAX_PERCENTAGE_MIN             101
++#define FO_LOAD_SHARE_MAX_PERCENTAGE_MAX             500
++#define FO_LOAD_SHARE_MAX_PERCENTAGE_DEF             150
++
++#define FO_NOTIFY_TYPE_NONE                   0
++#define FO_NOTIFY_TYPE_LUN_RESET              1
++#define FO_NOTIFY_TYPE_CDB                    2
++#define FO_NOTIFY_TYPE_LOGOUT_OR_LUN_RESET    3
++#define FO_NOTIFY_TYPE_LOGOUT_OR_CDB          4
++
++#define FO_NOTIFY_TYPE_MIN                FO_NOTIFY_TYPE_NONE
++#define FO_NOTIFY_TYPE_MAX                FO_NOTIFY_TYPE_LOGOUT_OR_CDB
++#define FO_NOTIFY_TYPE_DEF                FO_NOTIFY_TYPE_NONE
++
++#define FO_NOTIFY_CDB_LENGTH_MIN              6
++#define FO_NOTIFY_CDB_LENGTH_MAX             16
++
+--- /dev/null  Thu Apr 11 07:25:15 2002
++++ linux-2.5.73-n9560/drivers/scsi/qla2xxx/qlfoln.h   Thu Jul  3 15:34:42 2003
+@@ -0,0 +1,76 @@
++/******************************************************************************
++ *                  QLOGIC LINUX SOFTWARE
++ *
++ * QLogic ISP2x00 device driver for Linux 2.5.x
++ * Copyright (C) 2003 Qlogic Corporation
++ * (www.qlogic.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, 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.
++ *
++ ******************************************************************************/
++
++
++#define QLMULTIPATH_MAGIC 'y'
++/********************************************************/
++/* Failover ioctl command codes range from 0xc0 to 0xdf */
++/********************************************************/
++
++
++#define FO_CC_GET_PARAMS_OS             \
++    _IOWR(QLMULTIPATH_MAGIC, 200, sizeof(EXT_IOCTL))  /* 0xc8 */
++#define FO_CC_SET_PARAMS_OS             \
++    _IOWR(QLMULTIPATH_MAGIC, 201, sizeof(EXT_IOCTL))  /* 0xc9 */
++#define FO_CC_GET_PATHS_OS              \
++    _IOWR(QLMULTIPATH_MAGIC, 202, sizeof(EXT_IOCTL))  /* 0xca */
++#define FO_CC_SET_CURRENT_PATH_OS       \
++    _IOWR(QLMULTIPATH_MAGIC, 203, sizeof(EXT_IOCTL))  /* 0xcb */
++#define FO_CC_GET_HBA_STAT_OS           \
++    _IOWR(QLMULTIPATH_MAGIC, 204, sizeof(EXT_IOCTL))  /* 0xcc */
++#define FO_CC_RESET_HBA_STAT_OS         \
++    _IOWR(QLMULTIPATH_MAGIC, 205, sizeof(EXT_IOCTL))  /* 0xcd */
++#define FO_CC_GET_LUN_DATA_OS           \
++    _IOWR(QLMULTIPATH_MAGIC, 206, sizeof(EXT_IOCTL))  /* 0xce */
++#define FO_CC_SET_LUN_DATA_OS           \
++    _IOWR(QLMULTIPATH_MAGIC, 207, sizeof(EXT_IOCTL))  /* 0xcf */
++#define FO_CC_GET_TARGET_DATA_OS        \
++    _IOWR(QLMULTIPATH_MAGIC, 208, sizeof(EXT_IOCTL))  /* 0xd0 */
++#define FO_CC_SET_TARGET_DATA_OS        \
++    _IOWR(QLMULTIPATH_MAGIC, 209, sizeof(EXT_IOCTL))  /* 0xd1 */
++#define FO_CC_GET_FO_DRIVER_VERSION_OS  \
++    _IOWR(QLMULTIPATH_MAGIC, 210, sizeof(EXT_IOCTL))  /* 0xd2 */
++
++
++#define BOOLEAN uint8_t
++#define MAX_LUNS_OS   256
++
++/* Driver attributes bits */
++#define DRVR_FO_ENABLED               0x1     /* bit 0 */
++
++
++/*
++ * Overrides for Emacs so that we almost 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: 2
++ * c-brace-imaginary-offset: 0
++ * c-brace-offset: -2
++ * c-argdecl-indent: 2
++ * c-label-offset: -2
++ * c-continued-statement-offset: 2
++ * c-continued-brace-offset: 0
++ * indent-tabs-mode: nil
++ * tab-width: 8
++ * End:
++ */
++
+--- /dev/null  Thu Apr 11 07:25:15 2002
++++ linux-2.5.73-n9560/drivers/scsi/qla2xxx/release.txt        Thu Jul  3 15:34:42 2003
+@@ -0,0 +1,28 @@
++
++                 QLogic QLA2200 and QLA2300 Linux Driver 
++
++                           Release Notes
++                         =============
++
++Version  8.00.00b1    March 05, 2003
++
+++**********************************************+
++* Features supported by this version of driver *
+++**********************************************+
++o FCAL - direct attach
++o Point-to-point 
++o Fabric support 
++o Initiator mode only
++o Fault recovery on down loops
++o Persistent binding - HBA node name valid
++o Linux 2.5.x Kernel Support *ONLY*
++o IPFC support
++
+++********************************+
++* Changes From Previous Releases *
+++********************************+
++o Please view revision.notes file
++ 
+++**************+
++* Known Issues *
+++**************+
+--- /dev/null  Thu Apr 11 07:25:15 2002
++++ linux-2.5.73-n9560/drivers/scsi/qla2xxx/revision.notes     Thu Jul  3 15:34:42 2003
+@@ -0,0 +1,167 @@
++/*
++ * QLogic ISP2200 and ISP2300 Linux Driver Revision List File.
++ *
++ ********************************************************************
++ *
++ * Revision History
++ *
++ *  Rev  8.00.00      May 05, 2003            AV
++ *    - Resync with Linux Kernel 2.5.69.
++ *    - Firmware versions: 2100 TP (1.19.24), 2200 TP (2.02.05),
++ *      2300 TPX (3.02.10).
++ *
++ *  Rev  8.00.00b1-pre45 April ??, 2003               AV
++ *    - Resync with Linux Kernel 2.5.68-bk11:
++ *    - Fix improper return-code assignment during fabric
++ *      discovery.
++ *    - Remove additional extraneous #defines from
++ *      qla_settings.h.
++ *      - USE_PORTNAME -- FO will always use portname.
++ *    - Default queue depth size set to 64.
++ *
++ *  Rev  8.00.00b1-pre42 April ??, 2003               AV
++ *    - Convert bottom-half tasklet to a work_queue.
++ *    - Initial basic coding of dynamic queue depth handling
++ *      during QUEUE FULL statuses.
++ *    - Fix mailbox interface problem with
++ *      qla2x00_get_retry_cnt().
++ *
++ *  Rev  8.00.00b1-pre41 April ??, 2003               AV
++ *    - Convert build defines qla2[1|2|3]00 macros to
++ *      qla2[1|2|3]xx due to module name stringification clashes.
++ *    - Add additional ISP2322 checks during board configuration.
++ *
++ *  Rev  8.00.00b1-pre40 April ??, 2003               AV
++ *    - Resync with Linux Kernel 2.5.68-bk8:
++ *      - Updated IRQ handler interface.
++ *    - Add ISP dump code (stub) in case of SYSTEM_ERROR on
++ *      ISP2100.
++ *    - Add new 2200 IP firmware (2.02.05).
++ *
++ *  Rev  8.00.00b1-pre39 April ??, 2003               AV
++ *    - Resync with Linux Kernel 2.5.68.
++ *    - Add simple build.sh script to aid in external compilation.
++ *    - Clean-break with Kernel 2.4 compatibility.
++ *      - Rework DPC routine -- completion routines for signaling.
++ *    - Re-add HBAAPI character device node for IOCTL support.
++ *    - Remove residual QLA2X_PERFORMANCE defines.
++ *    - Allocate SP pool via __get_free_pages() rather than
++ *      individual kmalloc()'s.
++ *    - Inform SCSI mid-layer of 16-byte CDB support
++ *      (host->max_cmd_len):
++ *      - Remove unecessary 'more_cdb' handling code from
++ *        qla_iocb.c and qla_xioct.c.
++ *    - Reduce duplicate code in fabric scanning logic (MS IOCB
++ *      preparation).
++ *    - Add ISP dump code in case of SYSTEM_ERROR.
++ *    - Remove 2300 VIX firmware from distribution:
++ *      - Add initial code for IPX support.
++ *    - Add new 2300 TPX firmware (3.02.10).
++ *
++ *  Rev  8.00.00b1-pre34 April ??, 2003               AV
++ *    - Resync with Linux Kernel 2.5.67.
++ *    - Use domain/area/al_pa fields when displaying PortID 
++ *      values -- addresses endianess issues.
++ *    - Rework large case statement to check 'common' CDB commands
++ *      early in qla2x00_get_cmd_direction().
++ *
++ *  Rev  8.00.00b1-pre31 April ??, 2003               AV
++ *    - Update makefile to support PPC64 build.
++ *    - Retool NVRAM configuration routine and structures:
++ *      - Consoldate ISP21xx/ISP22xx/ISP23xx configuration
++ *        (struct nvram_t).
++ *      - Remove big/little endian support structures in favor of
++ *        simplified bit-operations within byte fields.
++ *    - Fix long-standing 'static' buffer sharing problem in 
++ *      qla2x00_configure_fabric().
++ *
++ *  Rev  8.00.00b1-pre30 April ??, 2003               AV
++ *    - Complete implementation of GID_PT scan.
++ *    - Use consistent MS IOCB invocation method to query SNS:
++ *      - Add RNN_ID and RSNN_NN registrations in a fabric.
++ *    - Remove unused Mailbox Command 6Eh (Send SNS) support
++ *      structures.
++ *    - Use 64bit safe IOCBs while issuing INQUIRY and RLC during
++ *      topology scan.
++ *    - Until reimplementation of fcdev_t/fcport list
++ *      consolidation, valid loop_id ranges are still limited from
++ *      0x00 through 0xFF -- enforce this within the code.
++ *
++ *  Rev  8.00.00b1-pre27 March ??, 2003               AV
++ *    - Resync with 6.05.00b9.
++ *    - Retool HBA PCI configuration -- qla2x00_pci_config().
++ *    - Remove inconsistent use of delay routines (UDELAY/SYS*).
++ *    - Continue to teardown/clean/add comments and debug
++ *      routines.
++ *    - Properly swap bytes of the device's nodename in
++ *      qla2x00_configure_local_loop().
++ *
++ *  Rev  8.00.00b1-pre25 March ??, 2003               AV
++ *    - Resync with 6.05.00b8.
++ *
++ *  Rev  8.00.00b1-pre23 March ??, 2003               AV
++ *    - Remove (#define) IOCB usage throttling.
++ *    - Abstract interrupt polling with qla2x00_poll().
++ *    - Modify lun scanning logic:
++ *      - If the device does not support the SCSI Report Luns
++ *        command, the driver will now only scan from 0 to the
++ *        max#-luns as defined in the NVRAM (BIOS), rather than
++ *        blindly scanning from 0 to 255 -- which could result in
++ *        an increase in startup time when running against slow
++ *        (JBOD) devices.
++ *    - Rework reset logic in qla2x00_reset_chip() (spec).
++ *
++ *  Rev  8.00.00b1-pre22 March ??, 2003               AV
++ *    - Resync with 6.05.00b7.
++ *    - Cleanup (rewrite) ISR handler.
++ *    - Rename kmem_zalloc --> qla2x00_kmem_zalloc():
++ *      - This function will eventually be removed.
++ *    - Add new 2300 VIX firmware (3.02.09):
++ *      - Support for Tape, Fabric, 2K logins, IP, and VI.
++ *
++ *  Rev  8.00.00b1-pre18 March ??, 2003               AV
++ *    - Support 232x type ISPs.
++ *    - Support single firmware for each ISP type:
++ *      - Restructure brd_info/fw_info methods.
++ *      - Streamline firmware load process.
++ *      - Properly query firmware for version information.
++ *    - Remove extraneous scsi_qla_host members:
++ *      - device_id ==> pdev->device
++ *    - Fix fc4 features (RFF_ID) registration.
++ *    - Convert kmem_zalloc --> qla2x00_kmem_zalloc().
++ *    - Remove unused/extraneous #defines (USE_PORTNAME).
++ *
++ *  Rev  8.00.00b1-pre14 March ??, 2003               AV
++ *    - Resync with 6.05.00b6.
++ *    - Initial source-code restructuring effort.
++ *      - Build procedure.
++ *      - Source file layout -- intuitive component layout.
++ *      - Remove unused #defines (*PERFORMANCE, WORD_FW_LOAD, etc).
++ *    - Add support for 2K logins (TPX -- firmware).
++ *    - Add module parameter ql2xsuspendcount.
++ *    - Add new 2200 IP/TP firmware (2.02.04).
++ *
++ *  Rev  8.00.00b1-pre9       March ??, 2003  RL/DG/RA/AV
++ *    - Use kernel struct list_head for fcport and fclun lists.
++ *    - Remove extraneous (L|M)S_64BITS() and QL21_64*() defines.
++ *
++ *  Rev  8.00.00b1-pre8       February 28, 2003       RL/DG/RA/AV
++ *    - Resync with 6.05.00b3.
++ *
++ *  Rev  8.00.00b1-pre7       February 23, 2003       RL/DG/RA/AV
++ *    - Add alternate fabric scanning logic (GID_PT/GNN_ID/GPN_ID).
++ *    - Remove use of deprecated function check_region().
++ *    - Add new 2300 IP/TP firmware (3.02.08).
++ *
++ *  Rev  8.00.00b1-pre5       January 28, 2003        RL/DG/RA/AV
++ *    - Resync with 6.05.00b3.
++ *    - Consolidate device_reg structure definitions for ISP types.
++ *    - Add support for new queue-depth selection.
++ *    - Add new 2300 IP/TP firmware (3.02.07).
++ *
++ *  Rev  8.00.00b1-pre1       January 17, 2003        AV
++ *    - Initial branch from 6.04.00b8 driver.
++ *    - Remove VMWARE specific code.
++ *    - Add support for pci_driver interface.
++ *
++ ********************************************************************/
 
 _
index ac5af09..06952b0 100644 (file)
@@ -1,42 +1,42 @@
 drivers/scsi/Makefile
 drivers/scsi/Kconfig
-scsi/qla2xxx/Kconfig
-scsi/qla2xxx/Makefile
-scsi/qla2xxx/README.qla2x00
-scsi/qla2xxx/exioct.h
-scsi/qla2xxx/exioctln.h
-scsi/qla2xxx/inioct.h
-scsi/qla2xxx/ql2100tp_fw.c
-scsi/qla2xxx/ql2200ip_fw.c
-scsi/qla2xxx/ql2300tpx_fw.c
-scsi/qla2xxx/qla_cfg.c
-scsi/qla2xxx/qla_cfg.h
-scsi/qla2xxx/qla_cfgln.c
-scsi/qla2xxx/qla_dbg.c
-scsi/qla2xxx/qla_dbg.h
-scsi/qla2xxx/qla_def.h
-scsi/qla2xxx/qla_fo.c
-scsi/qla2xxx/qla_fo.cfg
-scsi/qla2xxx/qla_fo.h
-scsi/qla2xxx/qla_gbl.h
-scsi/qla2xxx/qla_inioct.c
-scsi/qla2xxx/qla_init.c
-scsi/qla2xxx/qla_inline.h
-scsi/qla2xxx/qla_iocb.c
-scsi/qla2xxx/qla_ip.c
-scsi/qla2xxx/qla_ip.h
-scsi/qla2xxx/qla_isr.c
-scsi/qla2xxx/qla_listops.h
-scsi/qla2xxx/qla_mbx.c
-scsi/qla2xxx/qla_os.c
-scsi/qla2xxx/qla_os.h
-scsi/qla2xxx/qla_settings.h
-scsi/qla2xxx/qla_sup.c
-scsi/qla2xxx/qla_vendor.c
-scsi/qla2xxx/qla_version.h
-scsi/qla2xxx/qla_xioct.c
-scsi/qla2xxx/qlfo.h
-scsi/qla2xxx/qlfolimits.h
-scsi/qla2xxx/qlfoln.h
-scsi/qla2xxx/release.txt
-scsi/qla2xxx/revision.notes
+drivers/scsi/qla2xxx/Kconfig
+drivers/scsi/qla2xxx/Makefile
+drivers/scsi/qla2xxx/README.qla2x00
+drivers/scsi/qla2xxx/exioct.h
+drivers/scsi/qla2xxx/exioctln.h
+drivers/scsi/qla2xxx/inioct.h
+drivers/scsi/qla2xxx/ql2100tp_fw.c
+drivers/scsi/qla2xxx/ql2200ip_fw.c
+drivers/scsi/qla2xxx/ql2300tpx_fw.c
+drivers/scsi/qla2xxx/qla_cfg.c
+drivers/scsi/qla2xxx/qla_cfg.h
+drivers/scsi/qla2xxx/qla_cfgln.c
+drivers/scsi/qla2xxx/qla_dbg.c
+drivers/scsi/qla2xxx/qla_dbg.h
+drivers/scsi/qla2xxx/qla_def.h
+drivers/scsi/qla2xxx/qla_fo.c
+drivers/scsi/qla2xxx/qla_fo.cfg
+drivers/scsi/qla2xxx/qla_fo.h
+drivers/scsi/qla2xxx/qla_gbl.h
+drivers/scsi/qla2xxx/qla_inioct.c
+drivers/scsi/qla2xxx/qla_init.c
+drivers/scsi/qla2xxx/qla_inline.h
+drivers/scsi/qla2xxx/qla_iocb.c
+drivers/scsi/qla2xxx/qla_ip.c
+drivers/scsi/qla2xxx/qla_ip.h
+drivers/scsi/qla2xxx/qla_isr.c
+drivers/scsi/qla2xxx/qla_listops.h
+drivers/scsi/qla2xxx/qla_mbx.c
+drivers/scsi/qla2xxx/qla_os.c
+drivers/scsi/qla2xxx/qla_os.h
+drivers/scsi/qla2xxx/qla_settings.h
+drivers/scsi/qla2xxx/qla_sup.c
+drivers/scsi/qla2xxx/qla_vendor.c
+drivers/scsi/qla2xxx/qla_version.h
+drivers/scsi/qla2xxx/qla_xioct.c
+drivers/scsi/qla2xxx/qlfo.h
+drivers/scsi/qla2xxx/qlfolimits.h
+drivers/scsi/qla2xxx/qlfoln.h
+drivers/scsi/qla2xxx/release.txt
+drivers/scsi/qla2xxx/revision.notes